kotlin与java部分基础类比

1.变量声明:
有var和val两个关键字来声明,其中val是只读关键字相当于java的final
声明的写法比如 var name: String = “asan” 和 var name = "asan"的作用是一样的,既声明了一个值为“asan”的字符串name。
如果声明的时候不能明确变量的值,需要这么写:lateinit var name: String,在之后的代码中必须有name = "asan"的赋值代码,不如无法通过编译。或者可以
写成var name: String? = null,这种写法在后面代码中就算没有给name赋值也可以编译通过,至于String后面的“?”就是kotlin的空检测。
val声明的变量必须赋值且只能赋值一次,因此可以与const(编译期常量)一起组合使用,达到java静态变量的效果。

2.空安全:
相比java代码,kotlin对于空指针的检测非常大的提升了开发效率和安全性,关键在于?和!!的使用。
kotlin会在编译时检测代码的空安全,
例如:var a : String = “”
a = null →这句代码就会直接报错,因为声明的时候就指定了a不能为空。既然a绝对不为空,那么我们就可以放心的使用a,比如作为参数调用方法,或者直接使用String类的方法
a.length,a.split等等。
写成 :var b: String? = “”
b = null -> 这样写就没有问题,但b就有为空的可能。因此无法直接调用b.length这种方法,需要写成b?.length,这里的?会检测b是否为空,不为空则运行.length方法否则结束。
这就好比写成if(b != null)b.length 。同样还能写成b!!.length,也可以通过编译,!!的意思是开发者确认b肯定不为空跳过了编译检测。
如上例子中 var b: String? = “”
var size1 = b!!.length ->写在这里可以通过编译也不会在运行时报错
b = null
var size2 = b!!.length →写在这里可以通过编译但会在运行时报错
而两个地方的代码都可以写成 var size = b?.length,编译和运行时都不会出错。

3.条件语句:
if语句与java差别不大,不过有一个常用的类比表达式比如int a= b > c ? b : c,在kotlin中只能用if表达式写成var a = if(b>c) b else c
for语句与java相同,都是迭代的功能,至于for语句判断条件则在集合和列表中再谈。
while和do while也与java相同
when语句取代了java的switch语句并且更加强大。既可以被当做表达式使用也可以被当做语句使用。如果它被当做表达式, 符合条件的分支的值就是整个表达式的值,如果当做语句使用, 则忽略个别分支的值。switch对于判断条件比较苛刻,但是when表达式只需要其他的表达式为true则可以执行。
比如:

when{
 true → print""
 else → print “”
 }

4.接口:
接口与java实现方式是差不多的,但是有很重要的一点区别。kotlin的接口是允许方法实现的,在类继承接口的时候会默认已实现的方法,也可以重写方法。接口中也可以定义一个抽象的变量,在实现的类中再进行赋值。
定义一个接口

interface ExampleInterface {
 val a: Int //抽象变量
 fun f1() //没有实现的方法
 fun f2() { //已经实现的方法
 print("")
 }
 }

实现接口

class Example : ExampleInterface {
 override val a: Int = 1 //只有一次赋值的机会
 override fun f1() { //等待实现的方法
 }
 override fun f2() { //默认不需要实现,也可以重写
 super.f2()
 }
 }