我有一个静态计数器变量的问题。在一个超级类(“卡片”)中,我有一个变量来计算注册的卡片数量(这是一个票务系统)。它是这样写的:
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 将卡片写入文件。
但是如果我关闭程序并重新启动它,它可以从文件中读取并确认并将文件再次添加到我的卡片注册表中。但是,超级类中的卡计数器变量被重置,我尝试注册的每张新卡都再次从 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.");
}
}