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

Java 自定義異常設計陷阱:遞歸調用、異常濫用與最佳實踐

     編輯:程式設計綜合問答

代碼問題剖析

public double getScore() throws FailException {
    if (getScore() < 60) {  // 致命錯誤:遞歸調用自身導致棧溢出
        throw new FailException("你的成績不及格!");
    }
    return regularGrade + finalGrade * 0.5;
}

三大核心缺陷:

  1. 遞歸調用:getScore() 內部調用自身,無終止條件 → StackOverflowError
  2. 異常濫用:成績不及格屬正常業務流程,非「異常」狀態,不應用異常控制流程
  3. 異常類設計不當:繼承 Exception(受檢異常)強制調用者處理,增加樣板代碼

重構方案

// 1. 修正計算邏輯
public double getScore() {
    return regularGrade + finalGrade * 0.5;
}

// 2. 業務判斷分離
public boolean isPass() {
    return getScore() >= 60;
}

// 3. 異常類改為非受檢(可選)
public class FailException extends RuntimeException {
    public FailException(String msg) { super(msg); }
}

// 4. 僅在真正異常場景拋出(如數據損壞)
public void validate() {
    if (regularGrade < 0 || finalGrade < 0)
        throw new FailException("成績數據非法");
}

設計原則

  • 異常用於異常:預期內的業務分支用返回值/狀態碼處理
  • 優先 RuntimeException:減少強制 try-catch,保持代碼整潔
  • 構造器傳遞 cause:super(message, cause) 保留異常鏈

「以異常控制流程」是反模式,業務邏輯應顯式判斷,異常留給真正不可預期的錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved