1.代码示例
class Father {
Father() {
System.out.println("父类构造函数");
System.out.println();
}
public static byte a;
public static char b;
static {
System.out.println("父类静态初始化块-----start");
System.out.println("byte:" + a + " char:" + b);
System.out.println("父类静态初始化块-----end");
System.out.println();
}
public float c;
public double d;
{
System.out.println("父类初始化块-----start");
System.out.println("float:" + c + " double:" + d);
System.out.println("父类初始化块-----end");
System.out.println();
}
}
public class Init extends Father {
Init() {
System.out.println("子类构造函数");
System.out.println();
}
public static short m;
public static int n;
static {
System.out.println("子类静态初始化块-----start");
System.out.println("short:" + m + " int:" + n);
System.out.println("子类静态初始化块-----end");
System.out.println();
}
public boolean j;
public long k;
{
System.out.println("子类初始化块-----start");
System.out.println("boolean:" +j + " long:" +k);
System.out.println("子类初始化块-----end");
System.out.println();
}
public static void main(String[] args) {
Init son = new Init();
}
}
2.运行结果:
父类静态初始化块-----start
byte:0 char:
父类静态初始化块-----end
子类静态初始化块-----start
short:0 int:0
子类静态初始化块-----end
父类初始化块-----start
float:0.0 double:0.0
父类初始化块-----end
父类构造函数
子类初始化块-----start
boolean:false long:0
子类初始化块-----end
子类构造函数
3.结论
可知当创建java对象时,它的内部初始化顺序为:
1.父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2.子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3.父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4.父类构造方法
5.子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6.子类构造方法