使用Android Studio新建項(xiàng)目時(shí)可選擇Java,同時(shí)在右側(cè)勾選Kotlin盯串,或者直接新建Kotlin項(xiàng)目颊亮。
1.Kotlin 文件已 .kt 格式結(jié)束
2.Kotlin代碼輸出Textview內(nèi)容大家可以看到 “fun” “ :” 兩個(gè)特殊符號(hào)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kt)
tv.text="職業(yè)渡人"
}
fun 關(guān)鍵字 【聲明一個(gè)函數(shù)】
Kotlin代碼用Textview輸出view上內(nèi)容撮珠,看起來比Java等語言簡(jiǎn)單得多,Kotlin中通過fun關(guān)鍵字聲明一個(gè)函數(shù)凯正,onCreate方法是應(yīng)用程序的入口,相比java實(shí)現(xiàn)少 寫findViewById()
:關(guān)鍵符號(hào)【繼承豌蟋,實(shí)現(xiàn)】
需要注意的是Kotlin的變量名通常寫在類型的前面廊散,中間用冒號(hào)分開
變量和數(shù)據(jù)類型
var【變量】
val 【常量】
Kotlin變量分為var(可變變量)和val(只讀變量,也稱不可變變量夺饲、運(yùn)行期常量)奸汇,其中var是可寫的,在它的生命周期中可以被多次賦值往声,如上述代碼中的a和e擂找;而val是只讀的,它是在運(yùn)行時(shí)初始化的浩销,但僅能賦值一次贯涎,如對(duì)d重新賦值會(huì)發(fā)生編譯錯(cuò)誤,只讀變量相當(dāng)于Java中用final修飾的變量(并不完全相同)慢洋。只讀變量的值只能被修改一次塘雳,并且不能被覆蓋,這可以避免變量的值被錯(cuò)誤的修改普筹。
ar <標(biāo)識(shí)符> : <類型> = <初始化值>
val <標(biāo)識(shí)符> : <類型> = <初始化值>
val a: Int = 1
val b = 1 // 系統(tǒng)自動(dòng)推斷變量類型為Int
val c: Int // 如果不在聲明時(shí)初始化則必須提供變量類型
c = 1 // 明確賦值
var x = 5 // 系統(tǒng)自動(dòng)推斷變量類型為Int
x += 1 // 變量可修改
vararg 【可變長(zhǎng)參數(shù)函數(shù)】
fun vars(vararg v:Int){
for(vt in v){
print(vt)
}
}
// 測(cè)試
fun main(args: Array<String>) {
vars(1,2,3,4,5) // 輸出12345
}
字符串模板
$ 表示一個(gè)變量名或者變量值
$varName 表示變量值
${varName.fun()} 表示變量的方法返回值:
var a = 1
// 模板中的簡(jiǎn)單名稱:
val s1 = "a is $a"
a = 2
// 模板中的任意表達(dá)式:
val s2 = "${s1.replace("is", "was")}, but now is $a"
NULL檢查機(jī)制
Kotlin的空安全設(shè)計(jì)對(duì)于聲明可為空的參數(shù)败明,在使用時(shí)要進(jìn)行空判斷處理,有兩種處理方式太防,字段后加!!像Java一樣拋出空異常妻顶,另一種字段后加?可不做處理返回值為 null或配合?:做空判斷處理
//類型后面加?表示可為空
var age: String? = "23"
//拋出空指針異常
val ages = age!!.toInt()
//不做處理返回 null
val ages1 = age?.toInt()
//age為空返回-1
val ages2 = age?.toInt() ?: -1
當(dāng)一個(gè)引用可能為 null 值時(shí), 對(duì)應(yīng)的類型聲明必須明確地標(biāo)記為可為 null。
當(dāng) str 中的字符串內(nèi)容不是一個(gè)整數(shù)時(shí), 返回 null:
fun main(args: Array<String>) {
if (args.size < 2) {
print("Two integers expected")
return
}
val x = parseInt(args[0])
val y = parseInt(args[1])
// 直接使用 `x * y` 會(huì)導(dǎo)致錯(cuò)誤, 因?yàn)樗鼈兛赡転?null.
if (x != null && y != null) {
// 在進(jìn)行過 null 值檢查之后, x 和 y 的類型會(huì)被自動(dòng)轉(zhuǎn)換為非 null 變量
print(x * y)
}
}
類型檢測(cè)轉(zhuǎn)換&自動(dòng)類型轉(zhuǎn)換【重點(diǎn)】=={要不然項(xiàng)目中坑死你}
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// 做過類型判斷以后,obj會(huì)被系統(tǒng)自動(dòng)轉(zhuǎn)換為String類型
return obj.length
}
//在這里還有一種方法讳嘱,與Java中instanceof不同幔嗦,使用!is
// if (obj !is String){
// // XXX
// }
// 這里的obj仍然是Any類型的引用
return null
}
還有一種方法轉(zhuǎn)換
fun getStringLength(obj: Any): Int? {
if (obj !is String)
return null
// 在這個(gè)分支中, `obj` 的類型會(huì)被自動(dòng)轉(zhuǎn)換為 `String`
return obj.length
}
fun getStringLength(obj: Any): Int? {
// 在 `&&` 運(yùn)算符的右側(cè), `obj` 的類型會(huì)被自動(dòng)轉(zhuǎn)換為 `String`
if (obj is String && obj.length > 0)
return obj.length
return null
}
Kotlin基礎(chǔ)篇【2】初識(shí)Kotlin的意義
Kotlin基礎(chǔ)篇【3】Kotlin基礎(chǔ)語法
=======Kotlin基礎(chǔ)篇【4】Kotlin基礎(chǔ)語法即將更新=======