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

Java 異常處理:throws 與 throw 區別詳解

     編輯:Java 綜合教學

Java 異常處理:throws 與 throw 區別詳解

throws 與 throw 是 Java 異常機制中兩個易混淆的關鍵字,分別用於聲明與拋出異常。

1. throws:方法簽名聲明拋出的異常

  • 位置:方法聲明處
  • 作用:告知調用者「此方法可能拋出以下受檢異常,請捕獲或繼續拋出」
  • 可列出多個異常,逗號分隔
  • 僅用於受檢異常,非受檢異常可不聲明

示例

public class Shoot {
    static void pop() throws NegativeArraySizeException {
        int[] arr = new int[-3];  // 運行時拋出 NegativeArraySizeException
    }

    public static void main(String[] args) {
        try {
            pop();
        } catch (NegativeArraySizeException e) {
            System.out.println("pop()方法拋出的異常:" + e.getMessage());
        }
    }
}

2. throw:方法體中顯式拋出異常對象

  • 位置:方法體內部
  • 作用:主動創建並拋出異常實例,中斷當前執行流程
  • 後續代碼不再執行
  • 常配合 throws 聲明,或在 try-catch 中捕獲處理

示例:自定義異常

class MyException extends Exception {
    private String message;
    public MyException(String msg) { this.message = msg; }
    @Override public String getMessage() { return message; }
}

public class Captor {
    static int quotient(int x, int y) throws MyException {
        if (y < 0) {
            throw new MyException("除數不能是負數");  // 主動拋出
        }
        return x / y;
    }

    public static void main(String[] args) {
        try {
            int result = quotient(3, -1);
        } catch (MyException e) {
            System.out.println(e.getMessage());  // 除數不能是負數
        } catch (ArithmeticException e) {
            System.out.println("除數不能為0");
        } catch (Exception e) {
            System.out.println("其他異常:" + e.getMessage());
        }
    }
}

對比總結表

維度throwsthrow
位置方法聲明方法體內部
對象異常類型(類)異常實例(new Exception())
語義聲明「可能拋出」動作「拋出」
配合調用者 try-catch 或繼續 throws需 try-catch 捕獲或方法聲明 throws
多異常支持列表單次拋出一個

最佳實踐

  • 受檢異常必須 throws 或 try-catch,否則編譯不通過
  • 業務邏輯驗證失敗建議 throw new BusinessException(...),統一由全局異常處理器捕獲
  • 避免在 finally 中 throw 覆蓋原異常
  • 異常鏈:throw new RuntimeException("msg", cause) 保留根因
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved