变量初始化策略
1. 立即初始化
// 最常见的初始化方式
val name = "立即初始化"
var count = 0
2. 延迟初始化
// 场景:变量声明时无法立即初始化,但确保在使用前会初始化
// 方式 1:lateinit (用于非空类型,只能用于 var) lateinit var username: String
// println(username) // 错误:lateinit property username has not been initialized
fun setup() { username = "张三" // 在使用前初始化 println(username) // 正常 }
// lateinit 的限制:不能用于原始类型和可空类型 // lateinit var age: Int // 错误 // lateinit var email: String? // 错误
// 检查是否已初始化 if (::username.isInitialized) { println("username 已初始化:$username") }
3. 惰性初始化(by lazy)
// 场景:变量只在第一次使用时初始化,且初始化后不再改变 val expensiveResource: String by lazy { println("正在初始化资源…") // 这里可以执行复杂计算或 IO 操作 "初始化完成的数据" }
// 使用实例 fun main() { println("程序开始") println(expensiveResource) // 第一次访问,会执行初始化 println(expensiveResource) // 第二次访问,直接使用缓存的值 }
// lazy 的线程安全模式


