考虑以下类:
class X
{
public void met()
{
}
}
和
class Y extends X
{
public void met() throws NullPointerException
{
throw new NullPointerException();
}
}
根据我阅读的其他问题(Why can't overriding methods throw exceptions broader than the overridden method? 和 Java method throwing exception)
我知道子类中的覆盖方法必须抛出与被覆盖方法中抛出的异常相同的异常或异常的子类。
Java 方法是否总是抛出至少一个 Exception 类型的异常?
...换句话说,编译器添加了throws Exception
所以类 X 看起来像这样
class X {
public void met() throws Exception {
}
}
我想澄清的是,我没有弄错默认异常处理程序Exception总是被添加的事实。
相关问题:
最佳答案
有两种类型的异常:已检查的异常(如解析文本时的ParseException
)和未检查的异常(如NullPointerException
)。
检查异常必须在方法签名中声明。未经检查的异常可以在方法签名中声明。
当重写方法(从接口(interface)或父类(super class))时,您只需指定要在实现中抛出的异常。您不能声明在重写方法中不允许的实现中抛出已检查的异常。
这是允许的:
class X { void someMethod() }
class Y extends X { @Override void someMethod() throws UncheckedException }
这是不允许的:
class X { void someMethod() }
class Y extends X { @Override void someMethod() throws CheckedException }
这也是允许的:
class X { void someMethod() throws CheckedException }
class Y extends X { @Override void someMethod() }
关于java - Java 默认声明 "throws Exception"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30165811/