java基礎——異常處理

概述

頂級父類:Throwable

1、錯誤:Error

需要重寫代碼,工程師無法解決,只能儘量避免,如堆棧溢出錯誤,好比是絕症。

2、異常:Exception

異常是可以處理的,好比是感冒,工程師可以解決。

  • 分類
  1. 編譯時期異常
    編譯器會直接把代碼標紅
  2. 運行時期異常:RuntimeException
    編譯器不會直接報出,只有在運行的時候纔會被捕捉到

3、創建異常

throw new 異常對象

4、處理異常

在這裏插入圖片描述

1、throw

拋出異常,將異常拋給調用者不親自在存在異常的地方進行處理,只要不在線程中可以一直往上拋,直到拋到JVM處,JVM將異常信息打印出來,結束程序。

2、try … catch

  1. try寫的是可能出現異常的代碼
  2. catch寫的是捕獲異常,處理異常的邏輯
    異常對象的常用方法:
    String getMessage():獲取異常描述信息,原因(提示給用戶的時候,就提示錯誤原因)
    String toString():獲取異常的類型和異常描述信息(不用)
    void printStackTrace():打印異常跟蹤棧信息並輸出到控制檯 --> 常用
  • 注意事項:
    a. 拋多少異常,就能捕獲多少,或者直接捕獲父類異常對象
    b. 多catch的時候,上面不要先捕獲父類異常
  • 快捷鍵 :Ctrl + Alt + T

3、finally

一定會執行的代碼,跟隨actch使用

兩種處理異常的區別

  1. throws:直接向上拋出,自己不做具體處理,拋給調用者(不要一味着向上拋)
  2. try catch finally:不交給JVM了,我們自己處理,一般作爲統一處理

總結

  1. 運行時期異常:不用代碼處理,證明你寫代碼有問題,自己去改
  2. 編譯時期異常:一般我們直接throws或者try…catch

5、自定義異常

  1. 創建一個類,繼承Exception:此自定義異常爲編譯時期異常
  2. 創建一個類,繼承RuntimeException:次異常爲運行時異常
  • 注意事項:運行時期異常一般不用管,因爲不好發現
/**
 * 自定義異常
 */
public class RegisterException extends Exception {
       public RegisterException() {
    }

    public RegisterException(String message) {
        super(message);
    }
}
/*
模擬註冊
1.輸一個姓名
2.判斷輸入的姓名是否在集合中
  2.1 在集合中拋出異常
  2.2 不在集合中,註冊成功

 */
public class Test {
    public static void main(String[] args) throws RegisterException {
        String[] arr = {"濤哥","蒼老師","熱巴","佟麗婭"};
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        register(arr, name);
        System.out.println("註冊成功");
    }

    private static void register(String[] arr, String name) throws RegisterException {
        for (int i=0;i<arr.length;i++) {
            if(name.equals(arr[i])){
                throw new RegisterException("用戶已經存在");
            }
        }
    }
}

JDK7新特性

try(定義流對象){
	可能出現異常的邏輯代碼
}catch(){
	捕獲異常
}

這樣的話,不用現在try…catch代碼塊之外定義變量,可以使得編碼更加簡潔和優雅一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章