父类
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对象先执行