我工作的一個典型的家庭作業程序,並不能爲我的生命弄清楚爲什麼我的超類中的靜態變量的反應方式是這樣..靜態變量
的程序是一個銀行帳戶,我創建了超類Account和兩個子類CreditAccount和SavingsAccount。
public abstract class Account {
private double balance;
private int accountId;
**private static int lastAssignedNumber = 1000;** <--- the static int
private String accountType;
public Account (double q_balance, String q_accountType)
{
balance = q_balance;
accountType = q_accountType;
**accountId = ++lastAssignedNumber; <------ counter for new accountId**
}
)
public class CreditAccount extends Account {
public CreditAccount(double balance)
{
super(balance, "Creditaccount");
}
}
public class SavingsAccount extends Account {
public SavingsAccount(double balance)
{
super(balance, "Savingsaccount");
}
}
以前,沒有子類當Account是唯一的對象時,計數器工作得很好。但現在,當我創建savingsaccount的一些新的對象和creditaccounts程序的行爲很古怪,並按如下返回accountnumbers:
new SavingsAccount(0); // **1001**
new CreditAccount(0); // **1001**
new CreditAccount(0); // **1002**
new SavingsAccount(0); // **1003**
new CreditAccount(0); // **1002**
new CreditAccount(0); // **1004**
new SavingsAccount(0); // **1005**
在神的名字發生了什麼事?我錯過了什麼?不應該這兩個子類激發相同的靜態變量'lastAssignedNumber'並相應地添加它?
最親切的問候// Gewra
您是否使用多個線程?增量前後運算符不是原子的,因此跨多個線程執行的操作可能會交織併產生意外的結果。 – 2013-02-25 20:44:09
你應該同步這些。 – 2013-02-25 20:46:40
你可以發佈你實際創建這些不同帳戶的地方,以及你如何檢索他們的accountId? – asteri 2013-02-25 20:46:47