我有一个用于存储不同对象的对象数组。当我尝试从任何一个对象获取数据时,它将给出最后一个对象的数据。我制作了一些新的测试文件,并将所有内容缩减为问题本身。这就是我的意思:
public class Test
{
public static ObjectTest[] objArray = new ObjectTest[2];
public static void main(String[] args)
{
objArray[0] = new ObjectTest("Jimmy");
objArray[1] = new ObjectTest("Terry");
System.out.println(objArray[0].getName());
System.out.println(objArray[1].getName());
}
}
这将输出:
Terry
Terry
这里也是ObjectTest.java:
public class ObjectTest
{
private static String name;
public ObjectTest(String nm)
{
name = nm;
}
public static String getName()
{
return name;
}
}
这是什么打印出最后一个对象的名称?这里不应该有2个不同的对象吗?似乎只有1。
答案 0 :(得分:0)
所有类实例之间共享的静态变量,最后一个值将覆盖您之前设置的所有内容。使用实例变量代替静态变量:
public class Main {
public static ObjectTest[] objArray = new ObjectTest[2];
public static void main(String[] args) {
objArray[0] = new ObjectTest("Jimmy");
objArray[1] = new ObjectTest("Terry");
System.out.println(objArray[0].getName());
System.out.println(objArray[1].getName());
}
}
class ObjectTest {
private String name;
public ObjectTest(String nm) {
name = nm;
}
public String getName() {
return name;
}
}
输出:
Jimmy
Terry
答案 1 :(得分:0)
name
在这里是一个静态字段,对于类ObjectTest
的每个实例来说都是一个静态字段。到处删除static
关键字。