抓住可抛出的错误

时间:2012-04-19 17:51:07

标签: java exception

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

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对象(使用new运算符)捕捉Throwable对象。所以我得到输出“Inside catch throwable”& “终于内心”。但是因为我们抛出OutofMemError不应该代码退出(即没有进入Throwable& finally)?在实际的实际项目中,如果我们得到OutOfMemoryError,那么应用程序就会退出...为什么会出现这种差异?

4 个答案:

答案 0 :(得分:8)

enter image description here

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

  

内部抓住可抛出

答案 1 :(得分:4)

不,代码不会退出,因为您正在吞下异常。您描述的“传统Java程序”因此类错误而崩溃,因为未处理异常。您可以通过在程序的主线程上安装默认异常处理程序来自行测试。

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

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

throw new OutOfMemoryError();

答案 2 :(得分:3)

通常,也可以捕获错误(除非它们崩溃VM或其他东西),Java 6以后允许捕获OutOfMemoryError。

答案 3 :(得分:2)

什么异常或错误或Throwable的子类(不必是异常或错误)都可以捕获Throwable。

没有什么可以导致线程退出异常System.exit(0);尝试相反。