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

Java 自訂例外與內部類別:正確拋出內部類別例外實例

     編輯:程式設計綜合問答

在 PasswdException 類別中定義內部類別 PasswdExceptionisnum,欲在 checkpasswd() 中拋出該內部類別實例。直接 throw new PasswdException.PasswdExceptionisnum(...) 會編譯錯誤,因非靜態內部類別實例化需外部類別實例。

正確寫法

// 先建立外部類別實例
PasswdException outer = new PasswdException();
// 再透過外部實例建立內部類別實例
throw outer.new PasswdExceptionisnum(passwd);

完整修正範例

public class PasswdException extends Exception {
    public PasswdException(int len) {
        if (len < 6) System.out.println("密碼不能小於六位");
        else if (len > 6) System.out.println("密碼不能大於六位");
    }

    // 內部類別建議改為 static 巢狀類別,避免需外部實例
    public static class PasswdExceptionIsNum extends Exception {
        public PasswdExceptionIsNum(String msg) {
            super("不是數字: " + msg);
        }
    }
}

class Passwd {
    public static boolean checkpasswd(String passwd) throws PasswdException {
        if (passwd.length() != 6) {
            throw new PasswdException(passwd.length());
        }
        try {
            Integer.parseInt(passwd);
        } catch (NumberFormatException e) {
            // 直接拋出靜態巢狀類別實例
            throw new PasswdException.PasswdExceptionIsNum(passwd);
        }
        return true;
    }
    // ... main 測試 ...
}

建議

  • 若內部類別不需存取外部實例成員,宣告為 static(巢狀類別),即可直接 new Outer.Inner()。
  • 例外類別命名慣例以 Exception 結尾,如 PasswordLengthException、PasswordFormatException。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved