2011-06-09 62 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類的所有對象是通用的。一個實例不一定要修改靜態變量,在你的情況下用戶名和密碼不是必需的。