父类 public class People { private String name; private static People people = new People(); private static int n = 10; private int age = setAge(); { System.out.println("初始化块"); System.out.println("age = " + age); } static { System.out.println("静态块"); System.out.println("n = " + n); } public static int setAge() { return n++; } public People() { System.out.println("默认构造函数"); System.out.println("age:" + age); } public People(String name, int age) { this.name = name; this.age = age; System.out.println("有参构造函数"); System.out.println("age:" + age); } { System.out.println("初始化块1"); System.out.println("age = " + age); } }
子类 public class Student extends People { private static int num=20; private String school; { System.out.println("student 初始化块"); school="河北小学"; System.out.println(school); } static { System.out.println("student 静态块"); } public Student() { } public Student(String name, int age) { super(name, age); System.out.println("student 构造函数"); } }
主函数 import java.util.*; public class Main { public static void main(String[] args) { Student p = new Student(); Student p1=new Student("zhangsan",40); } }
结果:初始化块
age = 0
初始化块1
age = 0
默认构造函数
age:0
静态块
n = 10
student 静态块
初始化块
age = 10
初始化块1
age = 10
默认构造函数
age:10
student 初始化块
河北小学
初始化块
age = 11
初始化块1
age = 11
有参构造函数
age:40
student 初始化块
河北小学
student 构造函数
结论
从上到下执行父类静态变量;然后遍历所有的非静态变量进行初始化
父类的静态代码块
子类的静态代码块
然后执行主程序
如果在父类或者子类有调用构造函数的new对象先执行