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 初始化块定义在类级别的属性赋值之前,那么它就比类级别的属性赋值早一步初始化。
 

猜你喜欢

转载自blog.csdn.net/liujun3512159/article/details/129193489