var: 用此关键字声明的变量表示可变变量,即可读且可写。相当于Java中普通变量
val: 用此关键字声明的变量表示不可变变量,即可读且不可写。相当于Java中用final修饰的变量
Kotlin变量
1.1、基础用法
定义格式: 关键字 变量名: 数据类型 = xxx
如:
//立即初始化
var var_a: Int = 10
//推导出类型
var var_b = 5
//没有初始化的时候,必须声明类型
var var_c: Float
var_c = 12.3f
var_c += 1
var age:Int
var name:String="Zack"
1.2、在类中声明以及声明可空变量
上面的是演示变量的基础定义。而且只有在顶层声明的情况下是可以不用实例化的。但是在实际开发当中,一般都是在一个类中去定义变量,这种情况被称为声明类的属性。
其特点如下:必须初始化,如果不初始化,需使用lateinit关键字
var id: Long // 编译报错 必须初始化
var name: String? = null
var url: String? = null
var mbid: String? = null
1.2.2、声明可空变量
可空变量的特点:
- 在声明的时候一定用标准的声明格式定义。不能用可推断类型的简写。
- 变量类型后面的?符号不能省略。不然就和普通的变量没区别了。
- 其初始化的值可以为null或确定的变量值。
定义:
var/val 变量名 : 类型? = null/确定的值
var name: String? = null
var url: String? = null
var mbid: String? = null
1.3、后期初始化与延迟初始化
声明后期初始化属性的特点:
- 使用lateinit关键字
- 必须是可读且可写的变量,即用var声明的变量
- 不能声明于可空变量。
- 不能声明于基本数据类型变量。例:Int、Float、Double等,注意:String类型是可以的。
- 声明后,在使用该变量前必须赋值,不然会抛出UninitializedPropertyAccessException异常。
实例讲解:举一个Android中常见的例子
// 声明组件
private lateinit var mTabLayout : TabLayout
lateinit var a : Int // 会报错。因为不能用于基本数据类型。
// 赋值
mTabLayout = find(R.id.home_tab_layout)
// 使用
mTabLayout.setupWithViewPager(mViewPager)
Kotlin常量
Kotlin中使用val时候对应的Java代码
Kotlin中的 val numA = 6 等价于 Java中的:public final int numA = 6
很显然,Kotlin中只用val修饰还不是常量,它只能是一个不能修改的变量。那么常量怎么定义呢?其实很简单,
在val关键字前面加上const关键字。
即:
const val NUM_A = 6
其特点:const只能修饰val,不能修饰var
声明常量的三种正确方式
- 在顶层声明
- 在object修饰的类中声明,在kotlin中称为对象声明,它相当于Java中一种形式的单例类
- 在伴生对象中声明
// 1. 顶层声明
const val NUM_A : String = "顶层声明"
// 2. 在object修饰的类中
object TestConst{
const val NUM_B = "object修饰的类中"
}