实现方法抛出异常但接口方法没有定义,因为它抛出异常

时间:2014-08-26 10:49:43

标签: java exception jls

在实现接口时,接口方法不会抛出异常是完全合法的,但实现类方法可以抛出异常。

接口定义

public interface exceptionNotDefined {
    void doNotThrowException();
}

实施课程

public class exceptionNotDefinedImpl implements exceptionNotDefined {
    @Override
    public void doNotThrowException() throws RuntimeException{

    }
}

这背后的逻辑是什么,以及Java语言规范的哪个部分处理这个问题。

1 个答案:

答案 0 :(得分:3)

  

......这是

背后的逻辑

逻辑最好用“#34;替代性”这个词来描述。

当接口方法被声明为" throw"一个检查异常,它说调用者必须处理异常(通过捕获它或通过声明它...或超类型)。

当您在不抛出异常的情况下实现该方法时,方法调用是可替换的。如果异常不被抛出,那么具有处理异常可能性的代码的调用者可以应对。

另一个问题是,在实现类中,您将方法声明为抛出RuntimeExceptionRuntimeException及其子类是未经检查的异常,Java语言表示调用者不需要处理未经检查的异常。事实上,除了记录API设计者的意图外,throws RuntimeException没有实际效果。


  

... Java语言规范的哪个部分涉及此问题。

JLS部分11.2涵盖了大部分内容,并且在JLS 8.4.8.3中给出了有关方法覆盖的具体规则(包括throws子句)。