有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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
何塞
教育部

提前谢谢


共 (5) 个答案

  1. # 1 楼答案

    静态变量是类级变量。要为Cliente的每个实例分别创建String user;String password;的副本,请将其设置为非静态

  2. # 2 楼答案

    以下是static,这意味着它们由类的所有实例共享:

    private static String user;
    private static String password;
    

    删除static修饰符,每个实例将获得自己的userpassword

  3. # 3 楼答案

    您已经在Clientestatic中声明了字段。因此字段保留您设置的最后一个值:即useredu

    将其更改为:

    private String user;
    private String password;
    
  4. # 4 楼答案

    因为您已将类Cliente中的变量user设置为静态。如果删除static关键字,一切都会正常工作

    跨类的所有实例共享一个static变量

    following site对static关键字有很好的参考,我建议您阅读:)

  5. # 5 楼答案

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