数组列表中的对象加载后也类似。为什么?
Objects in the array list are also similar after being loaded. Why?
我的程序是一个简单的聊天室。用户在注册部分的文本字段中写入的值并创建一个帐户。我有一个名为 "Account" 的 class,它在输入中采用相同的值,并且包含相同的字段。所有帐户都需要保存和加载以供以后实施。
我使用了下面的代码(这是程序代码的一部分)但是有问题。我加载后打印值,发现是报空值。然后在向数组列表中添加新帐户后,列表中的所有值都更改为添加的值。例如,我创建并保存了一个名称为 "a" 的帐户和电子邮件 "a",然后再次 运行 程序。
在此处添加名称和电子邮件 "B" 的帐户会打印两个帐户 B. 有什么问题?
String email= t4.getText();
String password=t5.getText();
String name=t1.getText();
String family=t2.getText();
String phoneNumber=t3.getText();
try {
FileInputStream f = new FileInputStream("accounts.txt");
ObjectInputStream obj = new ObjectInputStream(f);
int size=obj.readInt();
for (int i = 0; i <size ; i++) {
accounts.add((Account)obj.readObject());
}
} catch (Exception e){
e.printStackTrace();
}
for (int i = 0; i <accounts.size() ; i++) {
System.out.println(accounts.get(i).name+" "+accounts.get(i).email);
}
Account account = new Account(name,family,phoneNumber,email,password);
accounts.add(account);
try{
FileOutputStream f=new FileOutputStream("accounts.txt",false);
ObjectOutputStream obj=new ObjectOutputStream(f);
obj.writeInt(accounts.size());
for (Account a:accounts) {
obj.writeObject(a);
}
} catch (Exception e){
e.printStackTrace();
}
for (int i = 0; i <accounts.size() ; i++) {
System.out.println(accounts.get(i).name+" "+accounts.get(i).email);
}
//class account
class Account implements Serializable {
static String name, family, phoneNumber, email, password;
static ArrayList<Post> posts = new ArrayList();
static ArrayList<Account> following = new ArrayList();
static ArrayList<Account> follower = new ArrayList();
Account(String n, String f, String pn, String e, String ps) {
name = n;
family = f;
phoneNumber = pn;
email = e;
password = ps;
}
void follow(Account user) {
following.add(user);
user.follower.add(this);
}
void post(String data) {
Post post = new Post(data, new Date(), this);
posts.add(post);
for (Account account : follower) {
account.posts.add(post);
}
}
}
Account
class的所有成员都是static
,也就是说他们属于class而不是一个特定的 实例 。使它们成为非静态的,你应该可以开始了。
我的程序是一个简单的聊天室。用户在注册部分的文本字段中写入的值并创建一个帐户。我有一个名为 "Account" 的 class,它在输入中采用相同的值,并且包含相同的字段。所有帐户都需要保存和加载以供以后实施。 我使用了下面的代码(这是程序代码的一部分)但是有问题。我加载后打印值,发现是报空值。然后在向数组列表中添加新帐户后,列表中的所有值都更改为添加的值。例如,我创建并保存了一个名称为 "a" 的帐户和电子邮件 "a",然后再次 运行 程序。 在此处添加名称和电子邮件 "B" 的帐户会打印两个帐户 B. 有什么问题?
String email= t4.getText();
String password=t5.getText();
String name=t1.getText();
String family=t2.getText();
String phoneNumber=t3.getText();
try {
FileInputStream f = new FileInputStream("accounts.txt");
ObjectInputStream obj = new ObjectInputStream(f);
int size=obj.readInt();
for (int i = 0; i <size ; i++) {
accounts.add((Account)obj.readObject());
}
} catch (Exception e){
e.printStackTrace();
}
for (int i = 0; i <accounts.size() ; i++) {
System.out.println(accounts.get(i).name+" "+accounts.get(i).email);
}
Account account = new Account(name,family,phoneNumber,email,password);
accounts.add(account);
try{
FileOutputStream f=new FileOutputStream("accounts.txt",false);
ObjectOutputStream obj=new ObjectOutputStream(f);
obj.writeInt(accounts.size());
for (Account a:accounts) {
obj.writeObject(a);
}
} catch (Exception e){
e.printStackTrace();
}
for (int i = 0; i <accounts.size() ; i++) {
System.out.println(accounts.get(i).name+" "+accounts.get(i).email);
}
//class account
class Account implements Serializable {
static String name, family, phoneNumber, email, password;
static ArrayList<Post> posts = new ArrayList();
static ArrayList<Account> following = new ArrayList();
static ArrayList<Account> follower = new ArrayList();
Account(String n, String f, String pn, String e, String ps) {
name = n;
family = f;
phoneNumber = pn;
email = e;
password = ps;
}
void follow(Account user) {
following.add(user);
user.follower.add(this);
}
void post(String data) {
Post post = new Post(data, new Date(), this);
posts.add(post);
for (Account account : follower) {
account.posts.add(post);
}
}
}
Account
class的所有成员都是static
,也就是说他们属于class而不是一个特定的 实例 。使它们成为非静态的,你应该可以开始了。