java成员变量、代码块、构造器的初始化顺序
(1)初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
(2)初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
(3)初始化父类的普通成员变量和代码块,按照在程序中出现的顺序初始化,再执行父类的构造方法;
(4)初始化子类的普通成员变量和代码块,按照在程序中出现的顺序初始化,再执行子类的构造方法;
注意“按照在程序中出现的顺序初始化”,静态成员变量和静态代码块,谁在前先初始化谁。成员变量和代码块,也是谁在前先初始化谁。
public class Fruit { static { // 父类静态代码块 new Printer("fruitStaticBlock"); } // 父类静态成员变量 public static Printer fruitStaticPrinter = new Printer("fruitStaticPrinter"); // 父类成员变量 public Printer fruitPrinter = new Printer("fruitPrinter"); public Fruit(){ // 父类构造器 new Printer("FruitConstructor"); } { // 父类代码块 new Printer("Fruit Block"); } } public class Apple extends Fruit{ // 子类静态成员变量 public static Printer appleStaticPrinter = new Printer("appleStaticPrinter"); static { // 子类静态代码块 new Printer("appleStaticBlock"); } public Apple() { // 子类构造器 new Printer("AppleConstructor"); } { // 子类代码块 new Printer("Apple Block"); } // 子类成员变量 public Printer applePrinter = new Printer("applePrinter"); } public class Printer { public Printer(String msg) { System.out.println(msg); } }
new Apple();
输出结果:
fruitStaticBlock
fruitStaticPrinter
appleStaticPrinter
appleStaticBlock
fruitPrinter
Fruit Block
FruitConstructor
Apple Block
applePrinter
AppleConstructor
posted on 2023-12-16 21:31 Deltadeblog 阅读(28) 评论(0) 编辑 收藏 举报