當構造函數無法處理的構造函數中的方法拋出檢查異常時,如果確定應用程序無法處理它並且在沒有對象正在構建?構造函數可以拋出運行時異常嗎?
回答
是的,這是不可避免的在許多構造反正當他們調用其他方法,因爲總有一種可能性,他們已經將拋出unchecked異常。
這是一個很好的觀點。 – insipid 2010-02-03 19:08:17
是的。除非你知道應該如何處理異常,否則最好扔掉它,而不是簡單地吞下它並打印出堆棧跟蹤(或者更糟糕的是,什麼都不做)。
這將有助於防止稍後出現一些極其難以調試的錯誤。
是的。這是標準做法。
在Effective Java, 2nd Ed.這是由項目61覆蓋,「把適合於抽象例外」。在第58項「對可恢復條件使用已檢查的異常以及編程錯誤的運行時異常」中,有效Java也覆蓋了生成的異常是否已選中或未選中。
認爲這是一種構造函數,而不是一個正常的方法是不是一個真正的問題。 (事實上,構造函數可以說有更多的自由,因爲它們不受超級界面的約束。)
當拋出一個異常作爲另一個異常的結果時,確保你設置新的cause
是個好主意例外。
如Chris Jester-Young所評論的那樣,拋出檢查異常以表示構建對象失敗是完全可以的。另一個問題是,拋出未選中例外是個好主意。你會放鬆編譯器的嘮叨,它促使你捕捉和處理異常,你一定會這麼做。
爲什麼你想要?更多的時候,你不想處理它,它是一個錯誤,讓它運行到一個記錄器/作業處理程序的堆棧。 – reto 2011-09-29 15:47:11
個人而言,我討厭看到構造函數拋出checked異常(如doppeldish已經指出的那樣)。不過,你如何確定應用程序無法處理異常呢?即使應用程序無法處理它,也許用戶可以通過再次嘗試?
+1需要考慮的事情:P謝謝 – insipid 2010-02-05 20:20:11
- 1. 運行析構函數,當構造函數拋出異常
- 2. 構造函數拋出異常後可以調用finalize嗎?
- 3. 構造函數拋出運行時異常
- 4. 可以拋出一個對象的構造函數拋出異常嗎?
- 5. 通用類構造函數在運行時拋出類拋出異常錯誤
- 6. 運行時異常可以被拋出?
- 7. 構造函數和拋出異常
- 8. ServerSocket的構造函數拋出異常
- 9. 從構造函數中拋出異常
- 10. EJB3構造函數拋出異常?
- 11. Angular2,構造函數DI拋出異常
- 12. Handler.publish()的實現可以拋出運行時異常嗎?
- 13. YamlDotNet串行構造函數拋出異常
- 14. Java:可以拋出異常拋出異常嗎?
- 15. 數組構造拋出NullPointerException異常
- 16. 可以默認構造函數拋出嗎?
- 17. WebDriver FluentWait - 函數/謂詞可以拋出異常嗎?
- 18. 你可以從請求對象 - csrf構造函數異常構造csrf嗎?
- 19. 角2參數傳遞到構造函數拋出異常DI
- 20. Fluent Nhibernate拋出異常FluentNHibernate.Automapping.IAutoClasslike ...缺少無參數構造函數
- 21. 驗證構造函數中的數據並拋出異常
- 22. 我可以從_CrtSetReportHook拋出異常嗎?
- 23. 文件流析構函數可以在C++中拋出異常嗎?
- 24. 瞭解由構造函數拋出的異常
- 25. 無法捕獲由std :: thread構造函數拋出的異常
- 26. 從構造函數中拋出異常在C++中
- 27. 升壓正則表達式異常從構造函數拋出* {
- 28. 在MainWindow類型上調用構造函數拋出異常
- 29. 如果分配的內存構造函數拋出異常
- 30. Xamarin OpenGL GLSurfaceView構造函數拋出空引用異常
是的,從構造函數中拋出異常是放棄創建對象的標準方式。 – 2010-02-03 18:59:16
+1 - OOP的新來者的好問題 – JonH 2010-02-03 19:00:08