在 kotlin 中 init 块和构造函数的区别是什么?

我已经开始学习科特林。我想知道之间的区别 init块和 constructor。 What is the difference between this and how we can use this to improve?

class Person constructor(var name: String, var age: Int) {
var profession: String = "test"


init {
println("Test")
}
}
49002 次浏览

Kotlin 类中的类 a 主构造函数(类名后面的一个)不包含代码,它只能初始化属性(例如 class X(var prop: String))。

这个地方的 init{..}区块,在那里可以放置更多在 属性初始化后运行 < em > 的代码:

初始值设定项区块的执行顺序与它们在类别主体中出现的顺序相同,并与属性初始值设定项交错执行

https://kotlinlang.org/docs/reference/classes.html#constructors中有更多关于这方面的内容

这里有一个例子:




class X(var b: String) {
val a = print("a")


init {
print("b")
}


constructor() : this("aaa") {
print("c")
}
}




X()

When called it prints abc. Thus the init{..} in invoked after primary constructor but before a secondary one.

Init块将在主构造函数之后立即执行。初始化器块实际上成为主构造函数的一部分。

构造函数是辅助构造函数。向主构造函数的委托作为辅助构造函数的第一条语句发生,因此所有初始化程序块中的代码都在辅助构造函数体之前执行。

例子

class Sample(private var s : String) {
init {
s += "B"
}
constructor(t: String, u: String) : this(t) {
this.s += u
}
}

初始化 Sample 类

Sample("T","U")

You will get a string response at variable <是的trong>是的 as "TBU".

Value "T" is assigned to s from the 主构造函数主构造函数 of 样本 class.
然后,init块立即开始执行; 它将向 <是的trong>是的变量添加 "B"
接下来是 辅助构造函数辅助构造函数转弯,现在 "U"被添加到 <是的trong>是的变量变成 "TBU"

Since,

主构造函数不能包含任何代码。

https://kotlinlang.org/docs/reference/classes.html

init{..}块允许向主构造函数添加代码。

正如科特林文件中所说:

主构造函数 不能包含 any code。初始化代码可以放置在 初始化程序块中,初始化程序块的前缀是 init关键字。

During an instance initialization, the 初始化程序块 are executed in the same order as they appear in the 阶级团体, interleaved with the property initializers: ...

Https://kotlinlang.org/docs/classes.html#constructors