语法
一,语法.
1.1var 与 val.
- kotlin中,var符号表示的是变量,可以多次重复赋值。
- 而val表示的是“常量”,但这并不是通俗意义上的常量。本质上val也是变量,但一次赋值之后,不能再次修改,只能作为【只读变量】。
var str: String = ""中,str是变量名,:String,表明该变量是String类型变量,后面就是赋值语句。
var str= ""省略了声明变量类型,它可以根据赋的值而自动推断出类型。
1.2 可空变量和不可空变量.
定义变量时,可在类型后面加一个问号?,表示该变量是Nullable,不加表示该变量不可为null。
var s:String? = null
var s2:String = null //如果该变量被赋值为null,则编译不通过
对于可以为null的变量,在使用该变量的时候,必须用变量名+?(如上面的s?)的形式进行调用,表示如果该变量为null,则不执行该变量调用的方法。如:
s = "yyy"//赋值时不需要使用s?形式
var l= s?.length//如果s为null,则不执行length方法
当s为null时,不会执行length方法,从而避免了java中频繁的空指针异常。
1.3后期初始化与延迟初始化.
当在类中定义一个变量(属性)的时候是必须初始化的。这在平时的实际开发中能满足大部分的需求。但比如说:Android开发中对组件变量的声明与赋值等。这就需要Kotlin中特有的后期初始化属性来满足这个需求了。这里就需要用到延时初始化.
后期初始化
private lateinit var txtView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
txtView = findViewById(R.id.txt_main)
setText()
}
fun setText() {
txtView.text = "这是一段测试代码"
}
注意
- 使用lateinit关键字
- 必须是可读且可写的变量,即用var声明的变量
- 不能声明于可空变量。
- 不能声明于基本数据类型变量。例:Int、Float、Double等,注意:String类型是可以的。
- 声明后,在使用该变量前必须赋值,不然会抛出UninitializedPropertyAccessException异常。
延时初始化
所谓延迟初始化即:指当程序在第一次使用到这个变量(属性)的时候在初始化。
private val aTextView by lazy {
findViewById<TextView>(R.id.txt_main)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setText()
}
fun setText() {
aTextView.text = "这是一段测试代码"
}
- 使用lazy{}高阶函数,不能用于类型推断。且该函数在变量的数据类型后面,用by链接。
- 必须是只读变量,即用val声明的变量。
网友评论