构造函数与 init
创建并初始化对象。
构造函数与 init 是 CoddyKit 上的免费 Android Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。
什么是构造函数
构造函数是在创建对象时运行的特殊代码,用于设置对象的初始值。
在 Kotlin 中,主构造函数直接写在类名旁边。
主构造函数
主构造函数写在类名后面的括号中。创建对象时,您需要传入相应的值。
这里的Dog在创建时要求提供名称。
class Dog(name: String) {
val dogName = name
}
fun main() {
val d = Dog("Rex")
println(d.dogName)
}构造函数中的属性
在构造函数参数前添加val或var,就会自动将该参数转换为属性。
这是 Kotlin 中最常见且简洁的写法。
class Dog(val name: String, var age: Int)
fun main() {
val d = Dog("Rex", 3)
println(d.name + " is " + d.age)
}构造函数的默认值
构造函数参数也可以设置默认值。这样,调用者就可以省略这些参数。
如果未提供age,它的默认值就是0。
class Dog(val name: String, var age: Int = 0)
fun main() {
val d = Dog("Max")
println(d.age)
}init 代码块
init代码块会作为主构造函数的一部分运行。对于无法在一行属性声明中完成的初始化逻辑,可以使用它。
它可以读取构造函数参数。
class Dog(val name: String) {
init {
println("Created dog: " + name)
}
}
fun main() {
Dog("Rex")
}在 init 中进行验证
init的常见用途是检查输入。这里使用require防止年龄为负数。
如果检查失败,就不会创建对象。
class Person(val age: Int) {
init {
require(age >= 0) { "Age cannot be negative" }
}
}
fun main() {
val p = Person(25)
println(p.age)
}执行顺序
属性初始化器和init代码块会按照它们在类中出现的顺序从上到下运行。
当某一行依赖上方设置的值时,这一点就很重要。
class Demo {
val a = 1
init { println("a is " + a) }
val b = a + 1
init { println("b is " + b) }
}
fun main() {
Demo()
}计算属性
您可以在类体中根据构造函数的值计算属性。
这里的area由width和height计算得出。
class Rect(val width: Int, val height: Int) {
val area = width * height
}
fun main() {
println(Rect(3, 4).area)
}次构造函数
类也可以使用constructor关键字定义次构造函数。它们必须通过this(...)委托给主构造函数。
由于默认值通常已经足够,因此次构造函数并不常用。
class Dog(val name: String) {
constructor() : this("Unknown")
}
fun main() {
println(Dog().name)
}使用新对象
构造函数和init运行完毕后,对象就可以使用了。您可以立即读取它的属性并调用它的方法。
这里,构造函数设置了余额,而一个方法从余额中扣除支出。
class Account(var balance: Int) {
fun spend(amount: Int) {
balance = balance - amount
}
}
fun main() {
val acc = Account(100)
acc.spend(30)
println(acc.balance)
}构造函数为对象做好准备
构造函数和init代码块可以确保每个对象都从有效状态开始。
- 主构造函数:声明并接收值。
init:执行初始化和验证。
这样可以避免应用中出现未完整构建的对象。
快速检查
测试您对构造函数和 init 的理解。
回顾
您学习了主构造函数,了解了如何在其中使用val/var声明属性,以及如何为属性设置默认值。
init代码块负责初始化和验证,并会与属性初始化器一起从上到下运行。接下来,您将学习数据类,它可以自动为您生成这些样板代码。
常见问题解答
「构造函数与 init」课时是免费的吗?
是的 — 「构造函数与 init」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。
「构造函数与 init」这节课中我会学到什么?
创建并初始化对象。 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Android Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「构造函数与 init」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Android Academy 课中编写并运行代码吗?
能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。