标签:extend ati java对象 this 构造器 例子 创建 java类 使用
当创建java对象时,初始化顺序是:
1、第一次类加载时:
先执行顶层父类的静态初始化代码,再向下追溯执行间接父类静态初始化代码,
最后执行直接父类静态初始化代码;
静态初始化块和声明静态成员变量时指定的初始值都是给类的静态初始化代码,
它们的执行顺序与源码中书写顺序相同。
2、接着开始对对象实例化
例子:
1 class Root{ 2 static { 3 System.out.println("Root的静态初始化块"); 4 } 5 6 { 7 System.out.println("Root的普通初始化块"); 8 } 9 10 public Root() { 11 System.out.println("Root的无参构造器"); 12 } 13 14 } 15 16 class Mid extends Root{ 17 static { 18 System.out.println("Mid的静态初始化块"); 19 } 20 21 { 22 System.out.println("Mid的普通初始化块"); 23 } 24 25 public Mid() { 26 System.out.println("Mid的无参构造器"); 27 } 28 29 public Mid(String msg) { 30 this(); 31 System.out.println("Mid的带参构造器,其参数值:" + msg); 32 } 33 34 } 35 36 class Leaf extends Mid{ 37 static { 38 System.out.println("Leaf的静态初始化块"); 39 } 40 41 { 42 System.out.println("Leaf的普通初始化块"); 43 } 44 45 public Leaf() { 46 super("疯狂java"); 47 System.out.println("Leaf的无参构造器"); 48 } 49 } 50 51 public class Test { 52 public static void main(String[] args){ 53 new Leaf(); 54 new Leaf(); 55 } 56 }
执行结果:
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参构造器
Mid的普通初始化块
Mid的无参构造器
Leaf的普通初始化块
Leaf的无参构造器
Root的普通初始化块
Root的无参构造器
Mid的普通初始化块
Mid的无参构造器
Leaf的普通初始化块
Leaf的无参构造器
程序执行流程:
Root的静态初始化块 -->
Mid的静态初始化块 -->
Leaf的静态初始化块 -->
回到Test类new Leaf() -->
进入Leaf无参构造 -->
super进入Mid有参构造 -->
this进入MId无参构造 -->
super进入Root无参构造 -->
进入Root初始化块执行打印 -->
进入Super无参构造并执行打印 -->
进入Mid普通初始化块执行打印 -->
进入MId无参构造并执行打印 -->
进入Mid有参构造执行打印 -->
进入Leaf初始化块打印 -->
进入Leaf无参构造打印 --> .........
标签:extend ati java对象 this 构造器 例子 创建 java类 使用
原文地址:https://www.cnblogs.com/haiyuexiaozu/p/10984396.html