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!

推薦閱讀: