考虑以下代码:
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
为Exception
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
,程序就会在没有做任何事情的情况下终止?
答案 0 :(得分:2)
默认情况下,即使main作为线程执行,也会执行默认的threadGroup uncaughtException
方法。如果你明确地定义了你的自定义uncaughtExceptionHandler并注册了它,那就是将要调用的内容。
发布你没有线程,你的主要终止它的执行,如果main是唯一正在运行的非守护进程线程,那么你的java进程也会终止。