国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發(fā) > 綜合 > 正文

kotlin入門基礎(chǔ)教程只kotlin基礎(chǔ)語法

2024-07-21 23:03:37
字體:
供稿:網(wǎng)友

每種編程語言都有一定的語法、語義和執(zhí)行順序(同步),學(xué)習(xí)一種新語言也都是從這三者出發(fā),下面我們就只針對kotlin的語法來做簡單的介紹。

Kotlin有自己的特性不該被Java的思維所束縛。

基本語法準(zhǔn)則:

在Kotlin中常量用 val 聲明,變量用 var 聲明;

關(guān)鍵字在前面,類型以冒號 :隔開在后面,也可以省略直接賦值;

類型后帶問號 ? 表示可為空類型(默認(rèn)空類型安全);

常量 val 延遲加載 by lazy{} ;

默認(rèn)是線程安全的,關(guān)閉線程安全 lazy(LazyThreadSafetyMode.NONE){} ;

變量 var 延遲加載 lateinit ;

內(nèi)部類和參數(shù)默認(rèn)為public,而在Java中為private

類默認(rèn)為不可繼承(final),想要可被繼承要聲明為 open 或 abstract

取消了static關(guān)鍵字,靜態(tài)方法和參數(shù)統(tǒng)一寫在 companion object 塊

internal模塊內(nèi)可見,inner內(nèi)部類

//常量數(shù)組int[][][] arrs = new int[3][2][1];val arrs = Array(3) { Array(2) { IntArray(1) } }internal var name: String? = null//類型后帶問號 ? 表示可為空類型(默認(rèn)空安全)internal var age: Int = 0//internal模塊內(nèi)可見,inner內(nèi)部類//當(dāng)我們只有單個構(gòu)造器時,我們需要在從父類繼承下來的構(gòu)造器中指定需要的參數(shù)。這是用來替換Java中的super調(diào)用的。open class Animal(name: String)class Person(name: String, surname: String) : Animal(name)

kotlin是空類型安全的,所有變量默認(rèn)為"not null",必須顯式在類型后添加?修飾符才可賦值為null。

var notNullArtist: Artist = null//編譯不通過,因為notNullArtist不能為nullvar artist: Artist? = null//編譯通過artist.print()//編譯不通過,因為artist可能為空/ Kotlin進行空判斷處理,有兩種處理方式: 1. 拋出空異常,字段后加 !! 2. 不做處理直接跳過,字段后加 ? /artist?.print()//編譯通過,做了非空判斷,只有當(dāng)artist!=null時才調(diào)用print()artist!!.print()//這種用法只有在確認(rèn)artist不為null時才能調(diào)用,否則拋出空指針異常val name = artist?.name?:"empty"//當(dāng)artist為null時可以指定一個默認(rèn)值

條件語句

if...else 正常使用,不過移除了 switch 用更強大的 when 替代,when子式可以是各種返回Boolean的表達式

