假設(shè)我有這個(gè)例外:class NoMoreCarrotsException extends Exception {}這是一個(gè)已檢查的異常,因此必須對(duì)其進(jìn)行處理或聲明。假設(shè)我有這個(gè)方法:private static void eatCarrot(){}public void fails(){ try{ eatCarrot(); }catch(NoMoreCarrotsException e){}}和這個(gè):public void works() throws NoMoreCarrotsException { eatCarrot(); }為什么第二個(gè)有效但第一個(gè)無(wú)效?該eatCarrot方法不會(huì)拋出異常,那么為什么我們可以聲明/拋出它?
1 回答

largeQ
TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以聲明您的方法(works()
在這種情況下)throws
是一個(gè)異常,即使它沒(méi)有拋出它。
原因是這將允許覆蓋您的方法的子類(lèi)拋出該異常(或該異常的任何子類(lèi))。
另一方面,在 try-catch 塊中,如果您嘗試捕獲 try 塊無(wú)法拋出的異常,則您的 catch 塊將變?yōu)樗来a(即永遠(yuǎn)無(wú)法到達(dá)的代碼),而編譯器不會(huì)允許它。
添加回答
舉報(bào)
0/150
提交
取消