2014-12-13 60 views
1

考虑以下代码:当main抛出异常时会发生什么?

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(或任何地方)过程的一些国王执行时发生这种情况?

编辑:

阅读阿尔马斯后谢赫回答我设法处理这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

@Charlie你没明白我的问题。 – 2014-12-13 15:41:39

+0

这就是为什么我删除了我的评论:I – Charlie 2014-12-13 15:41:57

回答

2

默认情况下,即使作为主线程和默认执行线程组的uncaughtException方法执行。如果您明确定义了自定义uncaughtExceptionHandler并注册了它,那么这就是要调用的内容。

后您不在线程和你的主终止其执行,如果主要是正在运行的唯一的非守护线程,那么你的java进程将终止为好。

+0

有趣的是,我搞砸了一下,并更新了我的问题。那么这是否真的如此呢?如果我没有明确定义'UncaughtExceptionHandler',什么都不会发生? – 2014-12-13 15:58:13

+0

否。它将优雅地终止JVM,而不管您是否拥有uncaughtException处理程序。这是关于你的问题,“我想知道的是有JVM中工序的一些国王(或任何地方)执行时发生这种情况” – SMA 2014-12-13 16:02:33

+0

喔,我知道它会终止醚方式,我只是想知道,如果有穿着一些在这种情况下被调用的外部(不是我写的)程序。 – 2014-12-13 16:06:57

相关问题