Ebn*_*ang 18 constructor initialization declaration kotlin
这是我的测试代码:
class Test {
init {
a = 1
}
constructor() {
a = 2
}
private var a: Int
init {
a = 3
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除辅助构造函数:
class Test {
init {
a = 1 // Error: Variable cannot be initialized before declaration
}
// constructor() {
// a = 2
// }
private var a: Int
init {
a = 3
}
}
Run Code Online (Sandbox Code Playgroud)
我知道
在实例初始化期间,初始化程序块的执行顺序与它们在类主体中出现的顺序相同.
但是,如果存在辅助构造函数,为什么我可以在声明之前初始化变量?
更新:
我发现了一件有趣的事:
class Test {
init {
a = log(1)
}
constructor() {
a = log(2)
}
private var a: Int = log(0)
init {
a = log(3)
}
}
fun log(i: Int): Int {
println(i)
return i
}
fun main(args: Array<String>) {
Test()
}
Run Code Online (Sandbox Code Playgroud)
输出是:1 0 3 2
,这与Java相同,声明和初始化是两个不同的步骤,但这对于Kotlin的主要构造函数来说很奇怪,Er ...
归档时间: |
|
查看次数: |
1999 次 |
最近记录: |