首頁 > 軟體

Java異常Exception詳細講解

2022-07-30 18:05:20

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異常 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com