Kotlin中init块与构造函数的区别是什么?
你好!我刚开始在Java之后学习Kotlin,遇到了一些困惑。在Java中,我们有构造函数,在其中初始化字段。在Kotlin中,我看到既可以使用构造函数(主构造函数和次构造函数),也可以使用特殊的`init`块。但我不完全理解,如果所有事情都可以在构造函数中完成,为什么还需要`init`块?
例如,我有这样的代码:
```kotlin
class Person(name: String) {
val name: String
init {
this.name = name.uppercase()
}
}
```
为什么不像Java那样直接在构造函数体中写`init`?或者再看这个例子:
```kotlin
class Rectangle(val width: Int, val height: Int) {
val area: Int
init {
area = width * height
}
}
```
这可以直接在主构造函数中完成吗?`init`和构造函数之间的根本区别是什么?什么时候该用哪个?如果类有多个`init`块和次构造函数,它们执行的顺序是什么?