Kotlin学习历程三:kotlin中的变量、常量和注释
一、变量
kotlin中变量的声明和java有很大区别,必须使用var或var关键字。
var表示:可变变量,可读也可写,相当于java中的普通的变量。
val表示:不可变变量,可读但是不可写,相当于java中用final修饰的变量。
1.1 基础用法:
格式:关键字(var/val) 变量名: 数据类型 = xxx
- 其中。
var
和val
是Kotlin
中定义变量必须使用的关键字。 - 每一行代码的结束可以省略掉分号
;
,这一点是和Java
不同的地方。当然,第一次写可能会有一点不习惯。 -
print()
与println()
都是打印方法,后者打印完成之后会换一行。此两个方法和Java
的打印方法是一模一样的。 -
$
符号表示引用的意思。这里理解为字符串模板,在$
符号后面加上变量名或大括号中的表达。
1.2 在类中声明以及声明可空变量
1.2.1 类中声明变量
1.1中是演示变量的基础定义,而且只有在顶层声明的情况下是可以不用实例化的。但是在实际开发当中,一般都是在一个类中去定义变量,这种情况被称为声明类的属性。
其特点如下:必须初始化,如果不初始化,需使用lateinit关键字
1.2.2 声明可空变量
在Java中,当我们声明一个变量不必关心这个变量是否为空,在使用这个变量的时候几乎上都会判断其是否为空增加程序的安全性。这样的习惯是极好的。但是无形中也增加了一定的代码量。有时候这样的代码还极有可能是无用的废代码。然而在Kotlin中当我们可以确定这个属性或变量一定不为空时,我们就用上面讲解到的去定义变量。否则就把它声明为可空变量。
可空变量的特点:
- 在声明的时候一定用标准的声明格式定义。不能用可推断类型的简写。
- 变量类型后面的?符号不能省略。不然就和普通的变量没区别了。
- 其初始化的值可以为null或确定的变量值。
定义格式:var/val 变量名 : 类型? = null/确定的值
1.3 后期初始化和延迟初始化
在1.2节中,当在类中定义一个变量(属性)的时候是必须初始化的。这在平时的实际开发中能满足大部分的需求。但是还是有一些特殊的场景中不能满足。比如说:Android开发中对组件变量的声明与赋值,以及在使用Dagger2注解变量等。这就需要Kotlin中特有的后期初始化属性来满足这个需求了。当然这里还为大家讲解延迟初始化,在实际的开发中也是很有用处的。
1.3.1 后期初始化属性
声明后期初始化属性的特点:
- 使用lateinit关键字
- 必须是可读且可写的变量,即用var声明的变量
- 不能声明于可空变量。
- 不能声明于基本数据类型变量。例:Int、Float、Double等,注意:String类型是可以的。
- 声明后,在使用该变量前必须赋值,不然会抛出UninitializedPropertyAccessException异常。
// 声明组件
private lateinit var mTabLayout : TabLayout
lateinit var a : Int // 会报错。因为不能用于基本数据类型。
// 赋值
mTabLayout = find(R.id.home_tab_layout)
// 使用
mTabLayout.setupWithViewPager(mViewPager)
1.3.2 延迟初始化属性
所谓延迟初始化即:指当程序在第一次使用到这个变量(属性)的时候在初始化。
声明延迟初始化属性的特点:
- 使用lazy{}高阶函数,不能用于类型推断。且该函数在变量的数据类型后面,用by链接。
- 必须是只读变量,即用val声明的变量。
// 声明一个延迟初始化的字符串数组变量
private val mTitles : Array<String> by lazy {
arrayOf(
ctx.getString(R.string.tab_title_android),
ctx.getString(R.string.tab_title_ios),
ctx.getString(R.string.tab_title_h5)
)
}
// 声明一个延迟初始化的字符串
private val mStr : String by lazy{
"我是延迟初始化字符串变量"
}
二、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中一种形式的单例类
- 在伴生对象中声明
三、Kotlin中的注释
Kotlin中的注释几乎和Java没什么区别。唯一的区别在于Kotlin中的多行注释中可以嵌套多行注释,而Java中是不能的。
3.1 单行注释
两个斜杠开头表示单行注释(//)
3.2 多行注释(块注释)
以斜杠加星号开头(/*),同时以星号加斜杠结尾(*/),中间这是要注释的代码块!
3.3 多行注释嵌套
kotlin中块注释的级联使用,其实个人觉得块注释的嵌套使用的意义不大,不过从视觉上确实能给人一种层次感
/*
第一层块注释
/*
第二层块注释
/*
第三层快注释
这种注释方式在java中是不支持的,但是在kotlin中是支持的。算是一个亮点吧(貌似意义不大)。
*/
*/
*/
注:在Java中使用上面的注释代码直接报错。
3.4 类注释、方法注释
和Java是一样的
/**
* 3. 方法的注释(同java一样)
*/
fun testMethodNote(){
}
上一篇: Java SE 第十讲 面向对象_封装
下一篇: 第十讲:重载