Java異常處理try-catch:捕獲錯誤,程序更健壯

一、什麼是異常?爲什麼需要處理?

想象一下,你寫了一段Java代碼,比如計算兩個數的商。但如果用戶輸入的除數是0,程序會突然彈出一個錯誤窗口,然後直接停止運行——這就是程序遇到了“異常”。

異常就像程序運行中的“小意外”,比如突然停電、文件找不到、網絡斷開等。如果不處理這些異常,程序可能直接崩潰,用戶體驗會非常差。而通過 try-catch 捕獲異常,就能讓程序“冷靜處理”這些意外,繼續穩定運行。

二、try-catch的基本語法和執行流程

try-catch 的核心作用是:把可能出錯的代碼放在 try 塊中,一旦出錯,catch 塊會捕獲並處理錯誤

語法結構:

try {
    // 可能發生異常的代碼(比如:除法運算、數組訪問等)
} catch (異常類型 變量名) {
    // 異常發生時執行的代碼(通常是打印錯誤信息)
}

執行流程:

  • 如果 try 塊中沒有異常,catch 塊的代碼不會執行,程序會繼續執行 try-catch 之後的代碼。
  • 如果 try 塊中發生異常,try 塊中異常之後的代碼不會執行,程序會立即跳轉到對應的 catch 塊執行,執行完 catch 塊後繼續往下運行。

三、實戰:用try-catch處理常見異常

示例1:處理“除零異常”(ArithmeticException)

比如我們寫一個簡單的除法程序:

public class TryCatchDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 0; // 故意設爲0,觸發除零異常
        try {
            int result = a / b; // 這裏會拋出ArithmeticException
            System.out.println("計算結果:" + result); // 這行代碼不會執行
        } catch (ArithmeticException e) {
            // 捕獲到異常後執行:打印錯誤信息
            System.out.println("錯誤:除數不能爲0!");
        }
        // 異常處理後,程序繼續運行
        System.out.println("程序未崩潰,繼續執行後續代碼!");
    }
}

輸出結果

錯誤:除數不能爲0!
程序未崩潰,繼續執行後續代碼!

關鍵點try 塊中的 a/b 拋出異常後,catch 塊捕獲到 ArithmeticException,執行錯誤提示,而後續的 System.out.println 正常執行。

示例2:處理“空指針異常”(NullPointerException)

當你不小心把對象設爲 null 並調用方法時,會拋出空指針異常:

public class NullExceptionDemo {
    public static void main(String[] args) {
        String str = null; // 字符串變量str被賦值爲null
        try {
            str.length(); // 調用null對象的length()方法,會拋出NullPointerException
            System.out.println("字符串長度:" + str.length()); // 這行代碼不會執行
        } catch (NullPointerException e) {
            System.out.println("錯誤:str是空對象,不能調用length()方法!");
        }
        System.out.println("程序繼續運行!");
    }
}

輸出結果

錯誤:str是空對象,不能調用length()方法!
程序繼續運行!

四、常見異常類型及應對方法

1. 除零異常(ArithmeticException)

  • 場景int result = 10 / 0;
  • 應對:確保除數不爲0,或用 try-catch 捕獲。

2. 數組越界異常(ArrayIndexOutOfBoundsException)

  • 場景int[] arr = {1, 2, 3}; arr[3] = 5;(數組索引最大是2,卻用了3)
  • 應對:檢查數組索引是否合法(小於數組長度)。

3. 空指針異常(NullPointerException)

  • 場景Object obj = null; obj.method();(調用null對象的方法)
  • 應對:確保對象不爲null,或用 try-catch 捕獲。

五、finally塊:無論是否異常,都要執行的代碼

finally 塊是可選的,但非常重要!無論 try 塊是否發生異常,finally 塊中的代碼都會執行。常用於釋放資源(如關閉文件、數據庫連接)。

示例:

try {
    // 嘗試打開文件/數據庫連接(可能出錯)
    System.out.println("嘗試打開資源...");
} catch (Exception e) {
    System.out.println("資源打開失敗!");
} finally {
    // 無論是否出錯,都關閉資源
    System.out.println("無論是否出錯,都會執行關閉操作!");
}

六、異常處理的最佳實踐

  1. 捕獲具體異常:不要只捕獲 Exception(父類異常),而是捕獲具體異常類型(如 ArithmeticException),避免“過度捕獲”。

  2. 不要忽略異常:至少打印錯誤信息(如 e.printStackTrace()),方便調試。例如:

   catch (Exception e) {
       e.printStackTrace(); // 打印異常堆棧信息,方便定位問題
   }
  1. 合理使用finally:確保資源(文件、網絡連接等)被正確關閉,避免資源泄漏。

總結

try-catch 是Java中處理異常的核心工具,能讓程序在遇到“意外”時不崩潰,繼續穩定運行。記住:異常就像生活中的小意外,提前準備好“應對方案”(try-catch),才能讓程序更健壯、更可靠

通過本文的學習,你已經掌握了異常處理的基本方法,接下來可以嘗試在自己的代碼中加入 try-catch,讓程序“聰明”地應對錯誤吧!

小夜