在Kotlin中经常看到主构造函数、成员变量、init代码块(也叫初始化器),它们的执行时机和顺序是什么样的呢?看一下官方的示例:
class InitOrderDemo(name: String) {
val firstProperty = "First property: $name".also(::println)
init {
println("First initializer block that prints ${
name}")
}
val secondProperty = "Second property: ${
name.length}".also(::println)
init {
println("Second initializer block that prints ${
name.length}")
}
}
官方示例仅仅是展示了打印结果,没有进行深入剖析。
下面围绕下面几个问题进行剖析。
为什么成员变量可以直接使用构造函数的参数?
成员变量和init初始化器执行先后顺序是什么?
构造函数与init初始化器执行先后顺序是什么?
以上代码,调用InitOrderDemo(“hello”),打印结果如下:
First property: hello
First initializer block that prints hello
Second property: 5
Second initializer block that prints 5
可以看到执行顺序,是按照它们声明的顺序执行。
那么为什么会这样呢?将这段代码转化成Java代码就会一目了然了。
将kotlin转成Java代码的操作步骤:
打开某个Kotlin类 -> 点击android studio菜单栏上的tools- > kotlin -> Decompile kotlin to java
转化成Java代码如下:
import kotlin.Metadata;
import kotlin.Unit;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;
public final class InitOrderDemo {
@NotNull
private final String firstProperty;
@NotNull
private final String secondProperty;
@NotNull
public final String getFirstProperty() {
Kotlin构造函数解析

本文详细解析了Kotlin中构造函数、成员变量及init代码块的执行顺序与原理,通过对比Kotlin与Java的不同之处,深入浅出地介绍了Kotlin构造函数的内部机制。
最低0.47元/天 解锁文章
1129

被折叠的 条评论
为什么被折叠?



