在Java中,我們使用System.exit(int)
來退出程序。 C中「退出值」的原因是退出值用於檢查程序中的錯誤。但在Java中,錯誤通過拋出異常來反映,因此可以輕鬆處理它們。那麼爲什麼我們有Java的退出值呢?爲什麼我們在Java中有退出碼?
回答
退出值返回給調用程序例如貝殼。異常不能被外部程序捕獲。
順便說一句如果拋出一個異常,它被該線程捕獲或該線程死亡,那麼該線程仍然會調用finally
塊。當你調用System.exit()時,所有的線程立即停止,最後不會調用塊。
退出值返回給調用者,表示程序成功或不成功完成。調用者可能無法捕捉異常並相應地處理它。
例如, 0退出值意味着成功完成,而非零返回值意味着執行中出現一些錯誤。
此外,System.exit()的將應用程序中的所有線程停止在該點本身。
出於同樣的原因。
退出代碼僅供程序外部的應用程序和應用程序使用,以用於調試和處理目的。超級應用程序確實可以處理返回代碼,而不是試圖解析堆棧跟蹤。另外,如果你正在爲一個最終用戶創建一個應用程序,那麼你應該從你的應用程序中優雅地退出,而不是發佈一堆棧跟蹤信息,原因有兩個:其中一個,你只會嚇到它們有很多看起來很瘋狂的技術亂碼,以及兩個堆棧跟蹤通常會揭示關於程序基本構造方式的敏感和機密信息(給予潛在攻擊者更多關於系統的知識)。
對於真實世界的例子,我正在上使用的退出代碼爲它工作在Java批處理程序。用戶可以根據退出代碼是否爲「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
- 1. 爲什麼我的退出
- 2. 爲什麼'os.system'退出代碼爲1?
- 3. 爲什麼我們在JAVA中使用這段代碼?
- 4. 爲什麼不能退出此代碼?
- 5. 爲什麼我們有數組和數組在Java中
- 6. 爲什麼我的for循環退出?
- 7. 我們爲什麼要通知退出狀態如退出(0),退出(1)的JVM?
- 8. 爲什麼我的代碼在java中輸出[email protected]?
- 9. 即使循環條件仍然有效,爲什麼我的代碼以退出代碼退出:0?
- 10. 爲什麼我在Java String中有?
- 11. 爲什麼這行Java代碼會導致我的應用程序退出?
- 12. 爲什麼我不能退出這個while循環(java)?
- 13. 爲什麼返回不能在Java中退出函數?
- 14. 爲什麼我們有Externalizable當我們可以覆蓋java中的writeObject和readObject
- 15. 爲什麼我們需要Java NIO Selector?
- 16. 爲什麼這個VBA代碼退出我的表單?
- 17. 爲什麼我的Gradle構建死於退出碼137?
- 18. 爲什麼「exec」在此代碼中給「孩子退出異常」?
- 19. 爲什麼在Perl中退出代碼255而不是-1?
- 20. 爲什麼我們在iphone
- 21. 爲什麼我們在SQL
- 22. 爲什麼我們在JS
- 23. 爲什麼我們在java中聲明變量爲private
- 24. 爲什麼我們需要java中的私有嵌套接口?
- 25. 爲什麼Windows.Media.VisualTreeHelper.GetChild(...)退出子?
- 26. 爲什麼程序退出?
- 27. 爲什麼PyQt崩潰沒有信息? (退出代碼0xC0000409)
- 28. 爲什麼我們在Java 1.6中從FileChannel.map中獲取ClosedByInterruptException?
- 29. 爲什麼有些人在出錯時退出-1而不是退出1?
- 30. 爲什麼我的併發函數在Go中過早退出?
。 –
爲什麼所有的downvotes? – arshajii
possiblity duplicate http://stackoverflow.com/q/457338/668970 – developer