Java異常Exception詳細講解
1、異常中最大的父類Throwable
Throwable可以分為兩種:
Error
Exception:
- 運行時異常(非受檢異常)
- 非運行時異常(受檢異常)
Error錯誤:Error是程序無法處理的錯誤,它是由jvm產生拋出的,比如OutOfMemoryError,ThreadDeath等,這些異常發生時,jvm會選擇終止程序執行
Exception:是程序本身可以處理的異常
- 運行時異常:都是RuntimeException類及子類,如NullPointerException(空指針),IndexOutOfBoundException(數組越界)等,這些異常可以選擇捕獲處理,或者可以不處理
- 非運行時異常:(受檢異常)時除瞭RuntimeException以外的異常,類型上屬於Exception類,從程序語法角度這些異常必須要進行處理,如果不處理,程序不餓能通過編譯,如IOException,SQIException
2、try-catch-finally三條語句註意的問題
- try,catch,finally均不能單獨使用,三者可以組合使用,組合方式:try…catch, try…catch…finally, try…finally ,其中catch可以有一個或者多個,finally語句最多隻能有一個
- 三個語句塊中變量的作用域為代碼塊,分別獨立的不能互相訪問,如果要在三塊中都可以訪問,就把變量定義到這些塊外邊
- 如果存在多個catch塊,最多隻會匹配一個異常類且執行該catch塊代碼,而不會在執行其他catch塊,且匹配順序是從上到下,最多隻會匹配一個異常類,也就是說也可以一個異常類都不執行
- catch捕獲的異常類不能重復,且先捕獲子類異常再捕獲父類異常
- 無論try中語句有沒有問題,finally中的語句一定執行,finally為程序提供統一的出口,保證程序狀態的統一管理,通常情況下finally中進行資源的關閉清除工作
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拋出一個子類異常,調用該方法的調用者可以不必須處理該異常
註意:
throw關鍵字:是可以自定義異常,也就是拋異常,拋出的時候是一個異常類的對象
5、throws和throw的區別
throws:
- 用在方法聲明之後,跟著的是異常類名
- 可以跟多個異常類,用逗號隔開
- 表示拋出異常,有該方法的調用者處理
- throws表示出現異常的一種可能性,並不一定會發生異常
throw:
- 用在方法體內,跟著的是異常對象
- 隻能拋出一個異常對象
- 表示拋出異常,有方法體內語句處理
- throw拋異常是一定會發生,並不是一種可能
代碼表示:
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詳細講解的文章就介紹到這瞭,更多相關Java異常 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!