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

Java 異常處理與拋出機制深度解析:try-catch-finally、throws、自定義異常實戰

     編輯:Java 綜合教學

Java 異常處理與拋出機制深度解析:try-catch-finally、throws、自定義異常實戰

本文通過具體代碼示例,詳細講解 Java 異常捕獲、拋出、方法簽名聲明、調用鏈傳遞以及運行時異常與受檢異常的區別。

核心概念

  • 異常:編譯通過但運行時出現的錯誤狀態(空指針、文件不存在、數據庫連接失敗等)。
  • 處理機制:try 監控區塊,catch 捕獲處理,finally 保證執行清理代碼。

基本捕獲示例

import java.util.Scanner;

public class ExceptionDemo {
    public static void main(String[] args) {
        int num = 0;
        double result = 0;
        try {
            System.out.print("請輸入非零整數: ");
            Scanner sc = new Scanner(System.in);
            String input = sc.nextLine();
            num = Integer.parseInt(input); // 可能拋 NumberFormatException
            result = 100 / num;            // 可能拋 ArithmeticException
            System.out.println("結果: " + result);
        } catch (NumberFormatException e) {
            System.out.println("輸入非整數");
        } catch (ArithmeticException e) {
            System.out.println("分母不能為零");
        } catch (Exception e) {
            System.out.println("未知錯誤: " + e.getMessage());
        }
    }
}

拋出異常:throws 聲明

方法簽名加 throws Exception,將處理責任推給調用者。

public class ThrowDemo {
    public static double readAndDivide() throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.print("請輸入非零整數: ");
        String input = sc.nextLine();
        int num = Integer.parseInt(input); // 拋 NumberFormatException
        return 100 / num;                  // 拋 ArithmeticException
    }

    public static void main(String[] args) {
        try {
            double res = readAndDivide();
            System.out.println("結果: " + res);
        } catch (Exception e) {
            System.out.println("捕獲到異常: " + e.getClass().getSimpleName());
        }
    }
}

受檢異常 vs 非受檢異常

維度受檢異常 (Checked)非受檢異常 (Unchecked)
繼承Exception (非 RuntimeException)RuntimeException、Error
編譯檢查強制捕獲或聲明 throws不強制
典型例子IOException、SQLException、ClassNotFoundExceptionNullPointerException、IllegalArgumentException、ArithmeticException
適用場景外部資源失敗、業務邏輯可預期錯誤編程錯誤、不可恢復的系統級故障

最佳實踐

  1. 捕獲具體異常,避免 catch (Exception e) 吞噬錯誤。
  2. 受檢異常用於「調用者可恢復」的場景;運行時異常用於「編程錯誤」。
  3. 自定義業務異常繼承 RuntimeException,攜帶錯誤碼、提示信息,便於統一異常處理器(@ControllerAdvice)返回友好響應。
  4. 使用 try-with-resources 自動關閉資源。
  5. 日誌記錄完整堆棧:log.error("msg", e)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved