第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

test2方法沒有聲明異常拋出,為什么編譯器還能通過?

test1方法不聲明,直接throw就會編譯不通過。而test2方法調(diào)用test1方法,try-catch了,為什么異常還能拋出去?拋出去的時(shí)候?yàn)槭裁催€不需要throws聲明。為什么,為什么呢?

正在回答

10 回答

因?yàn)檫@里拋出的是Runtime異常,Runtime異常不需要用throws聲明,也不需要try-catch,可以直接throw拋出

jvm會自動處理,見1-1的6分20,不過說的不夠詳細(xì)

0 回復(fù) 有任何疑惑可以回復(fù)我~

運(yùn)行時(shí)異常,不管你拋還是不拋,編譯時(shí)都是沒有問題的,但是如果不是運(yùn)行時(shí)異常就必須采取兩種方式解決:一就是接著拋出去,二就是進(jìn)行try {}catch{}處理

0 回復(fù) 有任何疑惑可以回復(fù)我~

因?yàn)閠est2的throw是放在catch中的,并非放在外面。前面你也看到了,有異常有兩種處理方式,一種是聲明后拋出,就像test1();另一種就是用try-catch包裹。

0 回復(fù) 有任何疑惑可以回復(fù)我~

說的有點(diǎn)混亂,不知道有沒有講清楚

0 回復(fù) 有任何疑惑可以回復(fù)我~

都把問題想復(fù)雜了,你想啊throw是拋出異常,有拋就有接,如果說test1()中只有throw拋出異常而沒有被捕獲的話編譯當(dāng)然報(bào)錯(cuò),所以在test2()中老師就用try。。catch捕獲了test1()拋出的異?!昂溶噭e開酒”,進(jìn)而利用這個(gè)異常來觸發(fā)另外一個(gè)異常(就是所謂的異常鏈,一個(gè)異常導(dǎo)致另一個(gè)異常的發(fā)生),即“司機(jī)一滴酒,親人兩行淚”。那為什么test2沒有throws聲明,而“throw newExc”卻能編譯通過。?那是因?yàn)閠est2()調(diào)用了test1()中所拋出的異常了,換句話來說就是test2()利用了test1()中的異常了,所以編譯能通過?。ㄗⅲ喝绻麤]有調(diào)用test1()中的throw拋出的異常的話就不能通過了)。整個(gè)過程就是test1()throw一個(gè)“喝車不開酒”異常—-——test2()try..catch捕獲——>test2()利用捕獲的異常來觸發(fā)另一個(gè)異?!八緳C(jī)。?!薄?gt;拋出test2()異常

最后總結(jié)一下:

  1. 有拋就有接,用了throw就要用try。。catch來捕獲,否則光throw就會編譯不通過

  2. 異常鏈,就是利用一個(gè)拋出來的異常來觸發(fā)另一個(gè),最后將其拋出來

2 回復(fù) 有任何疑惑可以回復(fù)我~
#1

divinginjava

正如你所說 有拋就有接 那最后拋出去的test2()的newExc異常又被誰接去了呢?
2016-04-25 回復(fù) 有任何疑惑可以回復(fù)我~
#2

SHsama 回復(fù) divinginjava

20哪里不就有么,而且要說明的是當(dāng)拋出的異常沒人接的時(shí)候異常會往上層傳遞
2016-04-26 回復(fù) 有任何疑惑可以回復(fù)我~
#3

SHsama 回復(fù) divinginjava

誒,前面的話怎么沒顯示出來,前面掉了Java1-7異常鏈的四分二十秒
2016-04-26 回復(fù) 有任何疑惑可以回復(fù)我~

和樓主同問,求解答!

0 回復(fù) 有任何疑惑可以回復(fù)我~

樓上的諸位,我不理解你們的意思。我說的是:test2中利用try-catch捕獲了test1的異常并另外包裝了一個(gè)名叫newExc的異常,而且還throw出去了。我的問題是:為什么test2沒有throws聲明,而“throw newExc”卻能編譯通過。?

2 回復(fù) 有任何疑惑可以回復(fù)我~
#1

ting0fdnb

同求解答
2016-03-10 回復(fù) 有任何疑惑可以回復(fù)我~
#2

ting0fdnb

找到了解釋: 當(dāng)你把一個(gè)異常定義在方法的throws定義中,你就可以不處理這個(gè)異常,系統(tǒng)會自動把該異常拋出。 而RuntimeException則是java設(shè)計(jì)中所有方法都默認(rèn)定義在throws中了,所以只要你不捕獲,就會一層一層的往上拋出。 除非你顯示的標(biāo)準(zhǔn)要捕獲它。否則不會被捕獲。也不會造成編譯異常。 其實(shí)大部分的RuntimeException,要么是系統(tǒng)異常。無法處理。例如網(wǎng)絡(luò)問題。 要么就是應(yīng)該在UT中發(fā)現(xiàn)的,例如空指針異常。
2016-03-10 回復(fù) 有任何疑惑可以回復(fù)我~
#3

愿遂

因?yàn)閠est2的throw是放在catch中的,并非放在外面。前面你也看到了,有異常有兩種處理方式,一種是聲明后拋出,就像test1();另一種就是用try-catch包裹。
2016-03-27 回復(fù) 有任何疑惑可以回復(fù)我~
#4

慕函數(shù)9564060 回復(fù) ting0fdnb

如果把Test2()中的RuntimeException改成Exception是會報(bào)錯(cuò)的;感覺哥們的解釋有道理
2016-04-25 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)

如果只有test1而沒有test2,而且test1只是throw一個(gè)異常的話,程序運(yùn)行肯定會報(bào)錯(cuò)。但是這里老師又寫了一個(gè)test2,test2調(diào)用了test1,對test1拋出的異常進(jìn)行了try-catch,所以能通過。看注釋的話也能看得出,親人兩行淚,司機(jī)一滴酒這個(gè)異常出在喝酒別開車這個(gè)地方,也就是test1中這個(gè)地方。

語言紊亂,請見諒....

0 回復(fù) 有任何疑惑可以回復(fù)我~

樓上正解

0 回復(fù) 有任何疑惑可以回復(fù)我~

沒有使用 throw ?所以不需要 throws ? 用了try catch ?解決了

1 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

test2方法沒有聲明異常拋出,為什么編譯器還能通過?

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號