Java是否默认声明"抛出异常"?

Ant*_*y H 10 java exception-handling exception

考虑以下课程:

class X
{
public void met()
   {
   }
}
Run Code Online (Sandbox Code Playgroud)

class Y extends X
{
    public void met() throws NullPointerException
    {
        throw new NullPointerException();
    }
}
Run Code Online (Sandbox Code Playgroud)

从我在其他问题上阅读的内容(为什么不能覆盖方法抛出比重写方法更广泛的异常?抛出异常的Java方法)

我理解子类中的重写方法必须抛出重写方法中抛出的异常的相同或子类.

Java方法总是抛出异常类型的异常吗?

...换句话说,编译器添加了抛出异常

所以X类看起来像这样

class X {
    public void met() throws Exception {

    }
}
Run Code Online (Sandbox Code Playgroud)

我想澄清一点,我并没有错误地总是添加默认异常处理程序Exception.

相关问题:

IOException与RuntimeException Java

sla*_*dan 8

有两种类型的异常:已检查的异常(如ParseException解析文本时)和未经检查的异常(如NullPointerException).

必须在方法签名中声明已检查的例外.可以在方法签名中声明未经检查的异常.

当重写方法(从接口或超类),你只需要指定例外,你扔在您的实现.您不能声明在重写方法中不允许的实现中抛出已检查的异常.

这是允许的:

class X { void someMethod() }
class Y extends X { @Override void someMethod() throws UncheckedException }
Run Code Online (Sandbox Code Playgroud)

这是不允许的:

class X { void someMethod() }
class Y extends X { @Override void someMethod() throws CheckedException }
Run Code Online (Sandbox Code Playgroud)

这也是允许的:

class X { void someMethod() throws CheckException }
class Y extends X { @Override void someMethod() }
Run Code Online (Sandbox Code Playgroud)

  • 一个代码示例比许多理论文章更好^ _ ^ (2认同)