在例外層次結構中, RuntimeException
的後代和Error
的後代是運行時異常/錯誤。RuntimeException&Error
這兩者之間的區別是:那些RuntimeException
下是 差引起的編程/設計的那些,和那些的Error
是 不能/不應由顯影劑所控制的那些。
爲了編碼應用程序中的異常,例如 ,當發生業務邏輯中的某事時拋出異常, RuntimeException
被擴展。
的問題是,究竟是擴展 RuntimeException
和擴展Error
之間的區別 - 除了延長 Error
是不好的做法?
誰說它*是壞習慣?當然不是你每天都會做的事情,但我並不懷疑有些情況下它可能是值得的。 –
@HotLicks Joshua Bloch建議在他的着作Effective Java中這樣做:「雖然Java語言規範並不要求它,但有一個強大的約定,即錯誤被JVM用來指示資源缺陷,不變的故障或其他由於幾乎普遍接受這個約定,所以最好不要使用 來實現任何新的Error子類。因此,**所有未實現的可執行的throwables應該繼承** RuntimeException(直接或間接的)。」 – alfasin
@alfasin - 因此XYZ操作系統可能在檢索系統時鐘時檢測到硬件故障,但它不應該調用該錯誤?一個控制化學工廠閥門的API可能會檢測到硬件故障,並且不應該將其稱爲錯誤? –