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){…}
,显然这是正确的捕获方法。我问只是出于好奇。