Kotlin基础语法 二、变量与常量

1. 变量的声明

kotlin变量的声明必须使用var或val关键字。其中:
var: 用此关键字声明的变量表示可变变量,即可读且可写(可以被多次赋值)。相当于Java中普通变量
val: 用此关键字声明的变量表示不可变变量(也叫只读变量、运行期常量),即可读但不可写(不能重新赋值)。基本相当于Java中用final修饰的变量。

标准定义格式:
var或val 变量名: 数据类型 = xxx

注意:

  1. ) 常量与局部变量都可以没有初始化值,但是在引用前必须初始化。如果没有初始化,必须指明数据类型。
    如果是类的变量必须初始化,如果不初始化,需使用lateinit关键字
    ,具体看后面的介绍
  2. ) 编译器支持自动类型判断,即声明时可以不指定数据类型,由编译器判断。数据类型确定后,不能赋值其他类型的数据。
    示例:下面的userName是String类型,userAge是int型
    var userName =“jf”
    var userAge=26
    userName=26 编译报错,会提示The integer literal does not conform to the expected type String 即int型的数据不是期望的String类型数据。

2.声明可空变量

在Java中,当我们声明一个变量不必声明这个变量是否为空,但在使用这个变量的时候几乎上都会判断其是否为空增加程序的安全性。然而在Kotlin中当我们可以确定这个变量一定不为空时,我们正常声明即可,否则就把它声明为可空变量。

可空变量的特点:

  1. 声明可空变量一定要用上面介绍的标准的声明格式,不能省略数据类型。
  2. 需要在变量类型后面增加?符号表示这是一个可空变量,这是不能省略的
  3. 其初始化的值可以为null或确定的变量值。

定义格式:
var/val 变量名 : 数据类型? = null/确定的值

3. 后期初始化属性

当在类中定义一个变量(属性)的时候是必须初始化的。但这往往不能满足我们的需求,我们并不能在一开始就确定这个变量的具体值,而是在后期操作的时候进行赋值。
比如我们在Android 开发中 想获取布局中的一个组件,我们需要在onCreate()方法中进行findViewById()进行赋值。这时候我们就需要用到后期初始化属性了。

后期初始化属性的特点:

  1. 使用lateinit关键字声明
  2. 必须是可变变量,即用var声明的变量
  3. 不能声明于可空变量,因为可空变量我们可以赋值为null
  4. 不能声明于基本数据类型变量。例:Int、Float、Double等,注意:String类型是可以的。
  5. 同样的,声明后,在使用该变量前必须赋值,不然会抛出UninitializedPropertyAccessException异常。

示例:
private lateinit var tvUserName : TextView
tvUserName=findViewById(R.id.tvUserName)

private lateinit var userAge : Int // 会报错。因为不能用于基本数据类型。

4. 延迟初始化属性

所谓延迟初始化即:指当程序在第一次使用到这个变量的时候再进行初始化。

声明延迟初始化属性的特点:

  1. 使用lazy{}高阶函数,且该函数跟在变量的数据类型后面,用by链接。
  2. 必须是不可变变量,即用val声明的变量。

示例:
// 声明一个延迟初始化的字符串
private val userName : String by lazy{
“jf”
}

5. 声明常量

Kotlin中只用val修饰的是变量并不是常量,val类似于Java中的final关键字
例如:
private val userAge = 26等价于 Java 中的
private final userAge = 26
常量的特点:

  1. 需要在val关键字前面加上const关键字进行声明,并且const关键字只能修饰val,不能修饰var
  2. 声明常量的三种方式:
    2.1)在顶层声明
    2.2 )在object修饰的类中声明
    2.3 )在伴生对象中声明

定义格式:
const val 变量名: 数据类型 = xxx

示例:
const val userAge= 26

你可能感兴趣的:(kotlin,kotlin,android,java)