直接通过代码来测试继承中各代码块的执行顺序
package com.cqucc.extendss;
public class Person {
private int age;
private String sex;
private double height;
//构造代码块:每创建一次对象就会执行一次,优先于构造方法执行
{
System.out.println("父类 构造代码块1");
}
//静态代码块在类被加载的时候就执行,只执行一次,优先于主方法执行
static{
System.out.println("父类 静态代码块 ");
}
{
System.out.println("父类 构造代码块2");
}
public Person() {
System.out.println("父类 构造方法 ");
}
public void move() {
System.out.println("父类 move()");
System.out.println();
}
}
package com.cqucc.extendss;
public class Student extends Person {
{
System.out.println("子类 构造代码块1");
}
static{
System.out.println("子类 静态代码块 ");
}
{
System.out.println("子类 构造代码块2");
}
public Student() {
System.out.println("子类 构造方法 ");
}
}
package com.cqucc.extendss;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.move();
Student s1 = new Student();
s1.move();
}
}
结论:父类静态代码块 > 子类静态代码块 > 父类代码块 > 父类构造方法 > 子类代码块 > 子类构造方法
注意:1.静态代码块:在类被加载的时候就执行,只执行一次,优先于主方法执行
2.构造代码块:每创建一次对象就会执行一次,优先于构造方法执行