java instantiate_java实例化

初始化块

实际上,初始化块是一个假象,使用javac命令编译java类后,初始化块会消失,初始化代码被还原到每个构造器中代码的最前面

在实例化的过程中:前面的初始化块先执行,后面的后执行

初始化块的修饰符只能是 static

普通初始化块负责对对象执行初始化,静态初始化块负责对类执行初始化

初始化块只在创建java对象时隐式的执行,在构造器之前执行

当创建java对象时,初始化顺序是:

1、第一次类加载时:

先执行顶层父类的静态初始化代码,再向下追溯执行间接父类静态初始化代码,

最后执行直接父类静态初始化代码;

静态初始化块和声明静态成员变量时指定的初始值都是给类的静态初始化代码,

它们的执行顺序与源码中书写顺序相同。

2、接着开始对对象实例化

先执行初始化块或声明实例变量时指定的初始值(两者执行顺序与源码书写顺序相同),

再执行构造器里的代码。

例子:

1 classRoot{2 static{3 System.out.println("Root的静态初始化块");4 }5

6 {7 System.out.println("Root的普通初始化块");8 }9

10 publicRoot() {11 System.out.println("Root的无参构造器");12 }13

14 }15

16 class Mid extendsRoot{17 static{18 System.out.println("Mid的静态初始化块");19 }20

21 {22 System.out.println("Mid的普通初始化块");23 }24

25 publicMid() {26 System.out.println("Mid的无参构造器");27 }28

29 publicMid(String msg) {30 this();31 System.out.println("Mid的带参构造器,其参数值:" +msg);32 }33

34 }35

36 class Leaf extendsMid{37 static{38 System.out.println("Leaf的静态初始化块");39 }40

41 {42 System.out.println("Leaf的普通初始化块");43 }44

45 publicLeaf() {46 super("疯狂java");47 System.out.println("Leaf的无参构造器");48 }49 }50

51 public classTest {52 public static voidmain(String[] args){53 newLeaf();54 newLeaf();55 }56 }

执行结果:

Root的静态初始化块

Mid的静态初始化块

Leaf的静态初始化块

Root的普通初始化块

Root的无参构造器

Mid的普通初始化块

Mid的无参构造器

Mid的带参构造器,其参数值:疯狂java

Leaf的普通初始化块

Leaf的无参构造器

Root的普通初始化块

Root的无参构造器

Mid的普通初始化块

Mid的无参构造器

Mid的带参构造器,其参数值:疯狂java

Leaf的普通初始化块

Leaf的无参构造器

程序执行流程:

Root的静态初始化块 -->

Mid的静态初始化块 -->

Leaf的静态初始化块 -->

回到Test类new Leaf() -->

进入Leaf无参构造 -->

super进入Mid有参构造 -->

this进入MId无参构造 -->

super进入Root无参构造 -->

进入Root初始化块执行打印 -->

进入Super无参构造并执行打印 -->

进入Mid普通初始化块执行打印 -->

进入MId无参构造并执行打印 -->

进入Mid有参构造执行打印 -->

进入Leaf初始化块打印 -->

进入Leaf无参构造打印 --> .........

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值