? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?異常的體系結(jié)構(gòu)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1:運(yùn)行時(shí)異常(可以不處理)
注:最大的異常放最后面
例1:此時(shí)add方法中出現(xiàn)異常,但是add方法本身沒(méi)有處理,所以交給調(diào)用者去處理,main方法調(diào)用了add方法但是main方法也沒(méi)去進(jìn)行處理,所以交給jvm虛擬機(jī)去處理
例2:①:try{}catch(){}處理異常
try里面包含的是可能會(huì)發(fā)生異常的代碼? ? ? catch()代表捕捉的異常
如果捕捉了該異常就執(zhí)行catch里面的代碼
如果捕捉的不是try里面發(fā)生的異常,就會(huì)交給main方法去處理,main方法沒(méi)處理就是交給jvm虛擬機(jī)處理
如果需要捕捉多種異常,繼續(xù)在后面加catch
catch(RuntimeException e)捕捉全部運(yùn)行時(shí)異常
打印異常信息
例題:
finally:finally一定會(huì)執(zhí)行
例題:解析:先把值返回,然后如果有finally先執(zhí)行finally,最后結(jié)束方法
final? ? ? finally? ? ?fanalize的區(qū)別(背下來(lái),筆試會(huì)用到)
fanal:可以修飾類(lèi)? 變量 方法
finally:一般跟在catch后面,加了這個(gè)代碼的塊就一定會(huì)執(zhí)行:在把值返回之后執(zhí)行,方法結(jié)束前執(zhí)行
fanalize:當(dāng)垃圾回收器確定不存在對(duì)該對(duì)象的更多引用時(shí),由對(duì)象的垃圾回收器調(diào)用此方法
拋出異常:如果說(shuō)拋出的是非運(yùn)行時(shí)異常,那么就需要在方法上寫(xiě)上throws+非運(yùn)行時(shí)異常類(lèi)名? 聲明該方法會(huì)拋出 非運(yùn)行時(shí)異常類(lèi)名
throw? 真正用來(lái)拋出異常
throw new 異常的類(lèi)名(異常信息);?
1、源生異常:如果代碼發(fā)生了源生的異常,說(shuō)明你的代碼出現(xiàn)了bug
2、自定義異常:繼承自Exception,或繼承自RuntimeException。如果拋出了自定義異常,那么就說(shuō)明代碼本身沒(méi)有問(wèn)題,而是傳入的數(shù)據(jù)有問(wèn)題。
例題1:
例題2:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2:編譯時(shí)異常(必須處理)
例1: 注:此程序只會(huì)報(bào)一個(gè)異常,前面一個(gè)出現(xiàn)異常后面沒(méi)資格出現(xiàn)異常。