test2方法沒有聲明異常拋出,為什么編譯器還能通過?
test1方法不聲明,直接throw就會編譯不通過。而test2方法調(diào)用test1方法,try-catch了,為什么異常還能拋出去?拋出去的時(shí)候?yàn)槭裁催€不需要throws聲明。為什么,為什么呢?
test1方法不聲明,直接throw就會編譯不通過。而test2方法調(diào)用test1方法,try-catch了,為什么異常還能拋出去?拋出去的時(shí)候?yàn)槭裁催€不需要throws聲明。為什么,為什么呢?
2016-02-26
舉報(bào)
2016-11-21
因?yàn)檫@里拋出的是Runtime異常,Runtime異常不需要用throws聲明,也不需要try-catch,可以直接throw拋出
jvm會自動處理,見1-1的6分20,不過說的不夠詳細(xì)
2016-04-16
運(yùn)行時(shí)異常,不管你拋還是不拋,編譯時(shí)都是沒有問題的,但是如果不是運(yùn)行時(shí)異常就必須采取兩種方式解決:一就是接著拋出去,二就是進(jìn)行try {}catch{}處理
2016-03-27
因?yàn)閠est2的throw是放在catch中的,并非放在外面。前面你也看到了,有異常有兩種處理方式,一種是聲明后拋出,就像test1();另一種就是用try-catch包裹。
2016-03-24
說的有點(diǎn)混亂,不知道有沒有講清楚
2016-03-24
都把問題想復(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é)一下:
有拋就有接,用了throw就要用try。。catch來捕獲,否則光throw就會編譯不通過
異常鏈,就是利用一個(gè)拋出來的異常來觸發(fā)另一個(gè),最后將其拋出來
2016-03-05
和樓主同問,求解答!
2016-03-03
樓上的諸位,我不理解你們的意思。我說的是:test2中利用try-catch捕獲了test1的異常并另外包裝了一個(gè)名叫newExc的異常,而且還throw出去了。我的問題是:為什么test2沒有throws聲明,而“throw newExc”卻能編譯通過。?
2016-02-26
如果只有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è)地方。
語言紊亂,請見諒....
2016-02-26
樓上正解
2016-02-26
沒有使用 throw ?所以不需要 throws ? 用了try catch ?解決了