2014-12-13 112 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

相關問題