運(yùn)行時(shí)異常衅谷,雖然要到代碼運(yùn)行時(shí)才報(bào)出來椒拗,但是其實(shí)是可以在代碼中多一些判斷,來避免:
1获黔、NullPointerException :在編程中蚀苛,就要事先考慮空指針的情況。比如根據(jù)id查詢用戶名玷氏,有可能id查找用戶時(shí)找不到堵未,即用戶對(duì)象為空指針,就要事先做好判斷预茄。
2兴溜、NumberFormatException:在字符串轉(zhuǎn)數(shù)字過程中侦厚,如果字符串有非數(shù)字字符耻陕,會(huì)報(bào)該異常。所以在轉(zhuǎn)換之前刨沦,可以事先做好判斷诗宣。
3、ArrayIndexOutOfBoundsException:數(shù)組越界異常想诅。在訪問數(shù)組元素時(shí)召庞,如果不確定是否越界,可以用索引與數(shù)組長(zhǎng)度做判斷来破。
4篮灼、ClassCastException:類型轉(zhuǎn)換錯(cuò)誤異常。在轉(zhuǎn)換對(duì)象類型之前徘禁,可以先用instanceof判斷對(duì)象是否是該類型的實(shí)例诅诱。
5、ArithmeticException:算術(shù)異常送朱。在做除法前娘荡,先判斷除數(shù)是否為0。
普通異常,即繼承Exception雷绢,底層有拋出峰弹,沒處理的話,上層必須要捕獲(編譯器強(qiáng)制)大年。
運(yùn)行時(shí)異常换薄,即繼承RuntimeException,底層有拋出鲜戒,沒處理专控,上層可以不捕獲(編譯器中沒強(qiáng)制要捕獲)。這個(gè)時(shí)候會(huì)有問題遏餐,雖然不捕獲異常伦腐,但是異常依然存在,這時(shí)候拋異常的代碼之后的代碼就得不到執(zhí)行失都。
總結(jié):
1.RuntimeException柏蘑,也就是運(yùn)行時(shí)異常,表示你的代碼本身存在BUG粹庞,比如ArrayIndexOutOfBoundsException咳焚,數(shù)組下標(biāo)越界,這個(gè)屬于代碼有問題庞溜。
控制臺(tái)一旦報(bào)RuntimeException革半,就必須要處理。流码。沒有例外的又官。而且,處理RuntimeException漫试,不是try-catch能解決的六敬。。try-catch在這里使用毫無意義驾荣。應(yīng)該在邏輯上來規(guī)避運(yùn)行時(shí)異常外构。
2.不是RuntimeException,就是編譯時(shí)異常播掷,異常只有這兩種了审编。比如你在處理文件流時(shí)的I/O問題,就屬于編譯時(shí)異常歧匈。這個(gè)時(shí)候用thr{}catch 來捕獲或者 throws即可垒酬。編譯時(shí)異常,邏輯上規(guī)避不了,所以需要捕獲的方式來解決伤溉。