Kotlin 里创建对象时的初始化顺序
·
Kotlin 里面有主构造方法、init 方法块、次构造方法,那在初始化的时候,它们执行的顺序是怎样的呢?
代码举例:
class Student(
_name: String,
val age: Int
) {
var name = _name
var score = 10
private val hobby = "music"
val subject: String
init {
println("initializing student...")
subject = "math"
}
constructor(_name: String) : this(_name, age: 10) {
score = 20
}
}
我们将这段代码反编译为 Java 代码:
public Student(@NotNull String _name, int age) {
Intrinsics.checkParameterIsNotNull(_name, "_name");
super();
this.age = age;
this.name = _name;
this.score = 10;
this.hobby = "music";
String var3 = "initializing student...";
boolean var4 = false;
System.out.println(var3);
this.subject = "math";
}
public Student(@NotNull String _name) {
Intrinsics.checkParameterIsNotNull(_name, "_name");
this(_name, age:10);
this.score = 20;
}
可以发现:主构造函数里面的 age 属性最先被赋值,然后再是类级别的属性:name、score、hobby 被赋值,随后是 init 代码块里面的逻辑被执行,最后是次构造函数里面的逻辑被执行
对应关系:

结论:Kotlin 中创建对象时的初始化顺序:
- 主构造函数里声明的属性
- 类级别别的属性赋值
- init 初始化块里的属性赋值和函数调用
- 次构造函数里的属性赋值和函数调用
更多推荐



所有评论(0)