Java 生成最终变量的方法不更新用于它的值

Java Method for generating final variable NOT updating the value used for it

嗨,我正在与 blueJ 的 JAVA 合作 我在使用以下代码时遇到问题:

public class License {

    private String lastName = "Null";
    private final String ID_NUM = generateIDNumber();
    private static int ID_GEN = 33333;

    public License(String lastName) {
        this.lastName = lastName;
    }

    public String getLastName() {
        return lastName; 
    } 

    private String generateIDNumber() {
        String firstLetter = getLastName().substring(0,1);
        String idNumber = String.format("%d", ID_GEN) + "-" + firstLetter;                       firstLetter;
        ID_GEN += 1;
        return idNumber;
    }
}

所以当我输入我的姓氏时,程序需要生成身份证号码
5位数字和输入姓氏首字母组成

但是,用于 generateIDNumber()lastName 的值是 未使用新输入的输入
进行更新 虽然当我执行 getLastName() 时,它得到了更新的输入。


换句话说,即使我将lastName输入为"James",generateIDNumber()firstLetter的值对于"Null"仍然是“33333-N”,而不是"James" 的“33333-J”。

为什么是这样?提前谢谢你。

您在构造函数运行之前设置 ID_NUM,因此 lastName 仍然是 "Null"。解决方法是在构造函数中设置:

private final String ID_NUM;

public License(String lastName) {
    this.lastName = lastName;
    this.ID_NUM = generateIDNumber();
}

作为旁注,CONSTANT_CASE 应该保留给 static final 变量。 None 个变量属于该类别。