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 {...