0
点赞
收藏
分享

微信扫一扫

kotlin中类初始化顺序介绍

问题背景

kotlin的类初始化过程,经常涉及到主构造函数、次构造函数、init函数,那么类初始化过程,他们的执行顺序是什么呢?

问题分析

首先,我们看下主构造函数、次构造函数、init函数分别指啥?

(1)主构造函数

主构造函数是类标头的一部分。比如以下实例:

class Person(val name: String, var age: Int) {

}

用括号括起来的代码块是主要的构造函数:(val name: String, var age: Int)。 构造函数声明了两个属性:name(只读属性,因为它是使用关键字val声明的)和age(读写属性,因为它是用关键字var声明的)。 查看主构造函数对应的java反编译代码如下(具体反编译方法可参考 https://blog.51cto.com/baorant24/6034450 (2)中介绍)): image.png

(2)次构造函数

在Kotlin中,一个类还可以包含一个或多个次构造函数。它们是使用 constructor 关键字创建的。可以在Kotlin中创建次构造函数的方法如下:

class Log {
    constructor(data: String) {
        // 一些代码
    }
    constructor(data: String, numberOfData: Int) {
        // 一些代码
    }
}

查看对应的java反编译代码: image.png

(3)init函数

在 Kotlin 类中 , 可以定义 init 初始化块 , 在其中可以为 变量赋值 , 执行一些检查相关的代码 , 该 init 初始化块在 创建类实例对象 时执行,代码示例如下: image.png

(4)类初始化顺序

Kotlin 类 对象在实例化 时会执行一系列的 初始化操作 , 反编译java代码看看,这些操作执行的顺序 : image.png 可以看出这些操作按照如下顺序执行 : 主构造函数 中属性赋值 类中的属性赋值 init 初始化块 中的代码执行 次构造函数 中的代码执行

问题总结

针对kotlin类结构中的主构造函数、次构造函数、init函数等,本文给与了初步介绍,同时通过反编译java代码的方式,清晰说明了类初始化过程的执行顺序,有兴趣的同学可以进一步深入研究。

举报

相关推荐

0 条评论