我有两个不同的类:
Cliente.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;
}
}
和 AddToArrayList.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
EDU
EDU
而不是:
的佩佩
何塞
EDU
提前致谢。
答案 0 :(得分:9)
因为您已在类user
中使变量Cliente
成为静态。如果您删除static
关键字,则所有内容都可以按照您的意愿使用。
在类的所有实例中共享static
变量。
following site对static关键字有很好的参考,我建议你阅读它:)。
答案 1 :(得分:3)
静态变量是类级变量。要为String user;
的每个实例单独复制String password;
和Cliente
,请将其设为非静态。
答案 2 :(得分:2)
以下是static
,这意味着它们由该类的所有实例共享:
private static String user;
private static String password;
删除static
修饰符,每个实例都会获得自己的user
和password
。
答案 3 :(得分:2)
您已将Cliente
中的字段声明为静态。因此,字段会保留您设置的最后一个值:那就是用户edu
。
将其更改为:
private String user;
private String password;
答案 4 :(得分:0)
删除静态修饰符,因为如果需要变量对单个java类的所有对象都是通用的,则使用它。修改静态变量不是必须的实例,在您的情况下不需要用户和密码。