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