- Kotlin進(jìn)階實(shí)戰(zhàn)
- 沈哲 易龐宙編著
- 605字
- 2022-07-27 18:28:03
2.2.1 構(gòu)造函數(shù)和初始化塊
在Kotlin中,類的構(gòu)造函數(shù)可以包括一個(gè)主構(gòu)造函數(shù)和N個(gè)次構(gòu)造函數(shù)。
1.主構(gòu)造函數(shù)
Kotlin的主構(gòu)造函數(shù)可以借助初始化塊對(duì)代碼進(jìn)行初始化。Kotlin使用init關(guān)鍵字作為初始化塊的前綴。

對(duì)上述代碼進(jìn)行反編譯后會(huì)發(fā)現(xiàn),init初始化塊的代碼會(huì)包含在無參數(shù)的構(gòu)造函數(shù)中,如圖2-3所示。

圖2-3 init初始化塊反編譯后
上述Kotlin代碼等價(jià)于使用constructor關(guān)鍵字作為構(gòu)造函數(shù)的函數(shù)名,不過此時(shí)可以省略函數(shù)名。

主構(gòu)造函數(shù)的特性:
· 主構(gòu)造函數(shù)可以省略constructor,無論在主構(gòu)造函數(shù)中是否包含參數(shù)。
· 初始化塊可以有多個(gè),調(diào)用主構(gòu)造函數(shù)時(shí)會(huì)按照初始化塊的順序執(zhí)行。
2.次構(gòu)造函數(shù)
Kotlin的次構(gòu)造函數(shù)同樣使用constructor作為函數(shù)名,但不能省略函數(shù)名。次構(gòu)造函數(shù)可以包含代碼,調(diào)用次構(gòu)造函數(shù)時(shí)必須調(diào)用主構(gòu)造函數(shù),這一點(diǎn)非常重要。

執(zhí)行結(jié)果如下:
hello hello world this is foo function
如果類中出現(xiàn)多個(gè)初始化塊,就會(huì)按照順序依次執(zhí)行。實(shí)際上,多個(gè)初始化塊的代碼會(huì)按照順序合并到主構(gòu)造函數(shù)中。

執(zhí)行結(jié)果:
hello1 hello2 hello3 hello world this is foo function
通過反編譯上述代碼,能夠更清晰地了解次構(gòu)造函數(shù)的調(diào)用方式,如圖2-4所示。

圖2-4 次構(gòu)造函數(shù)反編譯后
次構(gòu)造函數(shù)的特性:
· 類可以擁有多個(gè)次構(gòu)造函數(shù)。
· 主構(gòu)造函數(shù)的屬性可以使用var、val修飾,次構(gòu)造函數(shù)不能使用它們進(jìn)行修飾。
· 每個(gè)次構(gòu)造函數(shù)需要委托給主構(gòu)造函數(shù),調(diào)用次構(gòu)造函數(shù)時(shí)會(huì)先調(diào)用主構(gòu)造函數(shù)以及初始化塊。
所以,類的初始化塊、主構(gòu)造函數(shù)、次構(gòu)造函數(shù)的執(zhí)行順序?yàn)椋侯惖某跏蓟瘔K按先后順序執(zhí)行→類的主構(gòu)造函數(shù)→類的次構(gòu)造函數(shù)。
- Web程序設(shè)計(jì)及應(yīng)用
- Leap Motion Development Essentials
- 程序員面試算法寶典
- 動(dòng)手玩轉(zhuǎn)Scratch3.0編程:人工智能科創(chuàng)教育指南
- 碼上行動(dòng):零基礎(chǔ)學(xué)會(huì)Python編程(ChatGPT版)
- NumPy Essentials
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(第2版)(微課版)
- Android 應(yīng)用案例開發(fā)大全(第3版)
- Haxe Game Development Essentials
- The DevOps 2.5 Toolkit
- Mastering openFrameworks:Creative Coding Demystified
- Visualforce Developer’s guide
- Python機(jī)器學(xué)習(xí)之金融風(fēng)險(xiǎn)管理
- Clojure for Machine Learning
- Building Serverless Web Applications