




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第秒懂Kotlin之Java工程師快速掌握Kotlin的技巧Kotlin是一種在Java虛擬機(jī)上運(yùn)行的靜態(tài)類型編程語(yǔ)言,被稱之為Android世界的Swift,由JetBrains設(shè)計(jì)開(kāi)發(fā)并開(kāi)源。
Kotlin可以編譯成Java字節(jié)碼,也可以編譯成JavaScript,方便在沒(méi)有JVM的設(shè)備上運(yùn)行。
在GoogleI/O2017中,Google宣布Kotlin成為Android官方開(kāi)發(fā)語(yǔ)言。
Kotlin/JVM可以看做是對(duì)改進(jìn)Java的一種積極的嘗試,其試圖改進(jìn)Java編程語(yǔ)言中已知的被廣泛討論的缺點(diǎn)與不足。因?yàn)槲叶嗄昵皬氖逻^(guò)C#的開(kāi)發(fā),初次看到Kotlin,感覺(jué)好多特性C#好多年前就有了。足見(jiàn)Java是多么的傳統(tǒng),不愿意過(guò)多的引入語(yǔ)法糖。
關(guān)于Kotlin與Java的愛(ài)恨情仇此處按下不表,等有機(jī)會(huì)單獨(dú)寫(xiě)一篇相關(guān)文章。本文僅想從Java慣用者的角度給出Kotlin與Java的一些不同點(diǎn),這往往對(duì)Java慣用者迅速掌握Kotlin是至關(guān)重要的。因?yàn)镵otlin是對(duì)Java的一種改進(jìn),其與Java是100%互操作的,所以Java程序員經(jīng)過(guò)短暫的熟悉后往往可以快速入門,進(jìn)而熟練掌握Kotlin。
人類學(xué)習(xí)新事物的一個(gè)很重要的方法就是類比,如果新事物與舊事物相似性非常大,那么類比學(xué)習(xí)的效果會(huì)更加明顯,從Java到Kotlin非常符合這個(gè)特征,以你熟悉的Java來(lái)類比不熟悉的Kotlin將會(huì)事半功倍,讓我們開(kāi)始吧。
本文基于Kotlin1.4.0版本
Kotlin與Java在語(yǔ)法上存在一些差異,不算特別巨大,下面列出了我認(rèn)為最需要適應(yīng)的幾條:
Kotlin中的方法和屬性可以不包含在類中
我們知道,Java中的一切是以class為基礎(chǔ)的,都要在class中,但是Kotlin卻不是。下面的代碼中,方法、屬性以及類共存于同一級(jí),同一個(gè)文件中都是允許的。
varname:String="ShuSheng007"
funsum(x:Int,y:Int):Int{
returnx+y
classStudent{}
Kotlin中語(yǔ)句不需要以;結(jié)束
println("helloworld")
Kotlin中數(shù)據(jù)類型是后置的
//變量聲明時(shí)類型后置
varname:String="ShuSheng007"
//方法參數(shù)及返回值類型后置
funsum(x:Int,y:Int):Int{
returnx+y
}
Kotlin方法使用fun關(guān)鍵字定義
funsum(x:Int,y:Int):Int{
returnx+y
}
Kotlin的類和方法默認(rèn)是publicfinal的
類默認(rèn)不可以被繼承,基類中的方法默認(rèn)不可以被重寫(xiě),如果想要被繼承或者重寫(xiě)需要用open關(guān)鍵字標(biāo)記
//Human類可以被繼承
openclassHuman{
//eat方法可以被overwrite
openfuneat(){
}
Kotlin中類繼承和接口實(shí)現(xiàn)使用:標(biāo)記
//類繼承
classMan:Human(){
overridefuneat(){
super.eat()
//實(shí)現(xiàn)接口
interfaceaction{
funsleep()
classWoman:action{
overridefunsleep(){
//...
}
Kotlin中使用var,val聲明變量及屬性,而且可以進(jìn)行類型推斷
在Java中,我們聲明一個(gè)變量必須先指定其類型,例如
Stringname="shusheng007";
但是在Kotlin中,編譯器可以根據(jù)賦值自動(dòng)推斷其類型為String
varname="shusheng007"
Kotlin存在非空與可空類型
這個(gè)也是其宣傳的一大亮點(diǎn),嘗試去解決價(jià)值幾十億美金的問(wèn)題:NullPointerException
在Kotlin中每個(gè)對(duì)象默認(rèn)都是非null的,除非你顯式的將其聲明為可null
//非空類型
varname1:String="shusheng"
//可空類型
varname2:String=null
Kotlin中package可以與文件路徑不一致
什么意思呢?假設(shè)我們有個(gè)類文件在src/…/top/ss007/learn文件路徑中
那么對(duì)于Java此類的包名必須為
packagetop.ss007.learn
而對(duì)于Kotlin來(lái)說(shuō)就沒(méi)有這個(gè)限制,可以隨便叫,例如叫:就是這么任性
packagejust.so.wayward
確實(shí)挺任性的,所以這點(diǎn)建議還是遵守Java的規(guī)范更好。
Kotlin中沒(méi)有受檢異常(CheckedException)
在Java中有很多受檢查異常,程序員被強(qiáng)制要求處理它,或者拋給下層調(diào)用者處理。但是Kotlin沒(méi)有這個(gè)限制。
Kotlin強(qiáng)調(diào)不可變的概念
Kotlin會(huì)優(yōu)先使用不可變對(duì)象,例如不可變的集合,不可變的變量。這些不可變對(duì)象生成后就只能讀取,而不能修改。至于使用不可變對(duì)象有很多好處,例如其天然的線程安全性等
以上幾條是個(gè)人認(rèn)為的最顛覆我們認(rèn)知的差異點(diǎn),熟悉了上面幾條后Java程序員就基本上可以看得懂kotlin的代碼了
Java中不存在的特性
Kotlin中引入了很多Java中不存在的特性,下面是幾條我認(rèn)為比較重要的
方法類型(FunctionType)
在Kotlin中方法是一等公民,意思就是方法就和類一樣,類可以干的事,方法都可以干。方法竟然可以作為類型當(dāng)其他方法的參數(shù)傳遞,當(dāng)其他方法的返回值類型,當(dāng)變量的聲明類型…這個(gè)比較顛覆Java程序員的三觀,Java中是沒(méi)有對(duì)應(yīng)的概念的。如果非要找一個(gè)對(duì)應(yīng)物的話,那就是函數(shù)接口了。
下面是一個(gè)方法類型(兩個(gè)int數(shù)據(jù)得到一個(gè)int,例如1+2=3)。我們完全可以將其看成是java中的一個(gè)類,所有可以使用類的地方這家伙都適用,也就是說(shuō)kotlin中,方法可以當(dāng)參數(shù)傳遞了,相當(dāng)于實(shí)現(xiàn)了方法引用,牛逼哄哄的。
(Int,Int)-Int
例如如下方法,第3個(gè)參數(shù)operation的類型就是上面的方法類型
funcalculate(x:Int,y:Int,operation:(Int,Int)-Int):Int{
returnoperation(x,y)
//如何調(diào)用
funsum(x:Int,y:Int):Int{
returnx+y
//將sum方法當(dāng)參數(shù)傳入了calculate方法中
calculate(4,5,::sum)
//我們也可以使用Lambda表達(dá)式
calculate(4,5,{a,b-a+b})
//當(dāng)Lambda表達(dá)式是方法的最后一個(gè)參數(shù)時(shí),其可以移到()外面
calculate(4,5){a,b-a+b}
那么如何在Java中實(shí)現(xiàn)相同的功能呢?
第一步:按照需求定義一個(gè)函數(shù)接口
下面的接口只有一個(gè)抽象方法,是一個(gè)函數(shù)接口。
@FunctionalInterface
publicinterfaceFun2P1,P2,R{
Rinvoke(P1p1,P2p2);
}
第二步:將其作為方法參數(shù)類型
publicintjavaCalculate(intx,inty,Fun2Integer,Integer,Integeroperation){
returnoperation.invoke(x,y);
}
經(jīng)過(guò)上面兩步就搞定了。
當(dāng)在Kotlin中調(diào)用Java中的方法javaCalculate時(shí),IDE會(huì)提示如下信息
第一條是告訴你第三個(gè)參數(shù)可以使用Kotlin中的函數(shù)類型,代碼如下
javaCalculate(4,5){a,b-a+b}
第二條是比較正統(tǒng)的,告知你需要一個(gè)類型為Fun2的參數(shù),代碼如下
javaCalculate(4,5,object:Fun2Int,Int,Int{
overridefuninvoke(p1:Int,p2:Int):Int{
returnp1+p2
})
在Java中我們使用new一個(gè)匿名類的對(duì)象,而在Kotlin中我們需要使用object關(guān)鍵字
屬性(Property)
varname:String="ShuSheng007"
對(duì)應(yīng)Java類里的私有字段(Field)外加getter和setter方法
privateStringname;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
=name;
}
數(shù)據(jù)類dataclass
dataclassUser(valname:String,valage:Int)
大體相當(dāng)于Java中的JavaBean,但有細(xì)微差別,這也是Kotlin大勢(shì)宣傳其簡(jiǎn)潔性時(shí)經(jīng)常展示的看家特性
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)試題(大學(xué)選修課)-無(wú)處不在-傳染病歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年大學(xué)試題(歷史學(xué))-蒙古族史歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年大學(xué)試題(醫(yī)學(xué))-物理診斷學(xué)歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年大學(xué)試題(醫(yī)學(xué))-中醫(yī)內(nèi)科學(xué)歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年國(guó)家開(kāi)放大學(xué)(電大)-現(xiàn)代文員(???歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年衛(wèi)生資格(中初級(jí))-神經(jīng)外科主治醫(yī)師歷年參考題庫(kù)含答案解析(5套典型題)
- 2025年衛(wèi)生知識(shí)健康教育知識(shí)競(jìng)賽-瘧疾知識(shí)競(jìng)賽歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年醫(yī)學(xué)高級(jí)職稱-骨外科(醫(yī)學(xué)高級(jí))歷年參考題庫(kù)含答案解析(5套典型題)
- 2025年企業(yè)文化企業(yè)建設(shè)知識(shí)競(jìng)賽-西南公司制度知識(shí)歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年專業(yè)技術(shù)人員繼續(xù)教育公需科目-知識(shí)創(chuàng)造與經(jīng)營(yíng)繼續(xù)教育歷年參考題庫(kù)含答案解析(5套典型考題)
- 復(fù)雜子宮全切術(shù)后護(hù)理查房
- 2025年初中美術(shù)教師招聘考試試卷含答案(三套)
- 三體系培訓(xùn)課件
- 2024職業(yè)病防治宣傳手冊(cè)
- 稅務(wù)風(fēng)險(xiǎn)防范課件
- 藥液外滲護(hù)理不良事件
- GB/T 45695-2025空鐵旅客聯(lián)運(yùn)服務(wù)質(zhì)量要求
- 中餐烹飪專業(yè)教學(xué)標(biāo)準(zhǔn)(中等職業(yè)教育)2025修訂
- 2025-2030年中國(guó)汽車電機(jī)行業(yè)供需分析及發(fā)展前景研究報(bào)告
- 2025年國(guó)有企業(yè)改革相關(guān)考試試題及答案
- DBJ04-T306-2025 建筑基坑工程技術(shù)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論