我已经开始学习Kotlin。我想知道init
块和constructor
之间的区别。
这和我们如何使用它来改善之间有什么区别?
class Person constructor(var name: String, var age: Int){
var profession: String = "test"
init{
println("Test")
}
}
答案 0 :(得分:4)
答案 1 :(得分:1)
Kotlin类中的一个类是不包含代码的主构造函数(在类名之后的一个),它只能初始化属性(例如class X(var prop: String)
)。
init{..}
块,位于的位置,您可以在该位置放置更多将在 属性初始化后运行的代码:
初始化程序块的执行顺序与它们在类主体中出现的顺序相同,并与属性初始化程序交织
有关更多信息,请参见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()
在调用时它会打印abc
。因此,init{..}
在主要构造函数之后的中但在次要构造函数之前被调用。
答案 2 :(得分:1)
init 块将在主要构造函数之后立即执行。初始化程序块实际上成为主构造函数的一部分。 构造函数是辅助构造函数。委派给主要构造函数的过程是次要构造函数的第一条语句,因此所有初始化程序块中的代码都在次要构造函数主体之前执行。
示例
class Sample(private var s : String) {
constructor(t: String, u: String) : this(t) {
this.s += "$u"
}
init {
s += "B"
}
}
以为您初始化了Sample类
Sample("T","U")
您将在变量 s 上以"TBU"
的形式获得字符串响应。
值"T"
从 Sample 类的主要构造函数分配给 s ,然后立即开始执行init块,它将把"B"
添加到变量中。在初始化块之后,辅助构造函数块开始执行,并且 s 将变为"TBU"
。
答案 3 :(得分:0)
如 Kotlin 文档中所述:
<块引用>主构造函数不能包含任何代码。初始化代码可以放在以 init
关键字为前缀的初始化块中。
在实例初始化期间,初始化块按照它们出现在类主体中的相同顺序执行,与属性交错初始值设定项:...