Java中的重叠对象

Java中的重叠对象,java,class,instance,overlapping,Java,Class,Instance,Overlapping,我创建了我的类player的两个实例,但似乎创建的最后一个实例总是接管(重叠?)所有其他对象,这里的问题是什么 节目如下: public class Test { public static void main (String[] args) { Player player1 = new Player("Player 1"); Player player2 = new Player("Player 2"); Player player3 = new Player(

我创建了我的类player的两个实例,但似乎创建的最后一个实例总是接管(重叠?)所有其他对象,这里的问题是什么

节目如下:

public class Test
{
  public static void main (String[] args)
  {
    Player player1 = new Player("Player 1");
    Player player2 = new Player("Player 2");
    Player player3 = new Player("Player 3");

    System.out.println(player1.getName());
  }
}
这是输出

Player 3
这是我们的课

import java.util.Scanner; 
import java.util.Random; 
import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*;

public class Player
{
  public static String name;
  public static int score;
  public static Die[] dice = new Die[5];
  public static JRadioButton[] rerollButton = new JRadioButton[5];

 //----------------------------------------------------------------
 // Constructor - initialize values
 //----------------------------------------------------------------
  public Player(String n)
  {
    name = n;
    score = 0;

    // initialize all dice and rerollButtons in their respective arrays
    for (int i = 0; i < 5; i++) {
      dice[i] = new Die();
      rerollButton[i] = new JRadioButton();
    }
  }

  public String getName()
  {
    return name;
  }
}
import java.util.Scanner;
导入java.util.Random;
导入java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;
公开课选手
{
公共静态字符串名;
公共静态积分;
公共静态骰子[]骰子=新骰子[5];
公共静态JRadioButton[]重新滚动按钮=新JRadioButton[5];
//----------------------------------------------------------------
//构造函数-初始化值
//----------------------------------------------------------------
公共播放器(字符串n)
{
name=n;
得分=0;
//初始化其各自数组中的所有骰子和重掷按钮
对于(int i=0;i<5;i++){
骰子[i]=新骰子();
rerollButton[i]=新的JRadioButton();
}
}
公共字符串getName()
{
返回名称;
}
}

我试图寻找其他类似的问题,但我发现的每一个问题对我来说都非常复杂。

你的
Player
类中的属性,例如
name
score
dice
等,都被定义为类变量(
静态
),而不是实例变量(非静态)。类/静态变量由所有对象共享,因此您可以看到该行为。尝试更改此选项:

  public static String name;

做出一个明智的决定,您需要声明什么作为类变量,什么作为成员变量。在此处了解有关实例和类成员的更多信息:


这是因为
name
Player
类中的
static
字段。而
静态
字段由类的所有实例共享。所以,您需要将
名称
作为实例变量,以便每个实例都有自己的副本

public String name; // Now each instance will have its own copy of name
我猜
score
也需要这样做

public int score;
公共静态字符串名

应该是

公共字符串名称

甚至更好

私有字符串名称


因为,您的字段是静态的

  public static String name;
要使用对象更改
名称
,请将其作为实例(非静态)


私有并不总是更好的。但我认为它可能是在有公共getter定义的情况下
  public static String name;
  public String name;