我有一个静态计数器变量的问题。在一个超类(“卡”)中,我有一个变量来计算获得注册的卡的数量(这是一个票务系统)。它是这样写的: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