首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 異常分類實戰:算術、空指針、數組越界、字符串索引越界四大運行時異常捕獲演示

     編輯:Java 綜合教學

Java 異常分類實戰:算術、空指針、數組越界、字符串索引越界四大運行時異常捕獲演示

運行時異常(RuntimeException 子類)是編程中最常見的 Bug 來源。本文通過 switch-case 依次觸發四大經典異常,演示 try-catch 捕獲與 getMessage() 信息輸出,幫助初學者建立異常識別直覺。

一、完整演示代碼

public class ExceptionDemo2 {
    public static void main(String[] args) {
        for (int i = 0; i < 4; i++) {
            int k = 0;  // 佔位變量,避免編譯警告
            switch (i) {
                case 0:  // 算術異常:除數為零
                    try {
                        int zero = 0;
                        k = 911 / zero;
                    } catch (Exception e) {
                        System.out.println("算術異常,分母不能為零:" + e.getMessage());
                    }
                    break;

                case 1:  // 空指針異常:操作 null 對象
                    try {
                        int[] arr = null;
                        k = arr[0];  // 訪問 null 數組元素
                    } catch (Exception e) {
                        System.out.println("空指針異常:" + e.getMessage());
                    }
                    break;

                case 2:  // 數組索引越界:訪問不存在下標
                    try {
                        int[] arr = new int[2];  // 長度 2,合法下標 0,1
                        k = arr[9];  // 訪問下標 9
                    } catch (Exception e) {
                        System.out.println("索引超出範圍:" + e.getMessage());
                    }
                    break;

                case 3:  // 字符串索引越界:charAt 超出長度
                    try {
                        char ch = "abc".charAt(99);  // 長度 3,合法 0,1,2
                    } catch (Exception e) {
                        System.out.println("索引超出範圍:" + e.getMessage());
                    }
                    break;
            }
        }
    }
}

二、運行輸出結果

算術異常,分母不能為零:/ by zero
空指針異常:null
索引超出範圍:Index 9 out of bounds for length 2
索引超出範圍:String index out of range: 99

三、四大異常深度解析

異常類父類觸發場景getMessage() 典型輸出避免策略
ArithmeticExceptionRuntimeException整數除零(浮點數除零返回 Infinity)/ by zero除法前檢查除數 != 0
NullPointerExceptionRuntimeException調用 null 對象方法/屬性、訪問 null 數組元素null (通常為空)使用前非空判斷、Optional、@NonNull 註解、Objects.requireNonNull()
ArrayIndexOutOfBoundsExceptionIndexOutOfBoundsException數組下標 < 0 或 >= lengthIndex 9 out of bounds for length 2循環邊界檢查、foreach 迭代、List 替代數組
StringIndexOutOfBoundsExceptionIndexOutOfBoundsException字符串 charAt/substring 索引非法String index out of range: 99調用前檢查 str.length()

四、異常處理進階技巧

1. 多重 catch 捕獲具體類型(Java 7+)

try {
    // 高風險代碼
} catch (ArithmeticException | NullPointerException e) {
    // 處理算術與空指針
    log.error("計算或引用錯誤", e);
} catch (IndexOutOfBoundsException e) {
    // 捕獲父類覆蓋數組/字符串越界
    log.error("索引越界", e);
}

2. try-with-resources 自動關閉資源(Java 7+)

try (FileInputStream fis = new FileInputStream("a.txt");
     BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
    // 使用資源
} catch (IOException e) {
    // 自動關閉 fis、br,無需 finally
}

3. 自定義異常傳遞業務語義

public class InsufficientBalanceException extends RuntimeException {
    public InsufficientBalanceException(String msg) { super(msg); }
}

// 使用
if (balance < amount) throw new InsufficientBalanceException("餘額不足,當前:" + balance);

五、調試建議

  • IDEA 設置 Exception Breakpoint:Run → View Breakpoints → + → Java Exception Breakpoint 勾選 ArithmeticException 等,拋出瞬間自動斷點定位源碼行。
  • 生產環境異常日誌必須包含:完整堆棧軌跡、業務上下文參數、請求 ID(鏈路追蹤)。
  • 避免「吞異常」:catch (Exception e) { } 空 catch 塊是重大隱患,至少記錄日誌。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved