父类Meal,子类ProPreLunch ,当new ProPreLunch ()时,代码执行顺序为:父类静态块/静态变量(按代码的先后顺序执行)→子类静态块/静态变量(按代码的先后顺序执行)→父类非静态代码块/非静态变量(按代码的先后顺序执行)→父类构造方法→子类非静态代码块/非静态变量(按代码的先后顺序执行)→子类构造方法
代码如下:
父类:public class Meal {
static{ //父类静态代码块
System.out.println("Meal_aaa");
}
private static Cheese che = new Cheese(); //父类静态变量(静态域)
private Cheese cheese = new Cheese(); //父类非静态代码块
{
System.out.println("Meal_bbb"); //父类非静态变量(静态域)
}
public static void Mead() { //父类静态方法,调用才会执行,new对象时不会执行
System.out.println("Meal_ccc");
}
public Meal() { //父类构造方法
System.out.println("meal()");
}
}
子类:
public class ProPreLunch extends Meal{
private static Bread bread = new Bread(); //子类静态变量(静态域)
static{ //子类静态代码块
System.out.println("ProPreLunch_aaa");
}
{ //子类非静态代码块
System.out.println("ProPreLunch_bbb");
}
private Lettuce lettuce = new Lettuce(); //子类非静态变量(静态域)
public static void Mead() { //子类静态方法
System.out.println("ProPreLunch_ccc");
}
ProPreLunch(){ //子类构造方法
System.out.println("ProPreLunch()");
}
public static void main(String[] args) {
new ProPreLunch();
}
}
其它类:
public class Bread {
public Bread() {
System.out.println(“Bread()”);
}
}
public class Cheese {
public Cheese() {
System.out.println(“Cheese()”);
}
}
public class Lettuce {
public Lettuce() {
System.out.println(“Lettuce()”);
}
}
结果:Meal_aaa
Cheese()
Bread()
ProPreLunch_aaa
Cheese()
Meal_bbb
meal()
ProPreLunch_bbb
Lettuce()
ProPreLunch()