考虑这段代码:
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();
}
}
我知道当 Exception
为 throw
'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/