2013-05-11 44 views
2

終止程序的很好的做法我有一個方法拋出一個異常什麼是catch子句

public int myMethod throws Exception 

我有另一個函數調用myMethod的功能和HAVA try-catch塊。 我拋出一個運行時異常來強制程序被終止。 這是終止程序的正確方法嗎?如果我這樣做,它將打印兩次堆棧跟蹤,而來自RuntimeException的堆棧跟蹤是無用的。

什麼是catch子句來終止程序與打印完整的堆棧跟蹤建議的方式。

public int callMyMethod(){ 
    try{ 
     myMethod(); 
    } 
    catch(Exception ex){ 
      ex.printStackTrace(System.out); 
      throw new RuntimeException(); 
    } 
} 

回答

9

答案是 「看情況」。

如果此代碼是應用程序本身,然後調用System.exit(int)的一部分可能是最好的選擇。 (但是,如果應用程序是「失敗」的,那麼你應該調用exit帶有一個非零的返回碼。零通常意味着「成功」。)

但是,如果有很大的可能性,這個代碼將是嵌入/重用在更大的Java應用程序中,調用System.exit(...)是有問題的。例如,一個在發生不良事件時調用System.exit(...)的庫會對使用它的應用程序造成嚴重破壞。

對於這樣的事情,你可能會引發你可以捕獲它,在你main方法具體處理自定義運行時異常。 (如果我這樣做了,我會將Exception作爲構造函數參數傳遞給自定義異常......並使其成爲cause例外,並且我不會在此處打印它/記錄它。)

(呼叫System.exit(...)也會導致一些問題的時候,你是單元測試...「COS的通話將最有可能拉動JVM插件運行測試套件!)


的另一點是,catch (Exception ...)幾乎總是餿主意。關鍵在於,它抓住了一切(包括你從未夢想過的各種事情!)並將它們掩埋起來。捕捉你期望的特定異常(例如檢查異常)並且可以處理...並讓其餘部分以正常方式傳播是更好的辦法。

如果您因catch (Exception ...)卡住了,因爲您使用的東西被宣告爲拋出Exception,處理該問題的最佳方法是更改​​throws Exception。越快越好。更改throws Exception以聲明您希望由該方法引發的(更多)特定異常的列表。

1
public int callMyMethod(){ 
    try{ 
     myMethod(); 
    } 
    catch(Exception ex){ 
      ex.printStackTrace(System.out); 
      System.exit(0); // terminates with exit code 0, no extra stack trace. 
    } 
} 
0

異常處理是在編程中最重要的方面之一。 您的問題的答案取決於您正在處理的應用程序的類型。

system.exit(0)只會終止您的程序,可以創造很多混亂的。 還要確保你從來沒有捕獲異常,如果你這樣做,那麼你正在捕捉所有你可能不打算處理的異常類型。

總是趕特例使得它給你的機會來處理它在您需要的方式。