Kotlin变量
外观
Kotlin变量[编辑 | 编辑源代码]
在Kotlin中,变量是存储数据的基本单元,通过声明变量可以赋予程序动态处理数据的能力。与Java等语言不同,Kotlin的变量设计强调不可变性优先原则,通过`val`和`var`关键字提供显式的可变性控制。
变量声明基础[编辑 | 编辑源代码]
Kotlin使用以下两种关键字声明变量:
1. 只读变量(val)[编辑 | 编辑源代码]
- 使用`val`(value的缩写)声明不可重新赋值的变量(类似Java的`final`变量):
fun main() {
val pi = 3.14159
println("圆周率: $pi")
// pi = 3.14 // 编译错误:Val cannot be reassigned
}
2. 可变变量(var)[编辑 | 编辑源代码]
- 使用`var`(variable的缩写)声明可修改的变量:
fun main() {
var counter = 0
println("初始值: $counter")
counter += 1
println("修改后: $counter")
}
类型系统[编辑 | 编辑源代码]
Kotlin是静态类型语言,但支持类型推断:
显式类型声明[编辑 | 编辑源代码]
val message: String = "Hello"
var count: Int = 10
类型推断[编辑 | 编辑源代码]
编译器可自动推断类型(推荐方式):
val name = "Kotlin" // 推断为String
var score = 95.5 // 推断为Double
变量作用域[编辑 | 编辑源代码]
Kotlin变量的作用域遵循词法作用域规则:
示例:
val global = "全局" // 顶层变量
fun printData() {
val local = "局部"
println("$global - $local") // 正常访问
// println(anotherLocal) // 编译错误
if (true) {
val anotherLocal = "块内"
println(anotherLocal) // 正常访问
}
}
高级特性[编辑 | 编辑源代码]
延迟初始化[编辑 | 编辑源代码]
使用`lateinit`避免非空类型的立即初始化(仅适用于`var`):
lateinit var config: String
fun setup() {
config = "加载配置"
println(config.length) // 正常访问
}
页面模块:Message box/ambox.css没有内容。
访问未初始化的`lateinit`变量会抛出`UninitializedPropertyAccessException` |
惰性初始化[编辑 | 编辑源代码]
使用`by lazy`实现按需初始化(仅适用于`val`):
val heavyData: String by lazy {
println("执行初始化计算")
"大数据计算结果"
}
fun main() {
println(heavyData) // 首次访问时初始化
println(heavyData) // 直接返回缓存值
}
实际应用案例[编辑 | 编辑源代码]
场景1:用户会话管理[编辑 | 编辑源代码]
class UserSession {
var authToken: String? = null // 可空可变变量
val userId: String by lazy { generateUserId() }
private fun generateUserId(): String {
return "user-${System.currentTimeMillis()}"
}
}
场景2:配置参数处理[编辑 | 编辑源代码]
object AppConfig {
const val API_VERSION = "v1.0" // 编译时常量
var debugMode = false // 运行时可变参数
fun toggleDebug() {
debugMode = !debugMode
println("Debug模式: ${if (debugMode) "开启" else "关闭"}")
}
}
最佳实践[编辑 | 编辑源代码]
- 优先使用`val`声明变量,仅在需要修改时使用`var`
- 对基本数据类型使用`const val`声明编译时常量
- 复杂对象的延迟初始化优先选择`by lazy`而非`lateinit`
- 避免使用全局可变变量(`var`),推荐通过类封装
常见问题[编辑 | 编辑源代码]
数学表示[编辑 | 编辑源代码]
变量可视为从内存地址到值的映射: 其中Kotlin通过类型系统保证: