当main抛出异常时会发生什么?

时间:2014-12-13 15:36:53

标签: java exception jvm

考虑以下代码:

public class Test {

    public static void main(String[] args) throws Exception {
        mayFail();
        System.out.println("This shouldn't run");
    }

    public static void mayFail() throws Exception{
        throw new Exception();
    }

}

我知道当mainException n时,throw会终止。

我想知道的是JVM(或任何地方)有一个程序之王在发生这种情况时会执行吗?

修改

在阅读了almas shaikh回答后,我设法像这样处理Exception

public class Test{

    public static void main(String[] args) throws Exception {
        UncaughtExceptionHandler a = new UncaughtExceptionHandler() {

            @Override
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println("Uncaught Exception");
            }
        };

        Thread.setDefaultUncaughtExceptionHandler(a);

        mayFail();
        System.out.println("This shouldn't run");
    }

    public static void mayFail() throws Exception{
        throw new Exception();
    }

}

所以,如果我理解正确,这就是它的目标吗?如果没有UncaughtExceptionHandler,程序就会在没有做任何事情的情况下终止?

1 个答案:

答案 0 :(得分:2)

默认情况下,即使main作为线程执行,也会执行默认的threadGroup uncaughtException方法。如果你明确地定义了你的自定义uncaughtExceptionHandler并注册了它,那就是将要调用的内容。

发布你没有线程,你的主要终止它的执行,如果main是唯一正在运行的非守护进程线程,那么你的java进程也会终止。