public double getScore() throws FailException {
if (getScore() < 60) { // 致命錯誤:遞歸調用自身導致棧溢出
throw new FailException("你的成績不及格!");
}
return regularGrade + finalGrade * 0.5;
}
三大核心缺陷:
getScore() 內部調用自身,無終止條件 → StackOverflowErrorException(受檢異常)強制調用者處理,增加樣板代碼// 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("成績數據非法");
}
super(message, cause) 保留異常鏈「以異常控制流程」是反模式,業務邏輯應顯式判斷,異常留給真正不可預期的錯誤。