2013-02-15 29 views
2

我有以下代码:为什么这个对象数组中的每个元素都被最后一个对象覆盖?

public static void main(String[] args) { 
    Player players[] = new Player[2]; 
    Scanner kb = new Scanner(System.in); 
    System.out.println("Enter Player 1's name"); 
    players[0] = new Player(kb.nextLine()); 
    System.out.println("Enter Player 2's name"); 
    players[1] = new Player(kb.nextLine()); 
    System.out.println("Welcome "+ players[0].getName() + " and " + players[1].getName());  
} 

它的目的是创建一个新的播放器对象并存储球员的名字,同时保持阵列中的所有对象。

这里是玩家等级:

public class Player { 
    static String name; 
    public Player(String playerName) { 
    name = playerName; 
    } 

    public String getName(){ 
    return name; 
    } 
} 

实际发生的是,当我刚刚有1个对象时,它的工作原理,但是当我有2个,阵列中的每个元素都是一样的第二位。当我在数组中有3个对象时,每个元素与第三个元素相同,等等。

我不知道为什么会发生这种情况,或者如何纠正它,并且它让我困惑了几个小时:/

+8

猜猜静态是什么意思? – 2013-02-15 18:17:51

+2

@JanDvorak啊很好的接触,我正盯着这个,并且即将评论,代码看起来很好。 – thatidiotguy 2013-02-15 18:18:28

+2

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html – BalusC 2013-02-15 18:18:36

回答

9

它是因为静态字段。静态在各个对象实例中使用。它们存储在课堂级别。

下面的代码将工作:

class Player 
{ 
    String name; 

    public Player(String playerName) 
    { 
     name = playerName; 
    } 

    public String getName() 
    { 
     return name; 
    } 
} 
+1

也许OP意味着使用私有而不是静态? – Hayden 2013-02-15 18:20:35

+0

谢谢!它修复了:) – user2076554 2013-02-15 18:22:07

3

名称字段不应该是一成不变的。静态意味着变量实际上是全局的,并且在所有类实例中共享。

4

更改静态字符串名称私人字符串名称

相关问题