Java和Kotlin的對(duì)比學(xué)習(xí)
Day_1
-
構(gòu)造函數(shù)
- 為什么要有構(gòu)造函數(shù)
Java和Kotlin都是面對(duì)對(duì)象的語(yǔ)言,當(dāng)我們抽象出一個(gè)類(lèi)之后,必須先要產(chǎn)生一個(gè)具體化的對(duì)象,再對(duì)這個(gè)具體的對(duì)象進(jìn)行操作才能完成某種功能。**構(gòu)造函數(shù)便是是用來(lái)產(chǎn)生對(duì)象的**。- Java和Kotlin構(gòu)造函數(shù)的寫(xiě)法和區(qū)別
> * Java > > 1. 定義一個(gè)Person類(lèi) > 2. 分別定義一個(gè)無(wú)參和一個(gè)有參的構(gòu)造函數(shù) > > > > 調(diào)用Person類(lèi)的構(gòu)造函數(shù)時(shí),會(huì)向上尋找Object類(lèi)(所有類(lèi)的超類(lèi))實(shí)現(xiàn)它的所有方法,完成構(gòu)造方法的實(shí)現(xiàn) > > 3.若Student類(lèi)繼承Person類(lèi),構(gòu)造函數(shù)寫(xiě)法如下 > > > > 調(diào)用子類(lèi)構(gòu)造函數(shù)時(shí)會(huì)向上尋找父類(lèi)構(gòu)造函數(shù)再向上尋找所有類(lèi)的最高級(jí) Object類(lèi)的構(gòu)造方法 > > * Kotlin > > > * 主構(gòu)造函數(shù) > >> > 1. Kotlin的主構(gòu)造函數(shù)寫(xiě)在函數(shù)體前面,constructor可省略,但若有權(quán)限修飾符修飾或者構(gòu)造函數(shù)有參數(shù)時(shí)不可省略 > > > >> > > > 2. 若子類(lèi)繼承父類(lèi)時(shí) > > > > > > > > > * 父類(lèi)打開(kāi) > > > > > >> > > > > > Kotlin默認(rèn)所有的非抽象類(lèi)是不可繼承的,因此,若Student類(lèi)想要繼承Person類(lèi)即子類(lèi)想要繼承非抽象類(lèi),必須先將父類(lèi)打開(kāi)**open** > > > > > > * 子類(lèi)繼承父類(lèi)的構(gòu)造函數(shù) > > > > > >> > > > > > 子類(lèi)繼承父類(lèi)也必須繼承父類(lèi)的構(gòu)造函數(shù),若父類(lèi)狗哦早函數(shù)有形參,則子類(lèi)的構(gòu)造函數(shù)也必須含有相同類(lèi)型的形參,產(chǎn)生對(duì)象的時(shí)候給子類(lèi)賦值傳遞給父類(lèi)。 > > > > > > 為什么要繼承父類(lèi)的構(gòu)造函數(shù)? 當(dāng)Student類(lèi)的主構(gòu)造函數(shù)初始化時(shí)會(huì)調(diào)用Person類(lèi)的無(wú)參構(gòu)造函數(shù)。當(dāng)Person類(lèi)的主構(gòu)造函數(shù)有兩個(gè)參數(shù)時(shí),需要兩個(gè)參數(shù),所以我們給Student類(lèi)定義含有兩個(gè)參數(shù)的主構(gòu)造函數(shù),并將參數(shù)傳遞給Person類(lèi)構(gòu)造函數(shù) > > > > > > 3. 初始化塊(構(gòu)造函數(shù)產(chǎn)生對(duì)象時(shí)同時(shí)進(jìn)行初始化塊里的命令) > > > > > > > > > > > > > > > > > > > > 由于Kotlin中主構(gòu)造函數(shù)是沒(méi)有方法體的,因此Kotlin提供了一個(gè)init邏輯體,你可以把主構(gòu)造函數(shù)的所有邏輯寫(xiě)在里面。 > > > > > > > > * 次構(gòu)造函數(shù) > > > > 1. 任何一個(gè)類(lèi)只有一個(gè)主構(gòu)造函數(shù),但可以有很多個(gè)次構(gòu)造函數(shù) > > 2. 次構(gòu)造函數(shù)可以實(shí)例化一個(gè)對(duì)象,但是它有函數(shù)體 > > 3. 當(dāng)一個(gè)類(lèi)既有主構(gòu)造函數(shù)又有次構(gòu)造函數(shù)時(shí),所有次構(gòu)造函數(shù)必須繼承主構(gòu)造函數(shù)
-
遍歷
Java
- for-i
- (forEach)加強(qiáng)for循環(huán)
- toString(數(shù)組)
image.pngfor-i,(forEach)加強(qiáng)for循環(huán),toString都可用于數(shù)組和集合的遍歷,它們有哪些區(qū)別呢? for-i在遍歷數(shù)組時(shí),關(guān)注元素在這一數(shù)組的下標(biāo)值,關(guān)注索引值。要求該集合必須通過(guò)一種基于索引的方式訪問(wèn)其元素,不適用于所有集合 加強(qiáng)for循環(huán)實(shí)際上在背后使用的是迭代器。意味著編譯時(shí)Java編譯器會(huì)將增強(qiáng)for循環(huán)語(yǔ)法轉(zhuǎn)換為迭代器構(gòu)造,這種語(yǔ)法更加方便迭代集合 toString toString是利用Arrays工具類(lèi)中的toString靜態(tài)方法將一維數(shù)組轉(zhuǎn)化為字符串的形式輸出Kotlin
- Kotlin中l(wèi)ist集合可以通過(guò)for語(yǔ)句完成
image.pngkotlin的語(yǔ)句比較靈活,若想要間隔取數(shù)還可以使用step語(yǔ)句
初步對(duì)比學(xué)習(xí)小結(jié)
Java和Kotlin都是面向?qū)ο蟮恼Z(yǔ)言,和Java相比:
1.Kotlin語(yǔ)言在面向?qū)ο筮@一點(diǎn)上更加徹底完全。例如:Kotlin中沒(méi)有“int”整型數(shù)據(jù)只有"Int"這個(gè)類(lèi),相當(dāng)于Java中的Interger類(lèi)。
2.kotlin在語(yǔ)法糖的加持下,能夠用更短的代碼實(shí)現(xiàn)更多功能,代碼量越少,出bug的可能性就越低
3.kotlin和Java在基本語(yǔ)法格式上略有不同,如變量和常量的定義,輸入輸出的表達(dá)式語(yǔ)段

