Kotlin學(xué)習(xí)記錄

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


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锻煌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子肴裙,更是在濱河造成了極大的恐慌放棒,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兜辞,死亡現(xiàn)場(chǎng)離奇詭異迎瞧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逸吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)凶硅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人扫皱,你說(shuō)我怎么就攤上這事足绅。” “怎么了韩脑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵氢妈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我段多,道長(zhǎng)首量,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任进苍,我火速辦了婚禮加缘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘觉啊。我一直安慰自己拣宏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布柄延。 她就那樣靜靜地躺著蚀浆,像睡著了一般缀程。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上市俊,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天杨凑,我揣著相機(jī)與錄音,去河邊找鬼摆昧。 笑死撩满,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绅你。 我是一名探鬼主播伺帘,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼忌锯!你這毒婦竟也來(lái)了伪嫁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤偶垮,失蹤者是張志新(化名)和其女友劉穎张咳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體似舵,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脚猾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砚哗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龙助。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛛芥,靈堂內(nèi)的尸體忽然破棺而出提鸟,到底是詐尸還是另有隱情,我是刑警寧澤仅淑,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布沽一,位于F島的核電站,受9級(jí)特大地震影響漓糙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烘嘱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一昆禽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝇庭,春花似錦醉鳖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)壮韭。三九已至,卻和暖如春纹因,著一層夾襖步出監(jiān)牢的瞬間喷屋,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工瞭恰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屯曹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓惊畏,卻偏偏與公主長(zhǎng)得像恶耽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颜启,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容