声明之后我可以做一个变量final吗?

时间:2010-11-15 21:38:22

标签: java

我正在创建银行业务模型,而Account类具有accountNumber字段。帐号永远不会改变,但我不能将字段设置为final,因为这会阻止构造函数设置它。

如果无法做到这一点,那没关系。这只是一个CS任务,所以我想确保我以最好的方式做到这一点。

最好的实现方法是将字段及其setter方法设为私有吗?

2 个答案:

答案 0 :(得分:24)

构造函数可以设置它,如果它被标记为final,例如以下是合法的:

public class BankAccount {

    private final int accountNumber;

    public BankAccount(int accountNumber) {
        this.accountNumber = accountNumber;
    }

}

实际上,如果某个字段标记为final但未在其声明中初始化,则必须在所有构造函数中设置该字段。

如果您没有在班级上设置公共设置者,则无法从班级外部更改帐号,但将其标记为最终版本也会阻止(意外)被班级内的任何方法更改。

答案 1 :(得分:4)

如果变量是final,它可以(并且必须)在构造函数中初始化。