try block 不会抛出任何内容,但是没有发生编译时错误



在程序中:

class Ideone
{
    public static void main (String[] args){
        try{} catch (NumberFormatException e){ }
    }
}

演示

实际上,JLS 11.2.3描述了这种情况下的行为:

如果 catch 子句可以捕获检查,则为编译时错误 异常类E1,但 try 块的情况并非如此 对应于 catch 子句可以抛出一个检查的异常类 那是E1的子类或超类,除非E1ExceptionException的超类 .

就我而言,catch 子句可以捕获既不是Exception也不是Exception超类的 NumberFormatException。尝试块不能抛出任何东西,因为里面没有语句。那么,为什么代码编译得很好呢?

如果 catch 子句可以捕获检查的异常,则这是一个编译时错误......

NumberFormatException不是已检查的异常。它是IllegalArgumentException的一个子类,是RuntimeException的一个子类。因此,您从JLS中引用的整个条款不适用。

NumberFormatException替换为一些不是 RuntimeException 子类的异常(例如,IOException (,您将收到编译时错误。

最新更新