據我所知,如果你只聲明一個檢查的異常,它將通過你的所有方法傳播到主方法,並仍然中斷你的正常程序流程和你的程序仍然會停止工作。那麼,爲什麼不總是用try/catch來處理檢查的異常......這樣,你的程序不會因爲異常而停止?爲什麼要在方法的簽名中聲明異常?對不起,我的英文不好聲明一個異常而不是處理它的意義是什麼
回答
據我瞭解,如果你只是聲明瞭一個檢查異常,將通過所有方法向下傳播的主要方法,仍然中斷正常的程序流程和程序仍然會停止工作。
絕對。這是一個好事情如果發生了什麼事真的無法處理。
例如,假設您已經有一個程序正在用文件中的某些數據更新您的數據庫 - 但您無法加載該文件。
您可能剛剛捕獲異常,忽略它,仍然在你的數據庫覆蓋數據......但將不是一件好事。一旦你處於一種你沒有做好準備的情況,或者你基本上不能明智地繼續下去,那麼停止是做負責任的事情。
當然,如果你能真正處理異常並繼續前進,這是偉大的 - 但我的經驗,也有相對幾個錯誤,其中是這樣的話。如果你正在編寫一個服務器端應用程序,你通常要中止請求(並給客戶端一個錯誤)。如果你正在編寫一個用戶界面,那麼你可能只想放棄當前的操作,通知用戶並讓他們繼續......這是一個稍微不同的情況。
但是無條件地捕捉所有異常並假裝它們沒有發生? <不寒而慄>
例如,如果調用方法能夠更好地處理異常。
假設你有一些讀取文件的方法。如果文件不存在,該方法如何知道需要發生什麼?也許整個程序應該終止,也許我們應該彈出通知用戶,也許它應該記錄異常並繼續,也許它應該嘗試從備份恢復文件。只有調用方法知道,所以它應該實現異常處理。
它適用於更復雜的系統。誰在鏈上使用你的代碼可能想知道哪裏出了問題,所以你讓他們處理這個異常。它不一定完全一致(並且不可能真的,除非堆棧中的每一個方法拋出異常,這將打敗整個目的。)
例外的一點是,您可以選擇at其中級別可以捕獲它們;您不必立即執行此操作 - 有時候這是正確的做法,但是單個頂級catch子句可以通過記錄它們來處理所有其他異常,然後跳到下一個任務/請求(例如在一個servlet容器中)。
Java的檢查異常試圖通過強制您處理或聲明異常來使此機制更加明確。這可以防止您忘記即將處理的異常。然而,許多人認爲這是一個語言設計失敗的實驗(注意,沒有其他語言採用檢查異常),因爲它迫使你在所有級別上都有一些與異常相關的代碼 - 正是爲了避免異常而設計的。
- 1. 聲明不需要處理的異常?
- 2. MIPS異常它們是什麼意思
- 3. 什麼是「異步異常處理」
- 4. 這個C#聲明是什麼意思?
- 5. 這個CSS聲明是什麼意思?
- 6. 會不會處理異常是一個更好的主意
- 7. 這是什麼CSS聲明的意思是 - 兩個聲明一次
- 8. 什麼是'不是聲明'?
- 9. 爲什麼異常是一個類,而不是結構?
- 10. 爲什麼這被認爲是一個未處理的異常?
- 11. 這個異常是什麼意思?
- 12. Netty異常處理 - Handler拋出異常,那麼是什麼?
- 13. 變量聲明後面的一個問號是什麼意思?
- 14. 以下聲明是什麼意思?
- 15. 爲什麼使用'extern'聲明而不是定義創建一個變量?
- 16. 什麼是關鍵詞的幾許的意義JavaScript的聲明
- 17. 什麼是聲明
- 18. 在非靜態類中聲明一個靜態方法的意義是什麼?
- 19. 爲什麼不使用錯誤數組而不是異常處理?
- 20. 「聲明方法」的語義是什麼?
- 21. 用static關鍵字聲明一個對象是什麼意思?
- 22. 爲什麼我的函數返回一個聲明,而不是「而」
- 23. 當它說「一個事件不能被處理」是什麼意思?
- 24. 這個java MySQL異常的原因是什麼(和處理)?
- 25. C++什麼放在一個類聲明,什麼不是
- 26. ffmpeg聲明 - 拋出異常而不是中止
- 27. 什麼是「只能處理可以處理的異常」真的意味着什麼?
- 28. 聲明一個方法總是拋出一個異常?
- 29. 異常處理:什麼異常提出
- 30. 當聲明一個函數時,'static'的含義是什麼
可能重複的[何時選擇檢查和未檢查的異常](http://stackoverflow.com/questions/27578/when-to-choose-checked-and-unchecked-exceptions) – Bohemian 2012-03-24 15:04:55
@dido:除了什麼Jon Skeet回答說(你可以真正處理的例外情況相對較少),你必須問自己這個問題:「程序員如何能夠用無數語言工作,甚至沒有檢查異常的概念? 「*。 Checked異常對於Java來說非常特殊,並且每天都有大量的程序員在使用,而這些語言沒有檢查異常的概念。您的客戶的問題域中存在檢查異常。 300 KLOC代碼庫,在這裏我們不會拋出一次檢查異常。 – TacticalCoder 2012-03-24 15:10:27
可能重複[對檢查異常的情況](http://stackoverflow.com/questions/613954/the-case-against-checked-exceptions) – emory 2012-03-24 15:53:42