为什么扩展和抛出不能同时用于给定的类

时间:2018-04-30 18:19:40

标签: java inheritance exception

class A{
}

class B extends A throws Exception{
}

上面的代码给出了CompileTime错误"令牌上的语法错误" throws",实现了预期"

任何人都可以告诉我为什么在java中不允许这样做的确切原因。提前致谢

2 个答案:

答案 0 :(得分:4)

类只是对象的模板。虽然它确实包含实际执行指令的方法,但它本身不会抛出异常,因为它不执行实际代码。因此throws子句只能用于方法,而不能用于类本身。

答案 1 :(得分:0)

作为覆盖方法的一般规则,您不能抛出已经由父类/接口中的方法定义的已检查异常。 这是为了确保处理已检查的异常,否则会出现编译时错误。

如果存在使用父引用调用方法的代码,那么在编译时,被覆盖的实现是未知的,因此它抛出的异常也是如此,因此编译器将无法为未处理的已检查异常设置错误。 为避免这种情况,编译器不允许为overriden方法定义新的已检查异常。