- 可讀剧罩、可讀寫、延遲初始化
var //可讀寫
val //只讀
lateinit //晚一點再進行初始化座泳,會被聲明為可空類型
//可空類型惠昔,不可空類型
//平臺類型
java中是通過注解實現(xiàn)可空類型和不可空類型(Nullable、NonNull)
var name: String? = null // ? 聲明一個可空類型的變量
name?.length() // ? 安全調(diào)用挑势,判空
name!!.length() // !! 強制調(diào)用镇防,不判空
//Java中int float double long
對應kotlin->Int Float Double Long 不可空類型
//java中Int Float Double Long
對應kotlin->Int? Float? Double? Long? 可空類型
//聲明一個延遲初始化的不可空變量
private lateinit name : String
靜態(tài)類型編程語言:一個變量的類型一旦確定了就不能改變
動態(tài)類型編程語言:一個變量的類型可以隨時改變。python\js\groovy
- 靜態(tài)方法
//1潮饱、kotlin中沒有static關鍵字
//2来氧、kotlin中靜態(tài)方法寫法,文件中直接定義方法和變量,也叫頂層函數(shù)啦扬,包級函數(shù)
// a)java調(diào)用kotlin靜態(tài)方法--->類名Kt.方法名()
// b) @file:JvmName("AAA")修飾后中狂,在Java中可以使用AAA.方法名()調(diào)用。需要寫在文件最上面扑毡,package之前
//object創(chuàng)建類并創(chuàng)建其對象
//object修飾的類胃榕,可以認為變量和方法都會被定義為靜態(tài)的。其實是創(chuàng)建了CacheUtils的對象
object CacheUtils{
}
//在kotlin中調(diào)用使用CacheUtils.getXX()
//在Java中調(diào)用使用CacheUtils.INSTANCE.getXX()
//該方法其實是創(chuàng)建了這個類的單例對象去使用的瞄摊。創(chuàng)建匿名內(nèi)部類也使用object關鍵字
//非object的類里面使用
class MyApplication{
companion object {
fun getXX():String{}
}
}
//在Java中使用XX.Companion.
companion object {
//加上 @JvmStatic可以在Java類里面使用類名.方法名()調(diào)用
@JvmStatic
fun getXX():String{}
}
- 類型判斷和轉(zhuǎn)換
is instanceof
as 強轉(zhuǎn)
AAA::class kotlin的class
AAA::class.java java的class
void對應Unit
Object對應Any
- switch case
when Java中switch的高級版勋又,支持表達式
when (code){
in 200..299 ->{}
}
- 構(gòu)造方法
construct(name:String) String super(name){}
- get set方法
set
//保證只生成一個公開的成員變量,而不是生成set get方法
@JvmField
var username:String? = null
- 數(shù)組
創(chuàng)建數(shù)組
arrayOf("a","b","c") 基本類型會自動裝箱换帜,因此基本類型不使用
intArrayOf(1,2,3)
數(shù)組長度size
arrayOf()
intArrayOf()
- 枚舉
- 編譯器常量
class XXX {
companion object {
//使用const關鍵字楔壤,類似于java中的static final String
private val const NAME = "張三"
}
}
- List、Map等集合類
//要么顯示的聲明類型
val list:ArrayList<String> = ArrayList()
//要么使用類型推斷
val list = ArrayList()
//要么使用類型推斷
val list = arrayListOf<String>()
//要么使用
val list = mutableListOf<String>()
//要么使用
val list:MutableList<String> = ArrayList()
//不能使用List惯驼,因為kotlin中List是不可修改的蹲嚣,沒有add函數(shù)的
val list:List<String> = ArrayList()
//遍歷
for (name : in list) {
}
- 內(nèi)部類
//非靜態(tài)內(nèi)部類,需要inner修飾符
inner class XX {}
//靜態(tài)內(nèi)部類
class XXX {}
- internal
當前模塊內(nèi)可見祟牲,可以使某個public的類端铛,僅在當前module內(nèi)被訪問到,其他moudle內(nèi)訪問不到
某些類疲眷,希望在當前module內(nèi)到處哭訪問,但是又不希望外部mudule訪問您朽。
- 內(nèi)部類使用外部類this對象
internal class Outer {
internal inner class Inner {
var outer: Outer = this@Outer
}
}
- 受檢異常
Kotlin 不需要使? try-catch 強制捕獲異常
- 聲明接?/抽象類/枚舉/注解
// 聲明抽象類
abstract class
// 聲明接?
interface
// 聲明注解
annotation class
// 聲明枚舉
enmu class
- 編譯期常量
在靜態(tài)變量上加上 const 關鍵字變成編譯期常量
- 標簽
在 Java 中通過 「 類名.this 例如 Outer.this 」 獲取?標類引?
在 Kotlin 中通過「 this@類名 例如 this@Outer 」獲取?標類引?
- 遍歷
for(item in items)
- 嵌套類
在 Kotlin 當中狂丝,嵌套類默認是靜態(tài)內(nèi)部類 (不持有外部類引?)
通過 inner 關鍵字聲明為普通內(nèi)部類 (內(nèi)部使?外部對象時就會持有外部類引?)
- 可?性修飾符
默認的可?性修飾符是 public
新增的可?性修飾符 internal 表示當前模塊可?
- open/final
Kotlin 中的類和函數(shù),默認是被 final 修飾的 ( abstract 和 override 例外)
- 注釋
注釋中可以在任意地?使? [] 來引??標哗总,代替 Java 中的 @param @link 等几颜。
- ?空斷?
可空類型強制類型轉(zhuǎn)換成不可空類型可以通過在變量后?加上 !! ,來達到類型轉(zhuǎn)換讯屈。