Avatar ·

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`块和次构造函数,它们执行的顺序是什么?