为什么Java中的某些异常未被捕获catch (Exception ex)
?这是代码由于没有处理的异常而完全失败。(Java版本1.4)。
public static void main(String[] args) {
try {
//Code ...
} catch (Exception ex) {
System.err.println("Caught Exception");
ex.printStackTrace();
exitCode = app.FAILURE_EXIT_CODE;
}
finally {
app.shutdown();
}
System.exit(exitCode);
}
我得到一个 Exception in thread "main" java.lang.NoSuchMethodError
但这有效
public static void main(String[] args) {
int exitCode = app.SUCCESS_EXIT_CODE;
try {
//Code ...
} catch (java.lang.NoSuchMethodError mex){
System.err.println("Caught NoSuchMethodError");
mex.printStackTrace();
exitCode = app.FAILURE_EXIT_CODE;
} catch (Exception ex) {
System.err.println("Caught Exception");
ex.printStackTrace();
exitCode = app.FAILURE_EXIT_CODE;
}
finally {
app.shutdown();
}
System.exit(exitCode);
}
我懂了 Caught NoSuchMethodError java.lang.NoSuchMethodError:
我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常?
因为某些异常不是源自Exception
-例如Throwable
和Error
。
基本上,类型层次结构是:
Object
|
Throwable
/ \
Exception Error
只能Throwables
抛出和派生类,因此,如果您捕获Throwable
,那实际上将捕获所有内容。
Throwable
,Exception
以及任何异常,从获得Exception
其他比那些源自RuntimeException
数作为检查的异常 -他们是的,你必须声明你扔了,或者捕捉如果你调用的东西,抛出他们。
总而言之,Java异常层次结构有点混乱……
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句