1. 變量常量與類(lèi)型
聲明變量
image.png
常用類(lèi)型
image.png
變量類(lèi)型
image.png
image.png
例:
image.png
image.png
查看字節(jié)碼
雙擊Shift --> 輸入 show kotlin bytecode
image.png
類(lèi)型推斷
image.png
例:
image.png
image.png
引用類(lèi)型和基本類(lèi)型
image.png
例:
image.png
2. 條件語(yǔ)句
range表達(dá)式
image.png
例:
image.png
左閉右開(kāi)區(qū)間若皱,也可以這樣使用
image.png
when表達(dá)式
image.png
例:
image.png
String模版
image.png
例:
image.png
3. 函數(shù)
函數(shù)頭
image.png
例:
image.png
函數(shù)參數(shù)
image.png
例:
image.png
image.png
Unit函數(shù)
image.png
例:
image.png
Nothing類(lèi)型
image.png
例:
image.png
反引號(hào)函數(shù)
image.png
例:
image.png
image.png
匿名函數(shù)
image.png
例:
image.png
匿名函數(shù)類(lèi)型與隱式返回
image.png
例:
image.png
匿名函數(shù)參數(shù)
image.png
例:
image.png
it關(guān)鍵字
image.png
例:
image.png
匿名函數(shù)類(lèi)型推斷
image.png
image.png
例:
image.png
image.png
image.png
lambda
image.png
函數(shù)的參數(shù)是另一個(gè)函數(shù)
image.png
例:
image.png
簡(jiǎn)略寫(xiě)法
image.png
image.png
函數(shù)內(nèi)聯(lián)
image.png
例:
image.png
image.png
函數(shù)引用
image.png
例:
image.png
函數(shù)類(lèi)型作為返回類(lèi)型
image.png
例:
image.png
閉包
image.png
Lambda與匿名內(nèi)部類(lèi)
image.png
4. 操作符
Kotlin可空性
image.png
例:
image.png
安全調(diào)用操作符
image.png
例:
image.png
使用let的安全調(diào)用
image.png
例:
image.png
非空斷言操作符
image.png
例:
image.png
空合并操作符
image.png
例:
image.png
異常處理
例:
image.png
先決條件函數(shù)
image.png
例:
image.png
5. 字符串操作
SubString
image.png
例:
image.png
Split
image.png
例:
image.png
Replace
image.png
例:
image.png
字符串比較
image.png
例:
image.png
字符串遍歷
image.png
例:
image.png
6. 數(shù)字類(lèi)型
數(shù)字類(lèi)型安全轉(zhuǎn)換
image.png
image.png
例:
image.png
image.png
Double轉(zhuǎn)Int
image.png
7. 標(biāo)準(zhǔn)庫(kù)函數(shù)
image.png
apply
image.png
image.png
例:
image.png
let
image.png
例:
image.png
run
image.png
image.png
例:
image.png
with
image.png
image.png
also
image.png
例:
image.png
takeIf
image.png
例:
image.png
takeUnless
image.png
例:
image.png
8. 集合
image.png
List創(chuàng)建與獲取元素
image.png
例:
image.png
可變List集合
image.png
例:
image.png
mutator函數(shù)
image.png
例:
image.png
List集合遍歷
image.png
例:
image.png
解構(gòu)語(yǔ)法過(guò)濾元素
image.png
例:
image.png
image.png
Set創(chuàng)建與獲取元素
image.png
例:
image.png
可變Set集合
image.png
例:
image.png
集合轉(zhuǎn)換與快捷函數(shù)
image.png
例:
image.png
數(shù)組類(lèi)型
image.png
例:
image.png
Map集合
image.png
例:
image.png
讀取Map的值
image.png
例:
image.png
遍歷Map
image.png
例:
image.png
可變Map集合
image.png
例:
image.png
9. 類(lèi)
定義類(lèi)和field屬性
image.png
image.png
例:
image.png
image.png
計(jì)算屬性與防范競(jìng)態(tài)條件
image.png
image.png
主構(gòu)造函數(shù)
image.png
image.png
構(gòu)造函數(shù)里定義屬性
image.png
例:
image.png
次構(gòu)造函數(shù)
image.png
image.png
例:
image.png
默認(rèn)參數(shù)
image.png
image.png
初始化塊
image.png
例:
image.png
初始化順序
image.png
例:
image.png
延遲初始化LateInit
image.png
例:
image.png
惰性初始化by lazy
image.png
例:
image.png
初始化陷阱一
image.png
例:
image.png
初始化陷阱二
image.png
例:
image.png
image.png
初始化陷阱三
image.png
例:
image.png
image.png
10. 繼承
open關(guān)鍵字
image.png
例:
image.png
類(lèi)型轉(zhuǎn)換is和as
image.png
例:
image.png
image.png
智能類(lèi)型轉(zhuǎn)換
image.png
例:
image.png
Any超類(lèi)
image.png
例:
image.png
image.png
11. 對(duì)象
對(duì)象聲明
image.png
image.png
例:
image.png
對(duì)象表達(dá)式
image.png
例:
image.png
伴生對(duì)象
image.png
例:
image.png
12. 類(lèi)
嵌套類(lèi)
image.png
image.png
數(shù)據(jù)類(lèi)
image.png
例:
image.png
copy函數(shù)
image.png
例:
image.png
解構(gòu)聲明
image.png
例:
image.png
運(yùn)算符重載
image.png
image.png
例:
image.png
枚舉類(lèi)
image.png
例:
image.png
枚舉類(lèi)定義函數(shù)
image.png
例:
image.png
代數(shù)數(shù)據(jù)類(lèi)型
image.png
例:
image.png
密封類(lèi)
image.png
例:
image.png
image.png
13. 接口和抽象類(lèi)
接口
image.png
例:
image.png
接口的默認(rèn)實(shí)現(xiàn)
image.png
例:
image.png
抽象類(lèi)
image.png
例:
image.png
14. 泛型
泛型類(lèi)
image.png
image.png
例:
image.png
泛型函數(shù)
image.png
例:
image.png
多泛型參數(shù)
image.png
例:
image.png
泛型類(lèi)型約束
image.png
例:
image.png
vararg關(guān)鍵字
image.png
例:
image.png
image.png
[]操作符與get函數(shù)重載
image.png
例:
image.png
image.png
out協(xié)變芽隆、in逆變淤翔、invariant不變
image.png
image.png
image.png
通配符 "?"
image.png
例:
//out
interface Production<out T>{
fun product() : T
}
//in
interface Consumer<in T>{
fun consume(item : T)
}
//invariant
interface ProductionConsumer<T>{
fun product() : T
fun consume(item : T)
}
open class Food
open class FastFood : Food()
class Burger : FastFood()
//生產(chǎn)者
class FoodStore : Production<Food>{
override fun product(): Food {
println("Produce food")
return Food()
}
}
class FastFoodStore : Production<FastFood>{
override fun product(): FastFood {
println("Produce food")
return FastFood()
}
}
class BurgerStore : Production<Burger>{
override fun product(): Burger {
println("Produce food")
return Burger()
}
}
class Everybody() : Consumer<Food>{
override fun consume(item: Food) {
println("Eat food")
}
}
class ModernPeople : Consumer<FastFood>{
override fun consume(item: FastFood) {
println("Eat fastFood")
}
}
class America : Consumer<Burger>{
override fun consume(item: Burger) {
println("Eat burger")
}
}
fun main() {
var production1 : Production<Food> = FoodStore()
//out使得下面不報(bào)錯(cuò)
var production2 : Production<Food> = FastFoodStore()
var production3 : Production<Food> = BurgerStore()
var consumer3 : Consumer<Burger> = America()
//in使得下面不報(bào)錯(cuò)
var consumer1 : Consumer<Burger> = Everybody()
var consumer2 : Consumer<Burger> = ModernPeople()
}
如何使用out和in
image.png
reified關(guān)鍵字
image.png
例:
class MagicBox<T : Human>(){
//隨機(jī)產(chǎn)生一個(gè)對(duì)象,如果不是指定類(lèi)型就調(diào)用備份函數(shù)產(chǎn)生一個(gè)
// fun <T> randomOrBackup(backup: () -> T) : T{
// val items = listOf(
// Boy("Jack", 20),
// Man("John",35)
// )
//
// val random = items.shuffled().first()
// return if(random is T){
// random
// }else{
// backup()
// }
// }
//reified關(guān)鍵字要和內(nèi)聯(lián)一起使用,保存泛型類(lèi)型不被擦除
inline fun <reified T> randomOrBackup(backup: () -> T) : T{
val items = listOf(
Boy("Jack", 20),
Man("John",35)
)
val random = items.shuffled().first()
println(random)
return if(random is T){
random
}else{
backup()
}
}
}
open class Human(val age : Int)
class Boy(val name : String, age : Int) : Human(age){
override fun toString(): String {
return "Boy(name='$name', age='$age')"
}
}
class Man(val name : String, age : Int) : Human(age){
override fun toString(): String {
return "Man(name='$name', age='$age')"
}
}
fun main() {
val box1 : MagicBox<Man> = MagicBox()
val subject = box1.randomOrBackup {
Man("Jimmy", 38)
}
println(subject)
}
image.png
image.png
15. 擴(kuò)展函數(shù)
定義擴(kuò)展函數(shù)
image.png
例:
image.png
超類(lèi)上定義擴(kuò)展函數(shù)
image.png
例:
image.png
泛型擴(kuò)展函數(shù)
image.png
image.png
例:
image.png
擴(kuò)展屬性
image.png
例:
image.png
可空類(lèi)擴(kuò)展
image.png
例:
image.png
infix關(guān)鍵字
image.png
例:
image.png
定義擴(kuò)展文件
image.png
例:
image.png
image.png
重命名擴(kuò)展
image.png
例:
image.png
apply函數(shù)原理
image.png
image.png
DSL
image.png
16. 函數(shù)式編程
定義
image.png
函數(shù)類(lèi)別
image.png
變換函數(shù)map
image.png
image.png
image.png
image.png
例:
image.png
變換函數(shù)flapMap
image.png
例:
image.png
過(guò)濾函數(shù)filter
image.png
image.png
image.png
例:
image.png
合并函數(shù)zip
image.png
image.png
例:
image.png
合并函數(shù)fold
image.png
例:
image.png
為何使用函數(shù)式編程
image.png
17. 序列
產(chǎn)生序列
image.png
image.png
image.png
使用序列產(chǎn)生素?cái)?shù)
image.png
例:
image.png
18. 互操作與可空性
image.png
例:
image.png
image.png
類(lèi)型映射
image.png
例:
image.png
image.png
屬性訪問(wèn)
image.png
19. 交互注解
@JvmName
image.png
例:
image.png
image.png
@JvmField
image.png
例:
image.png
image.png
image.png
@JvmOverloads
image.png
例:
image.png
image.png
@JvmStatic
image.png
例:
image.png
image.png
Throws
image.png
例:
image.png
image.png
函數(shù)類(lèi)型操作
image.png
例:
image.png
image.png
20. 全完整工程已上傳
Github:https://github.com/huliwei-afk/KotlinProj