java - Java 默认声明 "throws Exception"吗?

标签 java exception exception-handling

考虑以下类:

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总是被添加的事实。

相关问题:

IOException vs RuntimeException Java

最佳答案

有两种类型的异常:已检查的异常(如解析文本时的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/

相关文章:

c++ - 如何在 C++ 中设计异常 "types"

java - 在Nvidia GPU上使用Java(CUDA)

Java 接口(interface)示例

java - Mule - 抛出异常直到成功

c++ - 不扩展 std::exception 的运行时异常消息

c++ - 如何在运行时确定 exception_ptr 指向的异常类型?

ios - 快速捕获无效用户输入的异常

Java lambda 返回一个 lambda

java - WebView 中的图像未加载

PHP "Uninclude"或从内存中删除?