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

标签 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();
    }

}

我知道当 Exceptionthrow'n 时,main 将终止。

我想知道的是,JVM(或任何地方)中是否有某个程序在发生这种情况时执行?

编辑:

阅读 almas shaikh 的回答后,我设法像这样处理这个异常:

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 程序就会终止而不执行任何操作?

最佳答案

默认情况下,即使 main 也作为线程执行,并且默认执行 threadGroup 的 uncaughtException 方法。如果您已明确定义自定义 uncaughtExceptionHandler并注册了它,然后就是这个名字了。

发布您的线程不足并且您的 main 终止其执行,如果 main 是唯一正在运行的非守护线程,那么您的 java 进程也将终止。

关于java - 当 main 抛出异常时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460533/

相关文章:

java - 如何仅拦截 ScrollView 中特定角度的运动事件?

java - 指定抛出 IOException

java - 热点 JVM 数组分配

javascript - JSP 代码如何操作 Ajax javascript 代码中的值?

java - 如何访问事件监听器类中的变量?

Java - Jtable - 具有不同颜色的单元格

java - 如何创建可以抛出任何异常的通用函数?

Java 按日期保存对象

java - JVM 对 `final` 的处理

java - 出于测试目的终止 Java 线程