public class Parent {     private static int iz = getNext(2); 
    private static int iy=99; 
    
    
//静态初始化块 
    static { 
            System.out.println("parent的静态初始化块"); 
            System.out.println(iz); 
            System.out.println(iy); 
    }     public static int getNext(int base) { 
            System.out.println("parent的static int getNext(int base)被调用"); 
                            System.out.println(iy); 
            System.out.println(iz); 
            return ++base; 
    }     public static void t() { 
        System.out.println("parent的static void t被调用"); 
        System.out.println(iz); 
    
    } 
    
    public static void main(String[] args) {
    
    }
    
}为什么是这个输出呢?
parent的static int getNext(int base)被调用
0
0
parent的静态初始化块
3
99我感觉:应该上面的成员变量和成员方法都是static的,所以编译时应该按顺序执行啊~~
迷糊中...

解决方案 »

  1.   

    执行时是从 main 开始的
    然后 iz 调用getNext() iy 此时尚未解析  默认值  0
         iz 也未赋值  默认值  0
    故 打印:
    parent的static int getNext(int base)被调用 


    然后 iz 赋值  3
         iy 赋值  99
    在接着是:
    静态初始化块 
        static { 
                System.out.println("parent的静态初始化块"); 
                System.out.println(iz); 
                System.out.println(iy); 
        } 
    打印:
    parent的静态初始化块 

    99