我已经开始学习Kotlin。我想知道init
block和之间的区别constructor
。这和我们如何使用它来改善之间有什么区别?
class Person constructor(var name: String, var age: Int){
var profession: String = "test"
init{
println("Test")
}
}
Run Code Online (Sandbox Code Playgroud)
Eug*_*nko 13
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()
Run Code Online (Sandbox Code Playgroud)
当被调用时,它会打印abc
. 因此init{..}
in在主构造函数之后但在辅助构造函数之前调用。
在初始化块将执行主构造之后。初始化程序块实际上成为主构造函数的一部分。该构造是二次构造。委派给主要构造函数的过程是次要构造函数的第一条语句,因此所有初始化程序块中的代码都在次要构造函数主体之前执行。
例
class Sample(private var s : String) {
constructor(t: String, u: String) : this(t) {
this.s += "$u"
}
init {
s += "B"
}
}
Run Code Online (Sandbox Code Playgroud)
认为您使用以下方法初始化了Sample类
Sample("T","U")
Run Code Online (Sandbox Code Playgroud)
您将获得以可变的字符串响应小号的"TBU"
。将值从Sample类的主要构造函数"T"
分配给s,然后立即开始执行init块,它将添加到变量中。在init块之后,辅助构造函数块开始执行,并且s将变为。"B"
"TBU"
归档时间: |
|
查看次数: |
816 次 |
最近记录: |