2011-06-09 60 views
1

的ArrayList我有两个不同的类别:超级简单的问题在Java

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()); 
     } 
    } 

}

为什么这个funciont打印我:
EDU
EDU
EDU

相反的:
佩佩
何塞
EDU

在此先感谢。

+0

+1在标题中提到“超级简单问题”。 – 2011-06-09 07:31:42

回答

3

静态变量是类级变量。要为Cliente的每个实例分别备份String user;String password;,请使其为非静态。

9

因为您已将静态类Cliente中的变量user作了变更。如果您删除了static关键字,则所有内容都应该按照您的要求工作。

A static变量在类的所有实例中共享。

following site对静态关键字有很好的参考,我建议你看看:)。

+0

太棒了!谢谢!固定! – Peter 2011-06-09 07:32:35

2

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

private static String user; 
private static String password; 

取出static改性剂,和每个实例都将获得自己的userpassword

2

您已声明Cliente中的字段为静态。所以这些字段保持你设定的最后一个值:那就是用户edu

将其更改为:

private String user; 
private String password; 
0

删除静态修饰符,因为如果需要变量对于单个java类的所有对象是通用的。一个实例不一定要修改静态变量,在你的情况下用户名和密码不是必需的。