首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获Throwable错误

捕获Throwable错误
EN

Stack Overflow用户
提问于 2012-04-20 01:51:07
回答 4查看 529关注 0票数 1

需要您对以下代码的反馈-

代码语言:javascript
复制
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,应用程序就会退出...为什么会有这样的差异?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-20 01:55:59

通常,也可以捕获错误(除非它们使VM崩溃或其他原因),Java6及更高版本允许捕获OutOfMemoryError。

票数 3
EN

Stack Overflow用户

发布于 2012-04-20 01:52:16

OutOfMemoryErrorError类的子类,后者是Throwable类的子类。这就是它打印出来的原因:

可捕获的中的

票数 8
EN

Stack Overflow用户

发布于 2012-04-20 01:55:14

不,代码不会退出,因为您正在吞噬异常。您所描述的“传统Java程序”在遇到此类错误时会崩溃,因为该异常未得到处理。您可以通过在程序的主线程上安装默认的异常处理程序来自己测试这一点。

代码语言:javascript
复制
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

   @Override
   public void uncaughtException(Thread t, Throwable e) {
      e.printStackTrace(System.err);
   }
});

throw new OutOfMemoryError();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10233848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档