今天就跟大家聊聊有關(guān)使用Kotlin怎么進(jìn)行編程,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個(gè)不僅審美在線,而且實(shí)用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對(duì)成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無(wú)止境。
Kotlin 基本語(yǔ)法
先說(shuō)個(gè)學(xué)習(xí)Kotlin語(yǔ)法的小竅門(mén),將代碼用Java寫(xiě)好,然后Code/Conver Java File to Kotlin File轉(zhuǎn)換成Kotlin代碼,或者將Java代碼復(fù)制到Kotlin文件會(huì)提示轉(zhuǎn)換也是挺方便的,比較差異很容易就能理解了,一開(kāi)始難免不適應(yīng)習(xí)慣后相信你一定會(huì)喜歡上Kotlin
1). 定義
忘掉Java的那一套寫(xiě)法不然會(huì)很不適應(yīng)的,Kotlin有自己的特性不該被Java的思維所束縛。在Kotlin中常量用val聲明,變了用var聲明,關(guān)鍵字在前面,類型以冒號(hào):隔開(kāi)在后面,也可以省略直接賦值,類型后帶問(wèn)號(hào)?表示可為空類型(默認(rèn)空安全)。
常量val延遲加載by lazy{},默認(rèn)線程安全關(guān)閉線程安全lazy(LazyThreadSafetyMode.NONE){},變量var延遲加載lateinit。
//常量數(shù)組int[][][] arrs = new int[3][2][1]; val arrs = Array(3) { Array(2) { IntArray(1) } } //空安全變量 var str: String = "hello" //可為空字符串變量 var str1: String? = null
2). 條件
if...else 正常使用,不過(guò)移除了switch用更強(qiáng)大的when替代,when子式可以是各種返回Boolean的表達(dá)式
val x = 7 when (x) { in 1..10 -> print("x is in the range") in validNumbers -> print("x is valid") !in 10..20 -> print("x is outside the range") else -> print("none of the above") }
3). 循環(huán)
while 和 do...while 同Java并無(wú)區(qū)別,for則有很大改變并多出了幾個(gè)變種
val list = ArrayList<String>() //遞增for (int i = 0; i < list.size(); i++) for (i in list.indices) { print(list[i]) } //遞增for (int i = 2; i < list.size(); i++) for (i in 2..list.size-1) { print(list[i]) } //遞減for (int i = list.size(); i >= 0; i--) for (i in list.size downTo 0) { print(list[i]) } //操作列表內(nèi)的對(duì)象 for (item in list) { print(item) } //加強(qiáng)版 for((i, item) in list.witnIndex()) { print(list[i]) print(item) } //變種版 list.forEach { print(it) } list.forEach { print(it) } list.forEachIndexed { i, s -> print(list[i]) print(s) } list.forEachIndexed(object :(Int,String) -> Unit{ override fun invoke(i: Int, s: String) { print(list[i]) print(s) } })
萬(wàn)能的冒號(hào)
在Kotlin中冒號(hào):用萬(wàn)能來(lái)稱呼絕不為過(guò)。常量變量的類型聲明,函數(shù)的返回值,類的繼承都需要它
//val表示常量var表示變量聲明 val name: String = "tutu" //省略類型說(shuō)明 var age = "23" //fun表示函數(shù) fun getName(): String{ return "tutu" } //類繼承 class UserList<E>(): ArrayList<E>() { //... }
除此之外還有一個(gè)特別的地方也需要它,使用Java類的時(shí)候。Kotlin最終會(huì)還是編譯成Java字節(jié)碼,使用到Java類是必然的,在Kotlin語(yǔ)法如下
val intent = Intent(this, MainActivity::class.java)
類名::class.java沒(méi)有為什么就這么寫(xiě)記著就是
我是誰(shuí)的@
除了冒號(hào)另一個(gè)重要符號(hào)@,想必用到內(nèi)部類和匿名內(nèi)部類的地方一定很多,再加上支持lambda語(yǔ)法,沒(méi)有它誰(shuí)告訴你this和return指的是哪一個(gè)
class User { inner class State{ fun getUser(): User{ //返回User return this@User } fun getState(): State{ //返回State return this@State } } }
偷懶的方法
1). Kotlin特色
Java的getter/setter方法自動(dòng)轉(zhuǎn)換成屬性,對(duì)應(yīng)到Kotlin屬性的調(diào)用
public class User { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
這樣一個(gè)Java類在Kotlin中只需這樣調(diào)用
val user = User() //賦值 user.name = "tutu" user.age = "23" //取值 val name = user.name val age = user.age
反之Kotlin的屬性自動(dòng)生成Java的getter/setter方法,方便在Java中調(diào)用,同樣的定義在Kotlin中
class User { var name: String? = null var age: String? = null }
我們的getter/setter方法有時(shí)不會(huì)這么簡(jiǎn)單,這就需要自定義getter/setter了,另起一行設(shè)置get()/set(value)方法,實(shí)現(xiàn)一個(gè)Java中常用的單例,這里只為了展示,單例在Kotlin有更簡(jiǎn)單的方法實(shí)現(xiàn),只要在 package 級(jí)別創(chuàng)建一個(gè) object 即可
class User { companion object { @Volatile var instance: User? = null get() { if (field == null) { synchronized(User::class.java) { if (field == null) field = User() } } return field } } var name: String? = null var age: String? = null }
自定義getter/setter重點(diǎn)在field,跟我們熟悉所Java的this指代當(dāng)前類一樣,field指代當(dāng)前參數(shù),直接使用參數(shù)名instance代替不會(huì)報(bào)錯(cuò)但單例就沒(méi)效果了
2). 字符串模板
在Java中拼接字符串的代碼可讀性都很差,在Kotlin字符串拼接變得非常簡(jiǎn)潔,只需用$后面加上參數(shù)名,復(fù)雜的參數(shù)要加上{}
val user = User() //賦值 user.name = "tutu" user.age = "23" //取值 val name = user.name val age = user.age var userInfo = "name:${user.name}, age:$age" //輸出結(jié)果:name:tutu, age:23
3). lambda
一開(kāi)始覺(jué)得lambda很高級(jí)完全看不懂,其實(shí)很簡(jiǎn)單的就是把接口名、方法名和參數(shù)類型省掉不寫(xiě)再加個(gè)->罷了,明白這點(diǎn)了就不介紹。
新面孔
1). 延遲加載
2). 流程控制
空判斷
Kotlin的空安全設(shè)計(jì)對(duì)于聲明可為空的參數(shù),在使用時(shí)要進(jìn)行空判斷處理,有兩種處理方式一種像Java一樣拋出空異常,字段后加!!,另一種不做處理直接跳過(guò),字段后加?
//類型后面加?表示可為空 var age: String? = "23" //拋出空指針異常 val ageInt = age!!.toInt() //不做處理跳過(guò) val ages = age?.toInt()
注意事項(xiàng)
內(nèi)部類和參數(shù)默認(rèn)為public,而在Java中為private
類默認(rèn)為不可繼承(final),想要可被繼承要聲明為open或abstract
取消了static關(guān)鍵字,靜態(tài)方法和參數(shù)統(tǒng)一寫(xiě)在companion object塊
internal模塊內(nèi)可見(jiàn),inner內(nèi)部類
看完上述內(nèi)容,你們對(duì)使用Kotlin怎么進(jìn)行編程有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
新聞名稱:使用Kotlin怎么進(jìn)行編程
轉(zhuǎn)載注明:http://muchs.cn/article28/jpedjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、電子商務(wù)、外貿(mào)建站、小程序開(kāi)發(fā)、營(yíng)銷型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)