在java中获取成员变量的相同值

在java中获取成员变量的相同值,java,Java,我用java编写了一个测试程序,其中对象有3个参数: id, name and age. 使用构造函数初始化名称和年龄,但id应该从最后一个id自动递增(对于第一个创建的对象,它应该从1开始) 我使用id作为静态变量来实现相同的功能 import java.util.*; class Test { private static int id = 1; private int age; private String name; public Test(Stri

我用java编写了一个测试程序,其中对象有3个参数:

id, name and age.
使用构造函数初始化名称和年龄,但id应该从最后一个id自动递增(对于第一个创建的对象,它应该从1开始)

我使用
id
作为静态变量来实现相同的功能

import java.util.*;

class Test
{
    private static int id = 1;
    private int age;
    private String name;

    public Test(String name, int age)
    {
        this.id = id;
        this.age = age;
        this.name = name;
        id++;
    }

    public String toString()
    {
        return id + " " + name + "," + age;
    }

    public static void main(String args[])
    {   
        Test c1 = new Test("A", 12);
        Test c2 = new Test("B", 32);
        Test c3 = new Test("C", 58);
        Test c4 = new Test("D", 17);
        Test c5 = new Test("E", 42);

        ArrayList<Test> testList =  new ArrayList<Test>();

        testList.add(c1);
        testList.add(c2);
        testList.add(c3);
        testList.add(c4);
        testList.add(c5);

        for(int i = 0; i < testList.size(); i++)
            System.out.println(testList.get(i).toString());
    }
}
import java.util.*;
课堂测试
{
私有静态int id=1;
私人互联网;
私有字符串名称;
公共测试(字符串名,整数)
{
this.id=id;
这个。年龄=年龄;
this.name=名称;
id++;
}
公共字符串toString()
{
返回id+“”+姓名+”,“+年龄;
}
公共静态void main(字符串参数[])
{   
试验c1=新试验(“A”,12);
试验c2=新试验(“B”,32);
试验c3=新试验(“C”,58);
试验c4=新试验(“D”,17);
试验c5=新试验(“E”,42);
ArrayList testList=新的ArrayList();
添加(c1);
添加(c2);
testList.add(c3);
testList.add(c4);
添加(c5);
对于(int i=0;i
但是在输出中,我得到了所有测试对象的相同id

谁能解释一下为什么会这样


任何帮助都将不胜感激。

静态变量意味着该变量在给定类的所有实例之间共享,如果您在其中一个实例中更改静态变量的值,它将在所有实例中更改

您想要实现的目标可能在下一步是可行的:

class Test
{
    public static int counter = 1;
    private int id;
    private int age;
    private String name;

    public Test(String name, int age)
    {
        this.id = counter;
        this.age = age;
        this.name = name;
        counter++;
    }

    public String toString()
    {
        return id + " " + name + "," + age;
    }
....
将计数器设为公共,实际上可能需要从类实例外部引用它,或者如果无法将其公开为公共,则将其设为私有并为其创建一个静态getter,该getter将允许您从类外部获取当前id计数器


另一个选项是使用,但对于这种特殊情况可能不需要。

您的类将需要两个id类型字段,一个是实例专用的,另一个是静态的,比如称为lastId。您需要使用Factory模式来创建对象以实现此目标
id
是静态的。读一本关于javaid的书,你将id定义为静态的,然后想知道为什么每个实例都有相同的id?您可能想阅读一篇关于Java的介绍性文章,看看静态意味着什么以及它有什么影响。