1.繼承結(jié)構(gòu)
Java所有的異常類都直接或間接繼承Throwable
2.三種類型異常
1.系統(tǒng)錯(cuò)誤
由Java虛擬機(jī)拋出,用Error類表示
2.異常
用Exception類表示邀泉,描述的是由程序和外部環(huán)境所引起的錯(cuò)誤其徙,可以被程序捕獲和處理
3.運(yùn)行時(shí)異常
用RuntimeException類表示胚迫,描述的是程序的設(shè)計(jì)錯(cuò)誤
3.免檢異常和必檢異常
1.RuntimeException、Error及其子類都為免檢異常
2.所有其他異常都是必檢異常唾那,即編譯器會(huì)強(qiáng)制程序員檢查并通過(guò)try-catch塊處理它們访锻,或者在方法頭部拋出
4.異常處理的方式
1.聲明異常:throws Exception
2.拋出異常:throw new Exception
3.捕獲異常:try{...}catch(Exception e){}
5.關(guān)于finally
1.對(duì)于沒(méi)有垃圾回收和析構(gòu)函數(shù)自動(dòng)調(diào)用機(jī)制的語(yǔ)言來(lái)說(shuō),finally 非常重要闹获。它能使程序員保證:無(wú)論 try 塊里發(fā)生了什么期犬,內(nèi)存總能得到釋放。但 Java 有垃圾回收機(jī)制避诽,所以內(nèi)存釋放不再是問(wèn)題龟虎。
2.當(dāng)把除內(nèi)存以外的資源恢復(fù)到它們的初始狀態(tài)時(shí),需要使用finally子句沙庐,如打開(kāi)的文件或網(wǎng)絡(luò)連接等鲤妥。
3.假如在finally子句中重新拋出異常或執(zhí)行return語(yǔ)句轨功,可能會(huì)導(dǎo)致異常丟失旭斥。
4.正常情況下,finally子句一定會(huì)執(zhí)行古涧。
5.finally子句不執(zhí)行的情況
(1)在try之前已經(jīng)結(jié)束程序或拋出異常
(2)在try或catch中執(zhí)行System.exit(0)
(3)其他在執(zhí)行到try時(shí)發(fā)生斷電或死機(jī)等極端情況
6.假如try...catch...finally中有return垂券,代碼會(huì)如何執(zhí)行?
(1)即使try...catch...中有return語(yǔ)句,finally仍會(huì)執(zhí)行
(2)finally執(zhí)行時(shí)機(jī):return執(zhí)行之后菇爪,return返回之前執(zhí)行
(3)如果在finally中修改了返回值算芯,則返回的結(jié)果會(huì)變嗎?
對(duì)于基本數(shù)據(jù)類型來(lái)說(shuō)是不會(huì)改變返回值的
對(duì)于對(duì)象來(lái)說(shuō)凳宙,修改的是對(duì)象上的內(nèi)容熙揍,是會(huì)改變返回值的
(4)如果在finally子句中執(zhí)行不同于try...catch...中的return語(yǔ)句,則返回值一定會(huì)被改變
6.關(guān)于try-with-resources
1.語(yǔ)法:try("創(chuàng)建對(duì)象") {...} catch(IOException e) {...}
2.try括號(hào)內(nèi)的部分稱為資源規(guī)范頭(resource specification header)
3.無(wú)論何時(shí)退出try塊(正呈仙或異常)届囚,都會(huì)執(zhí)行與finally子句等價(jià)的代碼
4.關(guān)閉資源的順序與創(chuàng)建順序相反
5.如果在try()中發(fā)生異常,在異常之前的代碼會(huì)正常執(zhí)行是尖,正常釋放資源意系;之后的代碼不會(huì)執(zhí)行,也就不會(huì)有資源的釋放
6.在try()小括號(hào)中創(chuàng)建的對(duì)象饺汹,如果發(fā)生了異常蛔添,會(huì)自動(dòng)調(diào)用close()釋放資源,并且是以創(chuàng)建對(duì)象相反的順序釋放資源
7.try(){}大括號(hào)中創(chuàng)建的對(duì)象兜辞,如果發(fā)生了異常迎瞧,是不會(huì)自動(dòng)釋放資源的
7.總結(jié)
1.try-with-resources處理異常的方式要優(yōu)于try-catch-finally這種方式,建議使用try-with-resources逸吵。
2.測(cè)試finally沒(méi)有貼代碼凶硅,覺(jué)得比較簡(jiǎn)單,覺(jué)得有需要的讀者可以評(píng)論留言胁塞。