包聲明
package xxx.xxx.xx
如:
package com.talent.kotlin
引入類
與Java沒啥區(qū)別
import java.util.*
有多個包會默認導入到每個 Kotlin 文件中:
kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*
函數(shù)定義
一般函數(shù)
函數(shù)定義使用關(guān)鍵字 fun簇抵,參數(shù)格式為
fun METHOD_NAME(PARAM1_NAME:PARA1_TYPE,PARA2_NAME:PARA2_TYPE):RETURN_TYPE{
METHOD_BODY
}
例如:
fun testMethod(a:Int,b:Int):Int{
return a+b;
}
表達式作為函數(shù)體钻哩,返回類型自動推斷:
fun testMethod(a: Int, b: Int) = a + b
注 如果方法為public ,則返回類型不可省略环壤,必須明確寫出瀑粥。如
public fun testMethod(a: Int, b: Int): Int = a + b
如果無返回值類型,Java中用的是Void衡便,Kotlin中則用Unit表示乞巧,同樣可缺省,例如:
fun testMethod3(a:Int,b:Boolean):Unit{
print("test")
}
或
fun testMethod3(a:Int,b:Boolean){
print("test")
}
可變長參數(shù)函數(shù)
在Java中可變長參數(shù)一般這樣寫
public void output(String...args){
for (String i:args){
System.out.print(i);
}
}
在Kotlin中則需寫成這樣
fun output(vararg args: String) {
for (i in args) {
print(i)
}
}
可以看到它在參數(shù)名之前加了一個關(guān)鍵字 vararg
匿名函數(shù)
先看下面一段代碼
fun outPutSum(args: Array<String>) {
val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
println(sumLambda(1,2)) // 輸出 3
}
它其實等同于Java中的這段代碼
interface ISum {
int sum(int a,int b);
}
public void outPutSum(){
int sum = new ISum(){
@Override
public int sum(int a,int b) {
return a+b;
}
}.sum(1,2);
System.out.print(sum);
}
很明顯簡潔了很多器钟。如果對lambda語法不能快速理解津坑,可以試著這樣想
val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
這不就是我們之前說的定義不可變變量嗎?
val <標識符> : <類型> = <初始化值>
也就是說
- (Int, Int) -> Int 整個就是sumlambda的類型傲霸〗澹可以暫且把它理解為函數(shù)類型,即由函數(shù)返回的一個類型 昙啄。
- {x,y -> x+y}則為sumlambda初始化值穆役,實際上則是函數(shù)的具體實現(xiàn)。
一些特別的參數(shù)類型
前文中有提到梳凛,Java中無返回類型數(shù)據(jù)時耿币,用關(guān)鍵字void,其包裝類為Void
而在Kotlin中則是使用Unit
- 空數(shù)據(jù)類型 Unit
- 任意數(shù)據(jù)類型 Any
- 數(shù)組數(shù)據(jù)類型 Array
注釋
// 這是一個單行注釋
/* 這是一個多行的
塊注釋。 */
與 Java 不同, Kotlin 中的塊注釋允許嵌套韧拒。
NULL檢查機制
!! 表示為空情況下拋出空異常
? 表示變量可能為空
?. 為空情況下返回null
-
?. ?: 為空下處理
//類型后面加?表示可為空 var age: String? = "23" //拋出空指針異常 val ages = age!!.toInt() //不做處理返回 null val ages1 = age?.toInt() //age為空返回-1 val ages2 = age?.toInt() ?: -1
當一個引用可能為 null 值時, 對應(yīng)的類型聲明必須明確地標記為可為 null淹接。
fun getStringLength(obj:Any):Int?{
if(obj is String){
return obj.length;
}
return null;
}
這個時候,把上面返回類型 Int后的?去掉叛溢,IDE是會變錯的塑悼。
類型檢測及自動類型轉(zhuǎn)換
使用關(guān)鍵字is ,類似于Java的 instanceof
if(obj is String){
return obj.length;// obj 是String類型
}
或
if(obj !is String){
return null;// obj 不是String類型
}
甚至
if (obj is String && obj.length > 0)
return obj.length
區(qū)間
- .. 或rangeTo 輔以 in 或 !in表示閉區(qū)間
- until 排除區(qū)間的結(jié)束元素
- step 關(guān)鍵字表示步長
下面是一些demo
fun testForRecycle(){
for (i in 1..4){
print(i)//輸出1楷掉,2厢蒜,3,4
}
for (i in 4..1){
print(i)//無輸出
}
for (i in 4 downTo 1){
print(i)//輸出 4,3斑鸦,2愕贡,1
}
for (i in 1.rangeTo(4)step 2){
print(i)//輸出 1,3
}
for (i in 4 downTo 1 step 2){
print(i)//輸出4 巷屿,2
}
for (i in 1 until 4 ){
print(i)//輸出 1颂鸿,2,3
}
for (i in 1 until 10 step 2){
print(i)//輸出 1,3,5,7,9
}
}