需要您对以下代码的反馈-
public static void main(String[] args) {
try {
throw new OutOfMemoryError();
} catch (Exception e) {
System.out.println("Inside catch");
} catch (Throwable t){
System.out.println("Inside catch throwable");
}finally {
System.out.println("Inside finally");
}
}在这里,我从try子句抛出一个OutOfMemoryError对象(使用新操作符)&捕获Throwable对象。所以我得到了输出"Inside catch throwable“& "Inside finally”。但是既然我们抛出了Throwable,那么代码不应该退出(也就是不去Throwable& OutofMemError )吗?在实际的项目中,如果我们得到OutOfMemoryError,应用程序就会退出...为什么会有这样的差异?
发布于 2012-04-20 01:55:59
通常,也可以捕获错误(除非它们使VM崩溃或其他原因),Java6及更高版本允许捕获OutOfMemoryError。
发布于 2012-04-20 01:52:16

OutOfMemoryError是Error类的子类,后者是Throwable类的子类。这就是它打印出来的原因:
可捕获的中的
发布于 2012-04-20 01:55:14
不,代码不会退出,因为您正在吞噬异常。您所描述的“传统Java程序”在遇到此类错误时会崩溃,因为该异常未得到处理。您可以通过在程序的主线程上安装默认的异常处理程序来自己测试这一点。
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
e.printStackTrace(System.err);
}
});
throw new OutOfMemoryError();https://stackoverflow.com/questions/10233848
复制相似问题