package test2; class Root { static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static { System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static { System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } }
结果:
Root的静态初始化块 Mid的静态初始化块 Leaf的静态初始化块 Root的普通初始化块 Root的无参数的构造器 Mid的普通初始化块 Mid的无参数的构造器 Mid的带参数构造器,其参数值:Java初始化顺序演示 Leaf的普通初始化块 执行Leaf的构造器
静态初始化块只执行一次,当对象创建时,最先进行静态初始化块的执行,且创建子类型的对象时,也会导致父类型的静态初始化块的执行且最先执行。
然后按父类子类顺序,先执行普通初始化块,然后为无参构造
标签:9.30,初始化,Leaf,动脑,System,Mid,println,out From: https://www.cnblogs.com/ashuai123/p/16749537.html