我在理解以下代码的输出方面遇到了一些麻烦。有人可以解释确切的步骤,以便我能更好地了解发生了什么吗?
public class Foo {
private static int id = 0 ;
private int myId ;
public Foo() {
myId = id ;
++id ;
}
public int getMyId() {
return myId ;
}
public static void main(String[] args) {
Foo f1 = new Foo();
Foo f2 = new Foo();
System.out.println(f1.getMyId());
System.out.println(f2.getMyId());
System.out.println(id);
}
}
你能解释为什么输出等于:
0
1
2
答案 0 :(得分:1)
我假设您发现静态部分令人困惑,在这种情况下,此变量实际上保留了一次。使用10个Foo实例时,仍然只有1个“静态”id(每次创建Foo的新实例时都会增加)。
答案 1 :(得分:0)
Class Foo有一个名为id private static int id
的静态字段,每当该类的一个实例调用public int getMyId(){....}
这个例子,你会看到它想要区分对象时,它会增加(' instance')和类所以当你有2个对象foo1和foo2并且它们都调用公共方法getMyId
时,静态变量会增加,而不管对象调用它是foo1还是foo2和id变量对于那些对象foo1和foo2都是可见的另一方面,id是一个非静态的字段,因此它是" property"对象foo1的id对象foo2不可见,反之亦然。
因此,当第一次创建类时,静态字段“id”#39;得到价值0
然后调用foo1.getMyId使字段myId具有存储在id中的值,该值为0然后递增id,因此id现在具有值1
调用foo2.getMyId()将id中的值设为myId中的1,增量id现在id为值2返回值myId
调用id就像调用Foo.id一样,它会给你id值为2