public class Test {
public static void main(String[] args) {
new Student();
}
}
class Person {
static {
System.out.println("Person的静态代码块");
}
{
System.out.println("Person的普通代码块");
}
public Person(){
System.out.println("Person的构造器");
}
}
class Student extends Person{
static {
System.out.println("Student的静态代码块");
}
{
System.out.println("Student的普通代码块");
}
public Student(){
System.out.println("Student的构造器");
}
}
输出结果:
Person的静态代码块
Student的静态代码块
Person的普通代码块
Person的构造器
Student的普通代码块
Student的构造器
可以观察到,初始化顺序为父类静态代码块>子类静态代码块>父类普通代码块>父类普通代码块>子类普通代码块>子类普通代码块,值得一提的是,如果子类没有使用super();来调用父类构造器,那么默认初始化为父类的无参构造器。
class Person {
public Person(String name){
}
}
class Student extends Person{
public Student(){
}
}