Java中ArrayList的超级简单问题

时间:2011-06-09 07:28:09

标签: java arraylist

我有两个不同的类:

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

提前致谢。

5 个答案:

答案 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修饰符,每个实例都会获得自己的userpassword

答案 3 :(得分:2)

您已将Cliente中的字段声明为静态。因此,字段会保留您设置的最后一个值:那就是用户edu

将其更改为:

private String user;
private String password;

答案 4 :(得分:0)

删除静态修饰符,因为如果需要变量对单个java类的所有对象都是通用的,则使用它。修改静态变量不是必须的实例,在您的情况下不需要用户和密码。