java異常
Throwable:
1.Error 錯(cuò)誤
2.Exception 異常
Exception 1.運(yùn)行時(shí)異常
2.編譯時(shí)異常
Throwable 常用的方法
toString() 返回當(dāng)前異常對(duì)象的完整類名
getMessage() 返回詳細(xì)異常消息棋蚌,就是創(chuàng)建Throwable 傳入的字符串
printStackTrace() 打印異常的棧信息
Error 錯(cuò)誤一般是用于JVM或者是硬件引發(fā)的問題丐一,所以我們一般不會(huì)通過代碼去處理錯(cuò)誤
Exception 異常 是需要通過代碼去處理的
如何區(qū)分錯(cuò)誤與異常呢:
如果程序報(bào)錯(cuò)角钩,類名是以Error結(jié)尾的陶舞,那么肯定是一個(gè)錯(cuò)誤当犯,
如果是以Exception結(jié)尾的藏斩,那么肯定就是一個(gè)異常
處理異常
方式1祟绊;
try {
可能發(fā)生的異常的代碼燎竖;
}catch(捕獲異常的類型 變量名){
處理異常代碼
}
捕獲處理要注意的細(xì)節(jié)
1:如果try塊中代碼出了異常經(jīng)過了處理之后璃弄,那么try-catch塊外面的代碼可以正常執(zhí)行
2:如果try塊中出了異常的代碼,那么try塊中出現(xiàn)異常代碼后面的代碼就不會(huì)執(zhí)行了
3:一個(gè)try塊后面是可以跟有多個(gè)catch塊的构回,也就是一個(gè)try塊可以捕獲多種異常的類型
4:一個(gè)try塊可以捕獲多種異常的類型夏块,但是捕獲的異常類型必須從小到大進(jìn)行捕獲,否則編譯報(bào)錯(cuò)
5纤掸;finally代碼塊脐供,最后一定會(huì)執(zhí)行,不管是return借跪,還是什么政己,除非退出jvm
注意:以后捕獲異常不可以都用Exception ,因?yàn)閷?shí)際開發(fā)中遇到不同的異常類型的時(shí)候掏愁,我們會(huì)有不同的處理方式歇由,所以要分開不同的異常類型
處理方式2
拋出異常
throws Exception
拋出異常要注意的細(xì)節(jié)
1,如果一個(gè)方法的內(nèi)部拋出了一個(gè)異常對(duì)象果港,那么必須在方法上聲明拋出沦泌。
2,如果調(diào)用了一個(gè)聲明拋出異常 的方法辛掠,那么調(diào)用者必須要處理異常谢谦。
3,如果一個(gè)方法內(nèi)部拋出了一個(gè)異常對(duì)象萝衩,那么throw語句后面的代碼都不會(huì)在執(zhí)行了回挽。
4,在一種情況下猩谊,只能拋出一種類型 的異常對(duì)象
throw 和throws倆個(gè)關(guān)鍵字區(qū)別:
1千劈,throw關(guān)鍵字是用于方法內(nèi)部的,throws使用方法聲明上的
2牌捷,throw關(guān)鍵字是用于方法內(nèi)部拋出一個(gè)異常對(duì)象的队塘,throws關(guān)鍵字是用于在方法聲明上拋出異常類型的。
3宜鸯,throw關(guān)鍵字后面只能有一個(gè)異常對(duì)象憔古,throws后面一次可以聲明拋出多種類型的異常
throws和try使用時(shí)機(jī),如果你需要通知調(diào)用者淋袖,你代碼出了問題鸿市,那么這時(shí)候就使用拋出異常,如果代碼是直接客戶打交道千萬不能拋出,在拋的話就給用戶了焰情,這時(shí)候就應(yīng)該捕獲的