static final域和final域的区别
class SelfCounter {
private static int count;
private int id = count++;
public SelfCounter(){
System.out.println("SelfCounter()"+id);
}
public String toString(){
return "SelfCounter "+ id;
}
}
public class WithFinalFields {
final SelfCounter scf = new SelfCounter();
static final SelfCounter scsf = new SelfCounter();
public String toString(){
return "scf = " + scf + "\tscsf" + scsf;
}
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());
}
}
运行结果:
SelfCounter()0
First object:
SelfCounter()1
scf = SelfCounter 1 scsfSelfCounter 0
Second object:
SelfCounter()2
scf = SelfCounter 2 scsfSelfCounter 0
这是think in java中的练习题 我自己看的有点迷糊记录一下
Because class loading initializes the static final,类加载的时候已经初始化了static final域 所以结果的第一个输出是:SelfCounter()0
it has the same value in both instances of WithFinalFields, whereas the regular final’s values are different for each instance.