创建两个类StaticInit、StaticInitChildren,其中StaticInitChildren 继承StaticInit。
一、创建父类StaticInit
package com.lhp.base;
/**
* Created by Administrator on 2018/8/22.
*/
public class StaticInit {
{
System.out.println("父类非静态代码块1执行了");
System.out.println("-----------------");
}
{
System.out.println("父类非静态代码块2执行了");
System.out.println("-----------------");
}
static {
System.out.println("父类静态代码块执行了");
System.out.println("-----------------");
}
public StaticInit(){
System.out.println("父类构造函数执行了");
System.out.println("-----------------");
}
public static void main(String[] args) {
new StaticInit();
}
}
运行父类的main方法,结果:
父类静态代码块执行了
-----------------
父类非静态代码块1执行了
-----------------
父类非静态代码块2执行了
-----------------
父类构造函数执行了
-----------------
Process finished with exit code 0
二、创建子类
package com.lhp.base;
/**
* Created by Administrator on 2018/8/22.
*/
public class StaticInitChildren extends StaticInit {
{
b = 3;
System.out.println("子类非静态代码块1执行了");
System.out.println("-----------------");
}
{
b = 4;
System.out.println("子类非静态代码块2执行了");
System.out.println("-----------------");
}
static {
System.out.println("子类静态代码块执行了");
System.out.println("-----------------");
}
public StaticInitChildren () {
b = 2;
System.out.println("子类构造函数执行了");
System.out.println("-----------------");
}
int b = 1;
public static void main(String[] args) {
System.out.println(new StaticInitChildren().b);
}
}
运行子类的main方法,结果:
父类静态代码块执行了
-----------------
子类静态代码块执行了
-----------------
父类非静态代码块1执行了
-----------------
父类非静态代码块2执行了
-----------------
父类构造函数执行了
-----------------
子类非静态代码块1执行了
-----------------
子类非静态代码块2执行了
-----------------
子类构造函数执行了
-----------------
2
Process finished with exit code 0
三、结论:
1.代码块、静态代码块、构造函数执行顺序如上
2.属性初始化顺序,初始化块指定的初始值>声明属性时指定的初始值>构造函数指定的初始值