2015-08-13 24 views
6

說我有下面的代碼:捕獲應用程序停止異常時應該使用System.exit(1)嗎?

try { 
    //Do something with File 
} catch (FileNotFoundException e) { 
    outputInfo("Error in IO Redirection", true); 
    e.printStackTrace(); 
    System.exit(1); 
} 

我的程序該抓的位置後立即退出,是一個單獨的線程(一個主法)​​計劃,不應該指望從這樣的異常中恢復。

我該不該真的正在使用System.exit(1);

+0

在system.exit中使用整數1-127表示程序異常終止。如果您不想在catch塊之後執行任何其他操作,則可以使用它或捕獲異常並使用適當的錯誤消息進行打印。 – Shriram

+0

你在考慮什麼替代'System.exit(1);'? – jaco0646

+0

沒有其他選擇,我只是想知道當我使用System.exit(1)時需要考慮什麼;而我應該理解的可能會在我的所有異常處理捕獲中使用此錯誤。 – insidesin

回答

4

如果你期望別人來運行您的程序,以及它們所依賴的進程狀態代碼知道,如果你的程序是成功還是失敗,那麼你應該使用System.exit(1);

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#exit%28int%29

終止目前運行Java虛擬機。參數 用作狀態碼;按照慣例,非零狀態碼 表示異常終止。

+0

如果您的程序也使用finally子句,該怎麼辦? 'System.exit(1)'肯定會產生干擾,這是否意味着您可能必須在調用exit之前重複完成代碼? – insidesin

+0

您可以將'exit'語句放在'catch'塊之外,或者創建一個[shutdown hook](http://stackoverflow.com/questions/2921945/useful-example-of-a-shutdown-hook- in-java),它將在JVM終端上執行(在你調用'exit'後)。 – dotvav

2

在應用程序失敗時使用非零退出代碼的原因之一是它們可以在批處理文件中使用。如果您的應用程序是控制檯應用程序,則始終使用正確的退出代碼你不知道將來如何使用它。

+0

我同意。我喜歡面向未來的,退出代碼在我遇到的程序中很少見到,奇怪的是......可能太多的開銷在大部分時間都在思考。 – insidesin

相關問題