很多同學(xué)看到Throwable以able結(jié)尾,就以為Throwable是接口,其實(shí)Throwable是個類。
此時就會有同學(xué)有這樣的疑問,那為什么不將Throwable類直接設(shè)置為接口呢?
首先,以able結(jié)尾大多數(shù)時候確實(shí)用來表示接口,但說到底,這不過是一個約定,而不是語法要求,所以,并不能100%地認(rèn)為以able結(jié)尾的都是接口。
其次,我們會發(fā)現(xiàn)Java的異常機(jī)制里面是沒有接口的,它的頂層類就是Throwable類。也就是說,你要定義一個異常類,就必須繼承另一個異常類,因?yàn)閏atch子句要求它必須捕獲一個異常,而不是任意對象。
注意:Javascript就沒有這個要求,因此你可以捕獲任何對象作為異常。
既然自定義的異常必須要繼承另一個異常類,那么它就不能再繼承別的類,這樣就在很大程度上限制了異常類的用途,從而更有利于開發(fā)設(shè)計(jì)良好的程序。
例如:假設(shè)Throwable是一個接口,那么任何一個類都可以實(shí)現(xiàn)它,然后作為異常用catch來捕獲,這就有點(diǎn)像Javascript的情況,違反了單一職責(zé)原則。所以,現(xiàn)在Javascript也建議程序員盡量用專門的異常對象,而不是字符串,這樣會讓程序更明確。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程