相关疑难解决方法(0)

为什么Java编译器允许在throws部分中列出异常,该方法无法抛出异常

如果有一些代码显然无法抛出异常,那么Java编译器似乎不一致,并且您编写了声明代码可以抛出该异常的周围代码.

请考虑这些代码段.

片段1

一个catch永远不会被抛出的异常.

public void g(){
        try {

        } catch (FileNotFoundException e) {//any checked exception

        }

}
Run Code Online (Sandbox Code Playgroud)

消息是编译错误

Unreachable catch block for FileNotFoundException. This exception is never thrown from the try statement body
Run Code Online (Sandbox Code Playgroud)

Snippet2

一个throws声明,指示从不抛出的异常.

public void g() throws FileNotFoundException{
}
Run Code Online (Sandbox Code Playgroud)

它汇编很好.

因此,第一个代码段的结果显示编译器可以计算方法是否可以抛出throws列表中列出的异常.因此,似乎编译器故意不报告第二个片段的错误.但为什么?为什么编译器允许您在throws部分中编写异常,即使编译器知道这些异常不能被抛出?

java exception-handling exception

8
推荐指数
1
解决办法
491
查看次数

标签 统计

exception ×1

exception-handling ×1

java ×1