文章标题
2017-06-16 23:24
225 查看
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.