我是Java的新手,并试图学习它。我写了两个类如下,我希望打印为1,2,3,但它打印3,3,3。我读了一本关于我无法弄清楚上述行为的java书,并打印1,2,3。
public class Student{
private static int indexNumber = 0;
Student(){
indexNumber=indexNumber+1;
}
public void test() {
System.out.println(this.getIndexNumber());
}
public int getIndexNumber(){
return indexNumber;
}
}
public class College {
public static void main(String args[]){
Student student1 = new Student();
Student student2 = new Student();
Student student3 = new Student();
student1.test();
student2.test();
student3.test();
}
}
有人可以帮忙吗?
答案 0 :(得分:6)
indexNumber
是静态的,因此它在类的每个实例之间“共享”。
如果您想要一个唯一的递增ID,请执行以下操作:
static int nextID = 1;
int indexNumber;
Student() {
indexNumber = (nextID++);
}
这会使indexNumber
成为一个实例字段,以便每个Student
获得自己的副本。静态变量用于跟踪要分配的下一个ID。
答案 1 :(得分:2)
您得到3,3,3,因为您已将变量indexNumber定义为static。因此,在实例化三个学生对象时,indexNumber的值为3。 要增加将indexNumber定义为实例变量,并将其值作为参数传递。
答案 2 :(得分:2)
您的字段是静态的。它将由所有对象共享。
private static int indexNumber = 0;
s1-------->indexNumber<------s2
^
|
|
|
s3
每次实例化都会调用构造函数,这会使indexNumber增加1。
答案 3 :(得分:2)
indexNumber
被声明为static
,并且对所有对象都是通用的。因此你有3,3,3
静态成员与类相关联,而不是与任何对象相关联。
答案 4 :(得分:0)
静态成员与所有对象共享。你没有编入索引,你计算了你的测试。
答案 5 :(得分:0)
由于您已将INDEX NUMBER声明为静态,因此它将由您为该类创建的每个实例共享。如果删除static关键字,则会出现您期望的答案。这就是为什么对于所有三个对象,您获得索引号的相同值。我希望你现在很清楚。谢谢。