我有一個靜態計數器變量的問題。在一個超類(「卡」)中,我有一個變量來計算獲得註冊的卡的數量(這是一個票務系統)。它是這樣寫的:JAVA - 程序重啓時靜態變量重置
public class Card implements Serializable {
private int id;
public static int nextNr= 000;
Card next;
public Card(int t) {
id= ++nextNr;
next= null;
}
}
該類實現了Serializable,我使用ObjectStream將卡片寫出到文件中。
但是,如果我關閉程序並重新啓動它,它可以從文件中讀取並確認並再次將文件添加到我的cardregistry。但是,超類中的卡計數器變量被重置,並且我嘗試註冊的每個新卡都從001開始。我究竟做錯了什麼? 似乎無法找到關於網絡上這個特定問題的任何事情。
解決方案: 我用一個DataOutputStream將它保存在出口上,DataInputStream在啓動時讀取它。 我不知道這是否是最有效的方式來做到這一點,但它的工作。非常感謝您的意見,它幫助了我很多!
abstract public class Card implements Serializable {
private int type;
private int cardNr;
private static int nextNr = readCardNr();
Card next; //COllections or not.. hmmmm
public Card(int t) {
cardNr= ++nextNr;
next= null;
type = t;
writeCardNr();
}
public int getType(){
return type;
}
public void setCardNr(int i) {
cardNr= i;
}
public int getCardNr() {
return cardNr;
}
public static int readCardNr() {
try(DataInputStream inn= new DataInputStream(new FileInputStream("KortNummer"))) {
nextNr= inn.readInt();
inn.close();
return nextNr;
}
catch(FileNotFoundException fnfe) {
skrivMld("Fant ingen tidligere registrerte kort. Starter nytt kortregister.");
nextNr= 000;
return nextNr;
}
catch(EOFException eofe) {
System.out.println("End of file");
}
catch(IOException ioe) {
skrivMld("Feilmelding: IO Exception");
}
return nextNr;
}
public void writeCardNr() {
try(DataOutputStream ut= new DataOutputStream(new FileOutputStream("KortNummer"))){
ut.writeInt(cardNr);
}
catch(IOException ioe) {
skrivMld("Problem med skriving til fil.");
}
}
@ Aboutblank閱讀問題 – 2013-04-23 12:48:44
可能重複[如何序列化Java類的靜態數據成員?](http://stackoverflow.com/questions/1008023/how-to-serialize-static-data-members- java-class) – 2013-04-23 12:49:47