kotlin类初始化顺序

当我们想要对类的一些属性进行初始化时,可以有几种方式进行初始化:

  • 在主构造函数里初始化
  • 在声明时初始化
  • 在次构造函数里初始化
  • 在初始化块里初始化

既然有这么多方式,同一属性就有可能在多个初始化的地方被引用,所以初始化代码的执行顺序就尤其重要。我们可以通过反编译Java字节码来研究下类属性初始化顺序:

看下反编译成java字节码是怎样的:

 汇总上图信息,可以得到以下初始化顺序。
(1) 主构造函数里声明的属性( val health: Int)
(2) 类级别的属性赋值( val race = "DWARF", val town = "Bavaria", val name = _name)
(3) init 初始化块里的属性赋值和函数调用( alignment = "GOOD"、 println 函数)
(4) 次构造函数里的属性赋值和函数调用( town = "The Shire")

需要说明的是, init 初始化块类级别的属性赋值的顺序取决于定义的先后。如果 init 初始化块定义在类级别的属性赋值之前,那么它就比类级别的属性赋值早一步初始化。
 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值