class SelfCounter {
private static int count = 0;
private int id = count++;
public String toString() {
return "SelfCounter " + id;
}
}class WithFinalFields {
final SelfCounter scf = new SelfCounter();
static final SelfCounter scsf =
new SelfCounter();
public String toString() {
return "scf = " + scf + "\nscsf = " + scsf;
}
}public class E18_FinalFields {
public static void main(String args[]) {
System.out.println("First object:");
System.out.println(new WithFinalFields());
System.out.println("Second object:");
System.out.println(new WithFinalFields());
}
}INPUT:
First object:
scf=SelfCounter 1
scsf = SelfCounter 0
Second object:
scf=SelfCounter 2
scsf = SelfCounter 0麻烦给祥解下2个对象的ID值是如何得出的,多谢。。
private static int count = 0;
private int id = count++;
public String toString() {
return "SelfCounter " + id;
}
}class WithFinalFields {
final SelfCounter scf = new SelfCounter();
static final SelfCounter scsf =
new SelfCounter();
public String toString() {
return "scf = " + scf + "\nscsf = " + scsf;
}
}public class E18_FinalFields {
public static void main(String args[]) {
System.out.println("First object:");
System.out.println(new WithFinalFields());
System.out.println("Second object:");
System.out.println(new WithFinalFields());
}
}INPUT:
First object:
scf=SelfCounter 1
scsf = SelfCounter 0
Second object:
scf=SelfCounter 2
scsf = SelfCounter 0麻烦给祥解下2个对象的ID值是如何得出的,多谢。。
静态初始化语句是static{ /*---codes---*/ }
非静态初始化语句就是去掉static
**:只在第一次初始这个类的对象,或者第一次访问这个类的静态域或静态方法的时候才发生
也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间。
你把count 开放成 public就知道了
主要是static 和 count++的问题。
System.out.println("First object:");
System.out.println(new WithFinalFields());
初始化WithFinalFields中的static final SelfCounter scsf = new SelfCounter();
初始化SelfCounter 中的private static int count = 0;
然后初始化SelfCounter 中的 private int id = count++;这个时候的id还是等于0。(请注意区别++count)
这个时候count的值=1
这个时候scsf的值就有了0接着初始化WithFinalFields中的final SelfCounter scf = new SelfCounter();
因为count这个时候的值是1了(count在内存中只有一份)
所以id=1。做完这个操作以后count=2以后的你就自己推算吧
System.out.println(new WithFinalFields());
1、 new SelfCounter();
------>private static int count = 0;然后跳出new SelfCounter只一次
------>在进入new SelfCounter 执行private int id = count++;
static final SelfCounter scsf =……;赋值给scsf
System.out.println("Second object:");
System.out.println(new WithFinalFields());
2、执行private int id = count++;
最好是自己有个环境自己来测试一下
形象的看看就非常好啦