1.異常的概念
exception
異常不是程序的錯誤够滑,而是程序在運行時發(fā)生的意外,開發(fā)者在開發(fā)時沒有預(yù)料到,或者在代碼中故意拋出異常(發(fā)生一個消息穿铆,表示這個程序有問題),沒有處理的異常會導(dǎo)致程序終止運行斋荞。
1.1異常是什么荞雏,有異常存在
【圖片】
1.2異常是需要處理的
【異常不處理的圖片】
如何處理?
引入異常處理機制平酿。
2.異常處理機制
使用try-catch
try:表示可能拋出異常的部分凤优。使用try來表示某段程序可能存在異常
catch:捕獲異常部分,捕獲后可以來處理蜈彼。
先try后catch
語法:
try{//可能發(fā)生異常的部分
}
catch(exception ex){//捕獲異常后如何處理筑辨,捕獲到的異常會使用ex來表示。
}
try和catch如何編寫幸逆?
【圖片】
使用快捷alt+/
使用try棍辕,catch可以避免異常發(fā)生時暮现,程序終止運行,從而保持程序繼續(xù)向下執(zhí)行楚昭。
【案例】
3.異常的分類
不同類別的異常栖袋,處理手段不一樣,分類的目的是讓異常更為具體抚太。
Object-->Throwable
Throwable:Error和Exception
Error:AWTError塘幅、ThreadDeath等
Exception:RuntimeException和其他。
RuntimeException:ArithmeticException凭舶、NullPointerException晌块、NumberFormatException等等。
【異常層次】
通常異常分為checked和Runtime:
checked異常帅霜,在編譯階段發(fā)生匆背。會導(dǎo)致編譯不能進行下去。
Runtime異常身冀,在運行階段發(fā)生钝尸。會導(dǎo)致運行不能進行下去。
注意:
程序是先編譯后執(zhí)行搂根。編譯階段在運行前珍促。
4.try和catch變體形式
4.1多個catch
程序會按順序匹配執(zhí)行catch;但是只會匹配一個剩愧。
【案例】
思考:
catch的順序能不能變猪叙?
(1)多個catch同時使用,catch中捕獲的異常越具體(也就是子類異常)越需要寫在上面仁卷。遵循的原則就是你考慮的東西越具體穴翩,越要早匹配。所以按異常分類锦积,子類在上書寫芒帕,父類在下書寫。
(2)同級的異常丰介,可以互換位置背蟆。(同一個父類下的子類)
4.2finally
無論如何都會往下執(zhí)行。
意義:通常是放置一些釋放資源的代碼哮幢。哪些屬于釋放資源的代碼带膀?
釋放磁盤空間,釋放內(nèi)存橙垢,釋放已經(jīng)占有的資源本砰。
注意:finally中是必須要執(zhí)行的代碼,如果再次出現(xiàn)異常怎么辦钢悲?繼續(xù)try/catch
5.throws
拋出
5.1為什么要throws点额?
希望異常交給合理的人來處理舔株。
5.2throws的方式?
兩種方式:
(1)原處throws異常
【案例】
(2)在方法定義時throws異常还棱。
【圖片】出現(xiàn)異常的方法载慈,需要使用try和catch包裹
【案例】
注意:方法定義時拋出的異常不能比方法內(nèi)出現(xiàn)的異常級別小(級別是指類的層次)
作業(yè):
模擬電商購買場景:
(1)第一步:提示用戶登錄珍手,用戶輸入賬號和密碼办铡。賬號密碼不對,拋出異常琳要。
(2)第二步:登錄后寡具,輸入購買商品,如果商品名不是指定名稱稚补,拋出異常童叠。
(3)第三步:輸入購買數(shù)量。如果不合法拋出異常课幕。
要求:使用try/catch來處理程序異常厦坛,可以使用主動throw異常,也可以使用程序運行時自身發(fā)生的異常乍惊。并且處理他們杜秸。