使用检查异常时的Java错误编译

问题描述 投票:0回答:1

我正在使用 Eclipse,当我使用此代码时,它给我一个编译错误

无法访问 IOException 的 catch 块。这个例外从来都不是 从 try 语句主体抛出

public void f() {
    try {
        System.out.println("");
    } catch (IOException e) {
        // TODO: handle exception
    }
}

但是当我使用 Exception 而不是 IOException 进行编译时,两者都是检查异常,我做错了什么

java exception ioexception
1个回答
0
投票

catch (Exception e)
是 Java 语言规范中的一个特例。 规则

如果

catch
子句可以捕获检查异常类
E1
,并且与
try
子句对应的
catch
块不能抛出检查异常类,则这是一个编译时错误
E1
的子类或超类,除非
E1
Exception
Exception
的超类。

catch (IOException e)
只能捕获
IOException
及其子类,即all检查异常。

另一方面,

catch (Exception e)
可以捕获
RuntimeException
及其子类(除其他外),它们是not检查异常。因此,不能得出
catch
块永远不会被执行的结论。

© www.soinside.com 2019 - 2024. All rights reserved.