問題:
public class InitializationOrder {
        public static void main(String[] args) {
                Subclass sb = new Subclass();
        }
}
class Super{
        
        static {
                System.out.println(1);
        }
        
        Super(int i){
                System.out.println(i);
        }
}
class Subclass extends Super implements Interface{
        
        static {
                System.out.println(2);
        }        
        
        Super su = new Super(4);
        
        Subclass() {
                super(3);
                new Super(5);
        }
}
interface Interface{
        static Super su = new Super(0);
}
請教下為什么輸出沒有0. 難道接口中的成員變量不被實現時不初始化嗎?接口中的成員變量是在何時被初始化的?向各位請教了~

解决方案 »

  1.   

    因为在接口中定义的su在整个程序中都没有使用过, 也即在你的程序中根本就还没有用到过Interface的任何东西, 所以这个Interface根本就没有加载到内存中.
    所以不会输出0.可以在命令行里用java -verbose InitializationOrder 来运行这个程序, 会详细的列出来加载了哪些类与接口. 你会看到接口Interface根本没有被加载, 但是当你用一下里面的Interface.su, 然后就会加载了.
      

  2.   

    就是說Interface 只有當第一次調用其成員變量時候才開始初始化﹐這與類的靜態初始化有不同啊.