2022-05-07

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ù)
    > 
    > ![image.png](https://upload-images.jianshu.io/upload_images/28043776-1709fb653ee9fc32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    > 
    > 調(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ě)法如下
    > 
    > ![image.png](https://upload-images.jianshu.io/upload_images/28043776-4191907d0bbedf27.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    > 
    > 調(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í)不可省略
    > > 
    > >![image.png](https://upload-images.jianshu.io/upload_images/28043776-7aae015fca68b618.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    > > 
    > > 2.  若子類(lèi)繼承父類(lèi)時(shí)
    > >     
    > >  
    > >     
    > >     > *   父類(lèi)打開(kāi)
    > >     > 
    > >     >![image.png](https://upload-images.jianshu.io/upload_images/28043776-0918ec9763ca38b9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    > >     > 
    > >     > 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ù)
    > >     > 
    > >     >![image.png](https://upload-images.jianshu.io/upload_images/28043776-c299ed29d27233aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    > >     > 
    > >     > 子類(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)行初始化塊里的命令)
    > >     
    > >     
    > >     
    > >    
    > >     
    > >    ![image.png](https://upload-images.jianshu.io/upload_images/28043776-23a16eb40faffc67.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    > >     
    > >     
    > >     
    > >     由于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

    1. for-i
    ![image.png](https://upload-images.jianshu.io/upload_images/28043776-d404ea0302121d5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    1. (forEach)加強(qiáng)for循環(huán)
    ![image.png](https://upload-images.jianshu.io/upload_images/28043776-76502415f708b0fc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    1. toString(數(shù)組)
    image.png
    for-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.png

    kotlin的語(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ǔ)段

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 相信很多同學(xué)都會(huì)有這樣的感受,前三天剛剛復(fù)習(xí)的知識(shí)點(diǎn),今天問(wèn)的時(shí)候怎么就講不出個(gè)所以然了呢? 本文的目的就是...
    Y__W閱讀 357評(píng)論 0 0
  • 11.裝飾模式(Decorator Pattern) 定義:Attach additional responsib...
    Mo_ham_med閱讀 291評(píng)論 0 1
  • 在 2019 年 Google I/O 大會(huì)上,Google 宣布了今后 Android 開(kāi)發(fā)將優(yōu)先使用 Kotl...
    4e70992f13e7閱讀 1,490評(píng)論 0 4
  • # 反射 ## Java反射機(jī)制定義 Java反射機(jī)制是指在運(yùn)行狀態(tài)中, 對(duì)于任意一個(gè)類(lèi),都能夠知道這個(gè)類(lèi)的所有屬...
    直覺(jué)00_57閱讀 276評(píng)論 0 0
  • kotlin基礎(chǔ)知識(shí) 基礎(chǔ)語(yǔ)法 kotlin中的特殊語(yǔ)法 object創(chuàng)建匿名內(nèi)部類(lèi)的寫(xiě)法kotlin中聲明單例的...
    大澤苦哈哈閱讀 370評(píng)論 1 0

友情鏈接更多精彩內(nèi)容