Kotlin基本语法
了解Kotlin语言的基本语法。
1、包
kotlin文件以.kt结尾,编译文件还是如此只不过在文件名后面加上Kt后缀。这一点和Java不同,Java源文件.java,编译后为.class文件。
1.1、包定义
每个kotlin文件的第一行就用关键字package定义该文件所在的包。
例:
package main
fun main(args: Array<String>) {
println("Hello Kotlin!")
}
1.2、导包
用到其它kotlin文件需要使用关键字import导入,这一点和Java一样。kotlin会默认导入一些核心包,可以直接使用这些包中的方法和类。
kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*
例:
package main
import main.grammar.basic.Basic
fun main(args: Array<String>) {
val value = Basic()
}
2、变量与常量
kotlin中的常量,以及如何定义一个变量。
2.1、常量
常量值又称为字面常量,它是通过数据直接表示。
2.2、可变变量
可变变量用关键字var声明。
①定义的时候赋值,可以自动类型推断,可以省去类型
var b = 2
②只定义一个变量,但不赋值,这时必须指明变量的类型。否则报错:
2.3、不可变变量
不可变变量用关键字val声明。
① 用val关键字定义一个不可变变量。一旦赋值不可再次被复制。
val a: Int = 2
②可以在定义的时候不赋值,这一点和Java不同。
java用final定义不可变变量,必须在定义的时候初始化赋值
private static final int A = 1;
而kotlin可以在定义的时候不赋值,稍后再赋值。但是只能赋值一次,否则报错。
3、null
3.1、变量可空
当某个变量的值可以为null的时候,必须在声明处的类型后添加?来标识该引用可为空
val b: Int? = null
不加?而直接给变量赋null会报错:
3.2、方法返回可空
定义一个函数,一般没有返回值不写(或者写Unit),或者指定返回值类型。函数的定义参考2.1节。
fun compute(a: Int): Int {
return a
}
在函数的返回类型后面加上?表示该函数的返回值可为null。
fun compute(a: Int): Int? {
return a
}
3.3、null检查
①字段后加!!像Java一样抛出空异常
val b: Int? = null
println(b)
运行后打印输出:null
如果变量为空需要抛出异常,就加上!!
val b: Int? = null
println(b!!)
运行后抛出异常:Exception in thread "main" kotlin.KotlinNullPointerException
at main.HelloKotlinKt.main(HelloKotlin.kt:13)
②字段后加?可不做处理返回值为null
val b: Int? = null
println(b?.toString())
运行后,判断到b为空,不调用toString()方法,直接返回null,即不作处理。
③用?:表达式做判空断处理
val b: Int? = null
println(b ?: -1)
运行时,如果b为空,则表达式取值为-1,否则取值b。
3.4、判空
判空这个开发中非常容易见到,到处都是(这也导致代码有点乱)。
val b: Int? = null
if (b != null) {
println(b)
} else {
println("b == null")
}
4、类型检测/转换
使用关键字is判断变量是否是某种类型,相当于Java中的instance关键字。
fun isStringType(obj: Any): Boolean {
return obj is String
}
做过类型判断以后,obj会被系统自动转换为目标类型
还有一个衍生的关键字!is,判断不是某种类型:
obj !is String
提一下Any类型,Kotlin类层次结构的根。 每个Kotlin类都有Any作为超类。相当于Java中的Object类。Any类具体介绍见《Kotlin继承》,Any超类定义如下:
/**
* The root of the Kotlin class hierarchy. Every Kotlin class has [Any] as a superclass.
*/
public open class Any {
public open operator fun equals(other: Any?): Boolean
public open fun hashCode(): Int
public open fun toString(): String
}
学习资料:
Kotlin 基础语法
Java常量:Java常量的定义和分类
Kotlin (一) 复合符号( '?.' '?:' '!!' 'as?' '?' )