異常就是不正常,比如當我們身體出現了異常我們會根據身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現的錯誤,程序可以安全的退出,以保證程序正常的運行等
1、異常中最大的父類Throwable
文章源自四五設計網-http://www.wasochina.com/43602.html
Throwable可以分為兩種:文章源自四五設計網-http://www.wasochina.com/43602.html
Error文章源自四五設計網-http://www.wasochina.com/43602.html
Exception:文章源自四五設計網-http://www.wasochina.com/43602.html
- 運行時異常(非受檢異常)
- 非運行時異常(受檢異常)
Error錯誤:Error是程序無法處理的錯誤,它是由jvm產生拋出的,比如OutOfMemoryError,ThreadDeath等,這些異常發生時,jvm會選擇終止程序執行文章源自四五設計網-http://www.wasochina.com/43602.html
Exception:是程序本身可以處理的異常文章源自四五設計網-http://www.wasochina.com/43602.html
- 運行時異常:都是RuntimeException類及子類,如NullPointerException(空指針),IndexOutOfBoundException(數組越界)等,這些異常可以選擇捕獲處理,或者可以不處理
- 非運行時異常:(受檢異常)時除了RuntimeException以外的異常,類型上屬于Exception類,從程序語法角度這些異常必須要進行處理,如果不處理,程序不餓能通過編譯,如IOException,SQIException
文章源自四五設計網-http://www.wasochina.com/43602.html
2、try-catch-finally三條語句注意的問題
- try,catch,finally均不能單獨使用,三者可以組合使用,組合方式:try…catch, try…catch…finally, try…finally ,其中catch可以有一個或者多個,finally語句最多只能有一個
- 三個語句塊中變量的作用域為代碼塊,分別獨立的不能互相訪問,如果要在三塊中都可以訪問,就把變量定義到這些塊外邊
- 如果存在多個catch塊,最多只會匹配一個異常類且執行該catch塊代碼,而不會在執行其他catch塊,且匹配順序是從上到下,最多只會匹配一個異常類,也就是說也可以一個異常類都不執行
- catch捕獲的異常類不能重復,且先捕獲子類異常再捕獲父類異常
- 無論try中語句有沒有問題,finally中的語句一定執行,finally為程序提供統一的出口,保證程序狀態的統一管理,通常情況下finally中進行資源的關閉清除工作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.exception; public class Test { ???? public static void main(String[] args) { ???????? int [] a= new int [ 5 ]; ???????? try { ???????????? for ( int i = 0 ; i < 10 ; i++) { ???????????????? a[i]=i; ???????????? } ???????????? //空指針 ???????? } catch (ArrayIndexOutOfBoundsException e){ ???????????? //彈出出錯的地方 ???????????? System.out.println( "1" ); ???????????? e.printStackTrace(); ???????????? //訪問異常,數組越界 ???????? } catch (NullPointerException e){ ???????????? System.out.println( "2" ); ???????????? e.printStackTrace(); ???????????? //無論有錯與否,finally最終執行 ???????? } finally { ???????????? System.out.println( "都能執行" ); ???????? } ???????? System.out.println( "---------------" ); ???? } } |
3、final-finally-finalize的各作用
- final:用于定義常量的關鍵字
- finally:異常中總能執行的代碼塊
- finalize() :垃圾回收,該方法是系統調用,不用程序員手動調用
4、throws關鍵字
- 定義一個方法的時候可以使用throws關鍵字聲明,表示該方法時不處理該異常,而是交給方法調用者處理該異常
- 在定義方法時,throws關鍵字可以程序員自主選擇使用,如果使用了,那么說明該方法時不處理該異常的
- 如果主方(main)也使用throws關鍵字,那么就意味著主方法也不處理異常,最后留給jvm處理,jvm處理異常就是終止程序
- throws拋出一個子類異常,調用該方法的調用者可以不必須處理該異常
注意:文章源自四五設計網-http://www.wasochina.com/43602.html
throw關鍵字:是可以自定義異常,也就是拋異常,拋出的時候是一個異常類的對象文章源自四五設計網-http://www.wasochina.com/43602.html
5、throws和throw的區別
throws:文章源自四五設計網-http://www.wasochina.com/43602.html
- 用在方法聲明之后,跟著的是異常類名
- 可以跟多個異常類,用逗號隔開
- 表示拋出異常,有該方法的調用者處理
- throws表示出現異常的一種可能性,并不一定會發生異常
throw:
- 用在方法體內,跟著的是異常對象
- 只能拋出一個異常對象
- 表示拋出異常,有方法體內語句處理
- throw拋異常是一定會發生,并不是一種可能
代碼表示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package com.test; public class Throw { ???? //throws Exception 代表該方法出現異常時不做處理 ???? public void deposit( int num1, int num2) throws Exception ???? { ???????? // RuntimeException()是運行時異常最大的父類 ???????? int sum; ???????? if (num2== 0 ){ ???????????? throw new RuntimeException( "可以自定義一個異常拋出:除數不能為0" ); ???????? } else { ??????????? sum=num1/num2; ???????? } ???? } } |
到此這篇關于Java異常Exception詳細講解的文章就介紹到這了


評論