val x = 7when (x) {in 1..5 -> 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")}

kotlin盡可能多的使用when

循環(huán)語句

while 和 do...while 同Java并無區(qū)別, for 則有很大改變并多出了幾個變種

fun main(args: Array) { var list = ArrayList() add(list) list.forEachIndexed { i, s -> print(list[i]) print(s) } println() //如果沒有指定函數(shù)的返回值,它就會返回Unit,與Java中的void類似,但是Unit是一個真正的對象。當(dāng)然也可以指定任何其它的返回類型: list.forEachIndexed(object :(Int,String) -> Unit{ override fun invoke(i: Int, s: String) { print(list[i]) print(s) }})}//遞增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)的對象for (item in list) { print(item)}//加強版for((i,item) in list.withIndex()){ print(list[i]) print(item)}//變種版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) }})fun add(list:MutableList) { for (i in 0..4) { list.add(i.toString() + "") } }

冒號使用

在Kotlin中冒號 : 用萬能來稱呼絕不為過。常量變量的類型聲明,函數(shù)的返回值,類的繼承都需要它

除此之外還有一個特別的地方也需要它,使用Java類的時候。Kotlin最終會還是編譯成Java字節(jié)碼,使用到Java類是必然的,在Kotlin語法如下

val intent = Intent(this, MainActivity::class.java)

指定上下文的@

除了冒號另一個重要符號 @ ,java代碼中經(jīng)常用到內(nèi)部類和匿名內(nèi)部類,有時我們不能確定this指代的上下文,Java可以使用XXX.this指代具體上下文,在kotlin中的做法是this@XXX

class User { inner class State{ fun getUser(): User{ //返回User return this@User } fun getState(): State{ //返回State return this@State } }}

kotlin的特色

Java的 getter/setter 方法自動轉(zhuǎn)換成屬性,對應(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; }}

對應(yīng)的kotlin

val user = User()//賦值user.name = "tutu"user.age = "23"//取值val name = user.nameval age = user.ageclass User { var name: String? = null var age: String? = null}

有時 getter/setter 方法比較復(fù)雜,這就需要自定義 getter/setter 了,實現(xiàn)一個Java中常用的單例,這里只為了展示,單例在Kotlin有更簡單的方法實現(xiàn),只要在 package 級別創(chuàng)建一個 object 即可

class User { companion object {//靜態(tài)方法和參數(shù)統(tǒng)一寫在 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 重點在 field ,跟我們熟悉所Java的 this 指代當(dāng)前類一樣, field 指代當(dāng)前參數(shù),直接使用參數(shù)名 instance 代替不會報錯但單例就沒效果了

字符串問題

在Java中拼接字符串的代碼可讀性都很差,在Kotlin字符串拼接變得非常簡潔,只需用 $ 后面加上參數(shù)名,復(fù)雜的參數(shù)要加上 {}

val pair = Pair(1, "one") val (num, name) = pair println("num = $num, name = $name")

輸出num = 1, name = one

Java8新特性lambda的支持

接口名、方法名和參數(shù)類型

lambda需要一個函數(shù),但是又不想費神去命名一個函數(shù)的場合下使用,也就是指匿名函數(shù)。使用功能接口,把省掉不寫再加個 -> 罷了。

使用Java開發(fā)Android時,處理監(jiān)聽回調(diào)是常見的事,kotlin可以直接編寫監(jiān)聽回調(diào)而不用再通過匿名對象傳遞onClick方法,這個特性被稱為Lambda表達式

view.setOnclickListener({ Toast.makeText(this, "Hello World!", Toast.LENGTH_LONG).show()})

擴展函數(shù)

可以為任何已經(jīng)存在的類添加新函數(shù),相比傳統(tǒng)工具類,擴展函數(shù)更具有可讀性。

//為Fragment添加擴展函數(shù)fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_LONG){ Toast.makeText(getActivity(), message, duration).show()}

調(diào)用時直接調(diào)用fragment.toast("Hello World!")或fragment.toast("Hello World!", 2000)

Kotlin中的參數(shù)與Java中有些不同。如你所見,我們先寫參數(shù)的名字再寫它的類型。上面調(diào)用的第二個參數(shù)(length)指定了一個默認(rèn)值。這意味著你調(diào)用的時候可以傳入第二個值或者不傳,這樣可以避免你需要的重載函數(shù)。

函數(shù)式支持(lambda),函數(shù)是一級公民

參考文獻

Kotlin for android Developers

kotlin 腳本練習(xí)


注:相關(guān)教程知識閱讀請移步到kotlin教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
日本一二区视频| 中文字幕人成高视频| 69视频在线观看| 国产精品爱久久久久久久小说 | 欧美亚洲系列| 黄色毛片在线观看| 国产无遮挡又黄又爽免费软件| 国产视频中文字幕| 精品乱码一区二区三四区视频| 中文av在线播放| 九色在线网站| 国产导航在线| 91caoporn在线| 亚洲第一成年免费网站| 色悠久久久久综合网小说| 国产中文字幕在线| 国产三级视频在线看| 国产偷窥老熟盗摄视频| 国产成人无吗| 日本啊v在线| 国产一区电影| 国产久草在线| 日本成人网址| 亚洲网站视频在线观看| 国产一级免费| 日本免费黄色| 国产成人精品久久一区二区小说 | 国产黄在线观看| 国产在线看片| 天天插天天狠天天透| 国产香蕉视频在线看| 国产在线色视频| 欧美韩日国产| 青青草视频在线免费观看| 精品视频麻豆入口| 中文字幕视频在线观看| 久草网在线视频| www.中文字幕久久久| 精品欧美日韩一区二区| 国产区在线观看| 69久久精品| 精品日韩av| av男人的天堂网| 四虎成年永久免费网站| 午夜在线视频| 亚洲精品午夜级久久久久| 中文字幕av在线| 在线三级av| 欧美性猛交xxxx免费看久久| www.超级碰| 国产精品探花在线| 天天操天天操一操| 国产黄色片大全| 亚洲夜夜综合| 超碰在线免费播放| 成人精品福利| 国产精品入口麻豆免费看| 国产精品毛片一区二区三区四区| 国产www.大片在线| 亚洲精品aaaa| jizz国产| 午夜av在线免费观看| 国产黄在线播放| 天堂中文在线观看| 国产一区电影| 亚洲91av| 中文字幕久热在线精品| 91亚洲欧美| 高清视频一区二区三区四区| 国产一区电影| 牛牛精品视频在线| 国产a级网站| www狠狠操| 国产高清在线a视频大全| 亚洲电影视频在线| 免费在线高清av| 中文字幕av在线| 国产午夜电影| 久热精品免费视频| 国产变态拳头交视频一区二区| 超碰91在线| 精品国内自产拍在线视频| 国产专区在线播放| 在线观看av网站| 国产精品入口免费麻豆| 国产在线一二| 超碰97在线免费观看| 97视频网站| 国产丝袜自拍| 天天操夜夜操天天射| 国产爆初菊在线观看免费视频网站| 日本高清中文字幕在线| av大片在线播放| 国产成人精品久久一区二区小说| 国产嫩草在线视频| 免费av在线| av在线不卡网站| av在线1区2区| av福利在线观看| 97在线超碰| 91美女主播在线视频| 国产小视频在线高清播放| 免费a级在线播放| 黄网在线免费| 国产裸舞福利在线视频合集| 永久免费在线观看| 在线视频色在线| 亚洲欧洲成人| 免费看成年人视频在线观看| 免费a在线观看| 激情六月丁香| 国产网站免费看| 国产精品入口麻豆免费| 国产区在线观看| 992tv在线观看在线播放| 夜夜爽视频导航| jizz在线视频| 久久精品视频观看| 国产午夜视频| 在线国产福利网站| 中文岛国精品亚洲一区| 免费在线超碰| 国产系列在线观看| 99re6在线视频精品免费| 人xxxx性xxxxx欧美| 国产麻豆高清视频在线第一页 | 精品一区二区在线欧美| 亚洲v片在线观看| 午夜免费福利在线观看| 精品视频二区| 中文字幕不卡| 思思99精品视频在线观看| 国产美女福利在线观看| 51成人精品网站| 四虎免费视频| 国产女主播在线| 黄色一级片视频| 91久久麻豆| 国产免费av网站| 日本欧美在线视频免费观看| 国产一级黄色片免费| 人人澡人人爽| 国产h色视频在线观看| 国产老肥熟xxxx在线观看| 性网站在线播放| 国产福利在线播放麻豆| 国产永久免费高清在线观看| 天天干天天摸| 在线一区观看| 国产免费av网站| www在线视频| 在线视频观看亚洲| 2019年中文字幕| 国产一级性片| 1区不卡电影| 免费在线观看a| 性欧美精品xxxx| 日本福利在线| 日韩国产成人| 香蕉视频在线看| av免费在线观看网站| 国产黄色片中文字幕| 国产精品被窝福利一区| 国产精品第八页| 国产主播色在线| 天堂资源最新在线| 好男人社区在线视频| 九色福利视频| 好男人免费精品视频| 久久综合第一页| 国产老肥熟xxxx在线观看| 国产鲁鲁视频在线观看特色| 五月综合激情在线| 国产一级片麻豆| 国产成人午夜电影| 在线国产一级| 人人干人人插| 麻豆网站在线| 国产三级在线观看| 国产区视频在线观看| 99在线视频影院| 免费在线观看a| 国产麻豆精品入口在线观看| 国产麻豆高清视频在线第一页| 综合蜜桃精品| 精品国产二区三区| 免费a级在线播放| 国产网站av| 亚洲色婷婷综合开心网| 另类综合图区| 国产www网站| 国产在线观看a视频| 国产激情二区| 另类综合图区| 国产一区二区影视| 欧美人成在线观看网站高清| 国产黄色片在线观看| 丁香婷婷在线观看| 亚洲尤物在线视频| 国产精品自拍在线观看|