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的,所以编译时应该按顺序执行啊~~
迷糊中...
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的,所以编译时应该按顺序执行啊~~
迷糊中...
然后 iz 调用getNext() iy 此时尚未解析 默认值 0
iz 也未赋值 默认值 0
故 打印:
parent的static int getNext(int base)被调用
0
0
然后 iz 赋值 3
iy 赋值 99
在接着是:
静态初始化块
static {
System.out.println("parent的静态初始化块");
System.out.println(iz);
System.out.println(iy);
}
打印:
parent的静态初始化块
3
99