idea使用ctrl+alt+t進(jìn)行對(duì)選中的代碼環(huán)繞
Java使用異常來(lái)表示錯(cuò)誤颅痊,并通過(guò)try ... catch捕獲異常;
Java的異常是class,并且從Throwable繼承帮毁;
Error是無(wú)需捕獲的嚴(yán)重錯(cuò)誤汛蝙,已經(jīng)使程序崩潰,Exception是應(yīng)該捕獲的可處理的錯(cuò)誤娃循;
常見(jiàn)異常
- NullPointerException 空指針異常
- ClassCastException 類(lèi)型轉(zhuǎn)換異常
- ArrayOutOfBoundsException 下標(biāo)越界異常
捕獲異常
使用try catch代碼塊
會(huì)發(fā)生異常的代碼塊放在try{...}中
然后在try{}后接上catch(需要捕獲的異常類(lèi)對(duì)象){}進(jìn)行捕獲
多catch
catch()可以像多if-elseif一樣多個(gè)串起來(lái)使用炕檩,但是要注意順序,子類(lèi)異常必須在父類(lèi)異常前面被捕獲
捌斧,不然永遠(yuǎn)輪不到子類(lèi)捕獲,無(wú)繼承關(guān)系時(shí)可以隨意使用笛质,但是永遠(yuǎn)只會(huì)有一個(gè)catch代碼塊被運(yùn)行
//誤
try{
...
}catch(father e){
...
}catch(son e){
...
}
//正確
try{
...
}catch(son e){
...
}catch(father e){
...
}
同時(shí)捕獲多種異常
如果多種異常的catch的代碼塊相同,可以如此編寫(xiě)
//原
try{
...
}catch(Exception1 e){
...
}catch(Exception2 e){
...
}
//同時(shí)捕獲
try{
...
}catch(Exception1 | Exception2 e){
...
}
最后的收尾處理
finally語(yǔ)句
接在try_catch后捞蚂,可有可無(wú)妇押,但是必定會(huì)最后執(zhí)行,一般用作收尾
try{
...
}catch(Exception e){
...
}finally{
...
}
一般運(yùn)行時(shí)順序:
try代碼塊 → finally代碼塊
發(fā)生異常時(shí)順序:
try代碼塊 → catch捕獲 → finally代碼塊→拋出異常
綜上所述姓迅,finally代碼塊必定會(huì)運(yùn)行敲霍,用于大清掃
如果finally代碼塊出現(xiàn)異常,則會(huì)使之前的異常被屏蔽丁存,并拋出finally代碼塊中的異常
拋出異常
異常的傳播:某個(gè)方法拋出異常時(shí)肩杈,如果當(dāng)前方法沒(méi)有捕獲異常,那么就會(huì)往上層調(diào)用他的方法傳遞解寝,直到遇到try-catch為止
printStackTrace()方法可以打印出方法的調(diào)用棧扩然,輸出語(yǔ)句從上往下看第一行是關(guān)于異常的內(nèi)容的輸出語(yǔ)句和第二行開(kāi)始往下的從內(nèi)到外的調(diào)用順序