2012-12-26 20 views
5

在Java中,我們使用System.exit(int)來退出程序。 C中「退出值」的原因是退出值用於檢查程序中的錯誤。但在Java中,錯誤通過拋出異常來反映,因此可以輕鬆處理它們。那麼爲什麼我們有Java的退出值呢?爲什麼我們在Java中有退出碼?

+8

。 –

+5

爲什麼所有的downvotes? – arshajii

+0

possiblity duplicate http://stackoverflow.com/q/457338/668970 – developer

回答

13

退出值返回給調用程序例如貝殼。異常不能被外部程序捕獲。

順便說一句如果拋出一個異常,它被該線程捕獲或該線程死亡,那麼該線程仍然會調用finally塊。當你調用System.exit()時,所有的線程立即停止,最後不會調用塊。

0

退出值返回給調用者,表示程序成功或不成功完成。調用者可能無法捕捉異常並相應地處理它。

例如, 0退出值意味着成功完成,而非零返回值意味着執行中出現一些錯誤。

此外,System.exit()的將應用程序中的所有線程停止在該點本身。

3

出於同樣的原因。

退出代碼僅供程序外部的應用程序和應用程序使用,以用於調試和處理目的。超級應用程序確實可以處理返回代碼,而不是試圖解析堆棧跟蹤。另外,如果你正在爲一個最終用戶創建一個應用程序,那麼你應該從你的應用程序中優雅地退出,而不是發佈一堆棧跟蹤信息,原因有兩個:其中一個,你只會嚇到它們有很多看起來很瘋狂的技術亂碼,以及兩個堆棧跟蹤通常會揭示關於程序基本構造方式的敏感和機密信息(給予潛在攻擊者更多關於系統的知識)。

對於真實世界的例子,我正在上使用的退出代碼爲它工作在Java批處理程序。用戶可以根據退出代碼是否爲「0」來查看作業是否成功執行。如果還有其他事情,他們可以聯繫技術支持人員,並附上退出代碼的附加信息,並且服務檯將根據退出代碼提供所有必要信息以幫助解決問題。它比試圖詢問非技術性最終用戶好得多,「好的,那麼你得到了什麼樣的異常?」

0

長話短說,退出代碼是簡化的信號,運行Java程序時誰遇到異常的用戶。由於我們假定大多數用戶不理解異常的堆棧跟蹤數據,因此這些簡單的非零自定義代碼將告訴他們有什麼不對,並且應該向供應商報告。因此,供應商獲得代碼,他知道與該代碼相關的堆棧跟蹤並嘗試修復系統。這是程序員提供的抽象,用戶不必閱讀和報告大量的堆棧跟蹤。這裏的一個很好的類比是SQLException類中的getErrorCode()方法。此方法還會關閉當前運行在客戶機上的JVM。這意味着這會終止JVM中的所有線程。此方法在類Java.lang.Runtime中調用exit方法。如果您閱讀此方法的文檔,您將瞭解虛擬機如何關閉。

這是爲操作系統指定的退出值的鏈接 http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exit%28int%29

相關問題