Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当main抛出异常时会发生什么?_Java_Exception_Jvm - Fatal编程技术网

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

Java 当main抛出异常时会发生什么?,java,exception,jvm,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();

考虑以下代码:

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

}
我知道
main
将在
异常
throw
'n时终止

我想知道的是,在
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
方法。如果你已经明确定义了你的定制并注册了它,那么这就是我们要说的


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

@Charlie您不理解我的问题。这就是为什么我删除了我的注释:IInteresting,我把它弄糟了一点,并更新了我的问题。那么,这真的就到此为止了吗?如果我没有明确定义一个
UncaughtExceptionHandler
,那么什么也不会发生。不。它将优雅地终止JVM,不管您是否有UncaughtExceptionHandler。这是关于你的问题“我想知道的是JVM(或任何地方)中是否有一个当这种情况发生时执行的过程”哦,我知道它会以同样的方式终止,我只是想知道是否有一些外部的(不是我写的)如果您想让主线程处理所有异常捕获所有类型的异常,比如
try{…}catch(exception e){…}
,显然这是正确的捕获方法。我问只是出于好奇。