1.没有“;”java
你会发现不用再去写';'了,我还傻傻的去敲,会报错。安全
2.重要的“:” 功能大大提高ide
功能1:函数
定义变量类型:this
var name:String="my name" //变量name为String类型spa
功能2:指针
定义参数的类型:对象
fun makeTool(id:Int){ //参数id为Int类型继承
}接口
功能3:
定义函数的返回值:
fun getAddr(id:Int):String{ //返回值为String类型
}
功能4:
声明类/接口的继承
class KotlinActivityUI :AnkoComponent<KotlinActivity>{//继承AnkoComponent接口
功能5:
使用Java类
val intent = Intent(this, MainActivity::class.java) //须要用::来使用Java类,注意是两个
三、没有new啦
Kotlin实例化一个对象时不须要new关键字
var list=ArrayList()
4.变量、常量、类型推断
变量var,常量val,能够自动判断的
5.初始化和延迟加载
Kotlin里必须为变量赋值,
若是只写一个变量,却不赋值,像下面这样:var name
编译器会报错,提示你未初始化,你必须赋值为0或者null,或者别的什么值。
不过,咱们有时候就是不能在定义变量时就初始化它,
好比在Android中咱们常常预约义一个View控件而不初始化,
可是直到onCreate或onCreateView时才初始化它。
针对这种状况,Kotlin提供了懒加载lazy机制来解决这个问题,
在懒加载机制里,变量只有在第一次被调用时,才会初始化,代码须要这样写
private val mt:TextView by lazy{ //这时候不初始化
findViewById(R.id.kt) as TextView
}
override fun onCreate(saveInstanceState:Bundle?){
super().onCreat(saveInstanceState)
setContentView(R.layout.activity_main)
mt.text="abc" //这里才是
}
可是lazy只适用于val对象,对于var对象,须要使用lateinit,原理是相似的,只是代码须要这样写
lateinit var sname:String
fun initSs(name:String)
sname=name
6.空指针安全
在Kotlin里,能够用“?”表示能够为空,也能够用“!!”表示不能够为空。
空指针安全并非不须要处理空指针,你须要用“?”声明某个变量是容许空指针的,例如:
var num:Int?=null
声明容许为空时,不能使用类型推断,必须声明其数据类型
空指针虽然安全了,但对空指针的处理仍是要视状况而定,有时候不处理,有时候作数据检查,有时候还须要抛出异常,这三种状况能够这样写:
val v1 =num?.toInt() //不作处理返回 null
val v2 =num?.toInt() ?:0 //判断为空时返回0
val v3 =num!!.toInt() //抛出空指针异常(用“!!”表示不能为空
7.定义函数
在Kotlin语法里,定义函数的格式是这样的
fun 方法名(参数名:类型,参数名:类型...) :返回类型{
}
因此,通常来讲,函数是这样写的
fun getAddress(id:Int,name:String):String{
return"got it"
}
因为Kotlin能够对函数的返回值进行类型推断,因此常常用“=”代替返回类型和“return”关键字,上面这段代码也能够写成
fun getAddress(id:Int,name:String)={ //用“=”代替return,返回String类型则交给类型推断
"got it" //return被“=”代替了
}
若是函数内代码只有一行,咱们甚至能够去掉{}
fun getAddress(id:Int,name:String)="got it" //去掉了{}
}
函数也容许空指针安全,在返回类型后面增长“?”便可
fun getAddress(id:Int,name:String) :String?="got it"
有时候,函数的返回类型是个Unit,这其实就是Java中的void,表示没有返回
fun addAddress(id:Int,name:String):Unit{ //至关于java的void
}
不过,在函数无返回时,通常不写Unit
fun addAddress(id:Int,name:String){ //至关于java的void
}
8.用is取代了instance of
代码很简单
if(obj is String)...
9.in、区间和集合
Kotlin里有区间的概念,例如1..5表示的就是1-5的整数区间
能够用in判断数字是否在某个区间
if(x in 1..5){ ...//检查x数值是否在1到5区间
能够用in判断集合中是否存在某个元素
if(name in list){...//检查list中是否有某个元素(比Java简洁多了)
能够用in遍历整个集合
for(i in 1..5){ ...//遍历1到5
for(item in list){...//遍历list中的每一个元素(至关于Java的for(String item : list))
另外,in在遍历集合时功能至关强大:
在遍历集合时,能够从第N项开始遍历
for(i in 3..list.size-2){...至关于for (int i = 3; i <= list.size()-2; i++)
能够倒序遍历
for(i in list.size downTo 0) {...至关于for (int i = list.size(); i >= 0; i--)
能够反转列表
for(i in (1..5).reversed())
能够指定步长
for(i in 1.0..2.0 step 0.3) //步长0.3
Kotlin里的集合还都自带foreach函数
list.forEach {...