我正在創建一個銀行模型,並且一個Account類有一個accountNumber字段。賬號不應該改變,但我不能將字段設置爲final,因爲這會阻止構造函數設置它。我可以在聲明後做一個變量final嗎?
如果無法做到這一點,沒關係。這只是一個CS任務,所以我想確保我以最好的方式做到這一點。
最好的實現是將該字段及其setter方法設置爲私有的嗎?
我正在創建一個銀行模型,並且一個Account類有一個accountNumber字段。賬號不應該改變,但我不能將字段設置爲final,因爲這會阻止構造函數設置它。我可以在聲明後做一個變量final嗎?
如果無法做到這一點,沒關係。這只是一個CS任務,所以我想確保我以最好的方式做到這一點。
最好的實現是將該字段及其setter方法設置爲私有的嗎?
構造函數可以如果它被標記爲final
以下是合法的:
public class BankAccount {
private final int accountNumber;
public BankAccount(int accountNumber) {
this.accountNumber = accountNumber;
}
}
事實上,如果一個字段被標記爲final
但在其聲明中,那麼它必須在所有構造函數來設置不會被初始化。
如果你沒有在課堂上放置一個公共setter,那麼賬號不能從課堂外改變,但將它標記爲final也可以防止課堂上任何方法(意外)改變它。
如果一個變量是final
它可以(和必須)在構造函數中初始化。
「這將阻止構造函數設置它。」你確定嗎? http://stackoverflow.com/questions/677595/initialize-final-variable-before-constructor-in-java – kasten 2010-11-15 21:43:35
太棒了,不知道你可以這樣做:D – Matt 2010-11-15 21:46:08
你不能在構造函數中改變最終的靜態變量,因爲靜態變量是許多實例的一個。但是final變量可以在構造函數中初始化。 – 2013-03-03 16:56:23