简述java异常处理机制
引言:
? ? ? ?Hello,我的好朋友們,又到我們相聚的時(shí)間了,今天我要和大家分享一些有關(guān)java異常處理的相關(guān)
知識(shí),也是通過老師的講解和相關(guān)材料的借鑒之后的一個(gè)比較系統(tǒng)的總結(jié),真心希望寫完這篇文章的我和看過這篇文章的朋友們能更加深入理解java的異常處理機(jī)制。話不多說,我們一起來學(xué)習(xí)吧。
一、Java異常的基礎(chǔ)知識(shí)
1.區(qū)別exception與error
? ? ? ? ? ?異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的。比如說,你的代碼少了一個(gè)分號(hào),那么運(yùn)行出來結(jié)果是提示是錯(cuò)誤java.lang.Error;如果你用System.out.println(2/0),那么你是因?yàn)槟阌?做了除數(shù),會(huì)拋出java.lang.ArithmeticException的異常。
2.java異常的類別:
? ?(1)運(yùn)行時(shí)異常
? ? ?( 有一個(gè)共同的父類:RuntimeException),一些常見的子類如下: ? ? ? ? ?
? ? ? ? ? ArithmeticException:算術(shù)運(yùn)算異常
? ? ? ? ? ?NullPointerException:空指針異常
? ? ? ? ? ?ArrayIndexOutOfBoundsException:數(shù)組下標(biāo)越界異常
? ? ? ? ? ?ClassCastException:類型轉(zhuǎn)換異常
? ? ? ? ? ?NumberFormatException:數(shù)字格式化異常
? ? ? ? ? ?NegativeArraySizeException:負(fù)數(shù)組長度異常
? ? ? ? ? ?ClassCastException:造型異常
? ? ? ? ? ?NumberFormatException:數(shù)字轉(zhuǎn)化格式異常
? ? ? ? ? ?IllgalArgumentException:非法參數(shù)值異常
? ? ? ? ? ?IllegalStateException:對(duì)象狀態(tài)異常,如對(duì)未初始化的對(duì)象調(diào)用方法
? ? ? ? ? ?InterruptedException:線程中斷
? ? ? ? ?(注意:對(duì)于運(yùn)行時(shí)異常,為了程序的健壯性,可以用if來判斷控制)
? (2)編譯時(shí)異常/非運(yùn)行時(shí)異常/檢測(cè)異常:
? ? ? (Exception類中除了RuntimeException子類之外,都是編譯時(shí)異常),一些常見的如下:
? ? ? ? ? ?IOException:FileNotFoundException:指定文件未找到異常;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?EOFException:讀寫文件尾異常;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MalformedURLException:URL格式錯(cuò)誤異常;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SocketException:Socket通信異常。
? ? ? ? ? ?其它異常: ? ? ?ClassNotFoundException:無法找到需要的類文件異常。
3.java異常處理用到的關(guān)鍵字及使用
? ?try,catch,finally,throw,throws
? ?使用的結(jié)構(gòu)如下:
? try{
//可能出現(xiàn)的異常程序代碼(注:try僅僅能出現(xiàn)一次)
}catch(異常類型1 異常的變量名1){
? ?//捕獲到對(duì)應(yīng)異常對(duì)象之后所做的處理1
}catch(異常類型2 異常的變量名2){
//捕獲到對(duì)應(yīng)異常對(duì)象之后所做的處理2
}
? ? ? ?......(此處可以根據(jù)對(duì)應(yīng)的異常而出現(xiàn)多次,切記小范圍的異常寫在前面,大范圍的異常寫在后面,因?yàn)楫惓J菑纳系较轮饌€(gè)捕獲的)
? ? ? ?finally{
//一定會(huì)執(zhí)行的程序代碼,多用于刪除臨時(shí)文件,關(guān)閉資源文件
? ?(注:finally可以出現(xiàn)的次數(shù)為0-1次,切記當(dāng)沒有catch語句時(shí)一定要出現(xiàn)且僅出現(xiàn)一次finally)
}
4.處理兩類異常(編譯時(shí)異常和運(yùn)行時(shí)異常)的方法不同
?(1)編譯時(shí)異常:
? ? ? ? ? ?一般都是try-catch-finally處理掉。方法中可以不處理,用throws上拋,最終拋到了main,main方法 ? ? ? ? ? 中禁止用throws上拋異常。意味著main一定要處理;
(2)運(yùn)行時(shí)異常:
? ? ?可以用try-catch-finally處理,但是對(duì)效率和代碼閱讀都有影響,所有一般都是用if條件來使程序健壯。
5.Throwable類的兩個(gè)子類(Exception和Error)的區(qū)別與理解:
? ?
Throwable類 | Error | 好比車上山的過程中山塌了,即虛擬機(jī)處理不了了 |
Exception | 編譯時(shí)異常:相當(dāng)于車沒油了,即需要java的積極處理 | |
| 運(yùn)行時(shí)異常:就像是路上的石子,讓開它們行駛就好,即可以通過 ? if控制條件處理 |
6.自定義異常:
?只能用throw來拋出,具體步驟如下:
(1). 繼承自Exception或者Exception的子類。
(2).提供String做參數(shù)的構(gòu)造,利用父類的String做參數(shù)的構(gòu)造完成初始化,String內(nèi)容用于對(duì)異常的描述。
(未完待續(xù)。。。)
轉(zhuǎn)載于:https://blog.51cto.com/wangzhaoli/1256551
總結(jié)
以上是生活随笔為你收集整理的简述java异常处理机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: get path
- 下一篇: Ninja Blocks物联网平台简介