gpt4 book ai didi

未捕获 Java 异常

转载 作者:IT老高 更新时间:2023-10-28 20:43:15 27 4
gpt4 key购买 nike

为什么 catch (Exception ex) 没有捕捉到 Java 中的某些异常?这是代码完全失败并出现未处理的异常。 (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);
}

我在线程“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 - 例如ThrowableError.

基本上类型层次是:

       Object
|
Throwable
/ \
Exception Error

只有 Throwables 和派生类可以被抛出,所以如果你捕获 Throwable,那真的会捕获一切。

ThrowableException 以及从 Exception 派生的任何异常 other,而不是从 RuntimeException< 派生的异常 算作检查的异常 - 它们是你必须声明你将抛出的异常,或者如果你调用抛出它们的东西就捕获它们。

总而言之,Java 异常层次结构有点困惑......

关于未捕获 Java 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1375113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com