亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

kotlin入門基礎教程只kotlin基礎語法

2024-07-21 23:03:37
字體:
來源:轉載
供稿:網友

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

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

基本語法準則:

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

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

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

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

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

變量 var 延遲加載 lateinit ;

內部類和參數默認為public,而在Java中為private

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

取消了static關鍵字,靜態方法和參數統一寫在 companion object 塊

internal模塊內可見,inner內部類

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

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

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

條件語句

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

循環語句

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

fun main(args: Array) { var list = ArrayList() add(list) list.forEachIndexed { i, s -> print(list[i]) print(s) } println() //如果沒有指定函數的返回值,它就會返回Unit,與Java中的void類似,但是Unit是一個真正的對象。當然也可以指定任何其它的返回類型: 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])}//操作列表內的對象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中冒號 : 用萬能來稱呼絕不為過。常量變量的類型聲明,函數的返回值,類的繼承都需要它

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

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

指定上下文的@

除了冒號另一個重要符號 @ ,java代碼中經常用到內部類和匿名內部類,有時我們不能確定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 方法自動轉換成屬性,對應到Kotlin屬性的調用

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; }}

對應的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 方法比較復雜,這就需要自定義 getter/setter 了,實現一個Java中常用的單例,這里只為了展示,單例在Kotlin有更簡單的方法實現,只要在 package 級別創建一個 object 即可

class User { companion object {//靜態方法和參數統一寫在 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 指代當前類一樣, field 指代當前參數,直接使用參數名 instance 代替不會報錯但單例就沒效果了

字符串問題

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

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

輸出num = 1, name = one

Java8新特性lambda的支持

接口名、方法名和參數類型

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

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

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

擴展函數

可以為任何已經存在的類添加新函數,相比傳統工具類,擴展函數更具有可讀性。

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

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

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

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

參考文獻

Kotlin for android Developers

kotlin 腳本練習


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美—级高清免费播放| 精品久久久久久久久久| 日韩一区二区久久久| 国产精品99久久久久久久久| 国产精品白嫩初高中害羞小美女| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲午夜久久久影院| 日韩av免费看网站| 欧美性猛交xxxx黑人猛交| 18久久久久久| 国产精品入口免费视频一| 日本精品久久中文字幕佐佐木| 性欧美长视频免费观看不卡| 日韩美女免费观看| 91成人在线观看国产| 日韩欧美一区二区三区久久| 日韩在线免费视频观看| 91高清免费视频| 高清一区二区三区四区五区| 成人精品在线视频| 美女久久久久久久久久久| 成人h猎奇视频网站| 伊人久久大香线蕉av一区二区| 国模吧一区二区三区| 亚洲国产成人精品电影| 亚洲裸体xxxx| 国产性猛交xxxx免费看久久| 亚洲天堂一区二区三区| 欧美视频国产精品| 国产精品人人做人人爽| 日韩激情av在线免费观看| 91在线免费网站| 欧美视频在线观看免费网址| 成人性生交xxxxx网站| 国产91露脸中文字幕在线| 宅男66日本亚洲欧美视频| 国产成人午夜视频网址| 国产精品午夜国产小视频| 亚洲人成77777在线观看网| 亚洲人av在线影院| 永久免费看mv网站入口亚洲| 日韩美女免费视频| 日本一区二区在线播放| 国产欧美一区二区三区四区| 亚洲一区中文字幕| 日韩av高清不卡| 91精品国产网站| 亚洲精品中文字| 在线播放日韩精品| 亚州欧美日韩中文视频| 欧美成人网在线| 欧美在线观看www| 97视频在线观看视频免费视频| 91欧美精品午夜性色福利在线| 91美女片黄在线观看游戏| 日韩中文字幕在线视频| 裸体女人亚洲精品一区| 欧美极品少妇xxxxx| 日韩av中文字幕在线免费观看| 日韩国产在线播放| 亚洲视频一区二区三区| 中文字幕精品一区二区精品| 久久久久久久爱| 91精品国产九九九久久久亚洲| 成人午夜在线视频一区| 国产一区二区三区在线视频| 精品视频在线播放色网色视频| 久久久久久久久亚洲| 疯狂做受xxxx欧美肥白少妇| 日韩免费av一区二区| 中文字幕日本精品| 国产日本欧美一区二区三区在线| 91麻豆国产语对白在线观看| 国产精品精品国产| 亚洲一区久久久| 国产亚洲欧美日韩精品| 久久久久久国产精品美女| 97色在线播放视频| 性色av一区二区三区| 亚洲国产精品国自产拍av秋霞| 欧美黑人性视频| 欧美—级a级欧美特级ar全黄| 亚洲精品国产精品乱码不99按摩| 亚洲色图五月天| 欧美极品少妇全裸体| 欧美裸体视频网站| 欧美一区二区三区……| 欧美黑人一区二区三区| 亚洲成人网在线观看| 疯狂蹂躏欧美一区二区精品| 国产一区二区三区在线观看网站| 一区二区三区国产视频| 久久精品中文字幕| 亚洲成色777777女色窝| 清纯唯美亚洲综合| 亚洲综合自拍一区| www.日韩av.com| 亚洲精品久久在线| 欧美激情一级欧美精品| 欧美在线视频在线播放完整版免费观看| 啪一啪鲁一鲁2019在线视频| 国产精品最新在线观看| 亚洲欧美日韩精品久久| 亚洲最大福利网| 国产91网红主播在线观看| 日韩高清免费观看| 日韩美女av在线免费观看| 亚洲激情中文字幕| 色综合导航网站| 在线观看日韩专区| 色伦专区97中文字幕| 91精品久久久久久久久| 国产精品男人的天堂| 成人在线免费观看视视频| 欧美视频一区二区三区…| 国产精品久久久久久久久| 久久精品一本久久99精品| 久久影院免费观看| 亚洲最大av在线| 欧美午夜精品伦理| 国产精品欧美日韩久久| 自拍偷拍亚洲欧美| 日韩少妇与小伙激情| 久久久久久久网站| 国产日韩精品视频| 欧美精品做受xxx性少妇| 国产一区红桃视频| 久久偷看各类女兵18女厕嘘嘘| 日韩精品免费在线视频| 精品偷拍各种wc美女嘘嘘| 91wwwcom在线观看| 欧美又大又硬又粗bbbbb| 亚洲综合日韩中文字幕v在线| 成人久久一区二区三区| 亲子乱一区二区三区电影| 久久成人精品视频| 日韩精品免费在线视频| 俺去亚洲欧洲欧美日韩| 亚洲精品免费一区二区三区| 欧美在线视频一区| 永久免费毛片在线播放不卡| 国产精品久久色| 成人97在线观看视频| 精品二区三区线观看| 亚洲午夜色婷婷在线| 一个人www欧美| 欧美理论在线观看| 一本色道久久88综合亚洲精品ⅰ| 精品高清一区二区三区| 国产欧美精品一区二区三区介绍| 亚洲女人被黑人巨大进入al| 久久在精品线影院精品国产| 97视频在线观看亚洲| 久久精品国产电影| 2020欧美日韩在线视频| 欧美激情高清视频| 亚洲影院色在线观看免费| 亚洲韩国日本中文字幕| 精品国内亚洲在观看18黄| 亚洲精品久久久久中文字幕欢迎你| 国产精品9999| 九九热r在线视频精品| 91系列在线播放| 亚洲视频在线观看视频|