Java中ArrayList的超简单问题
我有两门不同的课:
客户。java
public class Cliente {
private static String user;
private static String password;
public Cliente (String usr, String pass) {
user = usr;
password = pass;
}
public String getUser() {
return user;
}
}
和添加到ArrayList。java,其中我创建了一个客户端类型ArrayList和一些客户端:
public class AddToArrayList{
static ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();
public static void main(String[] args) throws IOException {
Cliente c1 = new Cliente("pepe","pepe1");
Cliente c2 = new Cliente("jose","jose1");
Cliente c3 = new Cliente("edu","edu1");
listaClientes.add(c1);
listaClientes.add(c2);
listaClientes.add(c3);
printArraList();
}
public static void printArraList() throws IOException {
for (Cliente c : listaClientes) {
System.out.println(c.getUser());
}
}
}
为什么此函数打印我:
edu
教育部
教育部
而不是:
pepe
何塞
教育部
提前谢谢
# 1 楼答案
静态变量是类级变量。要为
Cliente
的每个实例分别创建String user;
和String password;
的副本,请将其设置为非静态# 2 楼答案
以下是
static
,这意味着它们由类的所有实例共享:删除
static
修饰符,每个实例将获得自己的user
和password
# 3 楼答案
您已经在
Cliente
static中声明了字段。因此字段保留您设置的最后一个值:即useredu
将其更改为:
# 4 楼答案
因为您已将类
Cliente
中的变量user
设置为静态。如果删除static
关键字,一切都会正常工作跨类的所有实例共享一个
static
变量following site对static关键字有很好的参考,我建议您阅读:)
# 5 楼答案
删除静态修饰符,因为如果需要一个变量对单个java类的所有对象都是公共的,则使用静态修饰符。修改静态变量不必使用实例,在您的情况下,用户和密码不需要使用实例