Hello world
無(wú)論學(xué)習(xí)什么語(yǔ)言我們都習(xí)慣從hello world開(kāi)始
fun main(args: Array<String>) {
println("Hello, world!")
}
不可變引用 val
val變量只能進(jìn)行唯一一次初始化,但是,如果編譯器能確保唯一一條初始化語(yǔ)句會(huì)被執(zhí)行,可以根據(jù)條件使用不同的值來(lái)初始化它。
可變引用 var
這種變量的值可以改變,但是它的類(lèi)型卻是改變不了的。如果需要在變量中存儲(chǔ)不匹配類(lèi)型的值,必須手動(dòng)把值轉(zhuǎn)換或強(qiáng)制轉(zhuǎn)換到正確的類(lèi)型。
vararg 可變參數(shù)
fun main(vararg args:String){}
字符串模板
Kotlin可以在字符串字面值中引用局部變量,只需要在變量名稱(chēng)前面加上字符$。
println("hello, $name")
如果要在字符串中使用$,需要對(duì)它進(jìn)行轉(zhuǎn)義
val money = 100
println("I hava \$$money")
除了可以引用局部變量之外,還可以引用更加復(fù)雜的表達(dá)式,只需要把表達(dá)式用花括號(hào)擴(kuò)起來(lái)。
fun strMax(a: Int, b: Int) {
println("a is ${if (a>b) "bigger" else "smaller" }" than b")
}
類(lèi)型推導(dǎo)
對(duì)于表達(dá)式體函數(shù),可以省略返回類(lèi)型,因?yàn)榫幾g器會(huì)分析作為函數(shù)體的表達(dá)式,并把它的類(lèi)型作為函數(shù)的返回類(lèi)型,這種分析稱(chēng)為類(lèi)型推導(dǎo)
fun max(a: Int, b: Int) = if (a > b) a else b
自定義訪問(wèn)器
定義的訪問(wèn)器:用val開(kāi)頭作為聲明,緊跟著的是屬性的名稱(chēng)和類(lèi)型,接下來(lái)是get()關(guān)鍵字,最后是一個(gè)函數(shù)體。
class Rectangle(var height: Int, var width: Int){
val isSquare: Boolean
get() = height == width
}
when表達(dá)式
when 取代了類(lèi) java 語(yǔ)言的 switch 操作符
fun main(language: String) {
when (language) {
"EN" -> "Hello!"
"FR" -> "Salut!"
"IT" -> "Ciao!"
else -> "Sorry, I can't greet you in $language yet"
}
}
迭代:區(qū)間和數(shù)列
for(i in startValue..endValue)
//區(qū)間范圍包括起始值
for(i in endValue downTo startValue step 2)
//downTo用于遞減到指定的值,而step則指定步長(zhǎng),區(qū)間范圍包括起始值
for(i in startValue until endValue)
//區(qū)間范圍包括起始值,不包括結(jié)束值
更新map
在更新map時(shí),我們可以像使用數(shù)組一樣,只不過(guò)下標(biāo)變成了key值
val binaryReps = TreeMap<Char,String>()
for(c in 'A'..'F'){
var binary = Integer.toBinaryString(c.toInt())
binaryReps[c] = binary
}
//訪問(wèn)map
for ((letter, binary) in binaryReps){
println("$letter = $binary")
}
擴(kuò)展函數(shù)
擴(kuò)展類(lèi)的函數(shù), 即Extension Function, 可以在已有類(lèi)中添加新的方法, 比繼承更加簡(jiǎn)潔和優(yōu)雅.
例如:我們可以在Activity中直接使用toast("調(diào)用Toast方法")來(lái)實(shí)現(xiàn)Toast功能。也許這里你會(huì)有疑問(wèn)為什么不在Activity中進(jìn)行擴(kuò)展,而是在Context中去做擴(kuò)展,通過(guò)源碼你會(huì)發(fā)現(xiàn)Activity的最上層實(shí)際上就是Context,所以說(shuō)在Context中做最好。
/**
* toast方法(可在Activity中直接調(diào)用)
*/
var activityToast: Toast? = null
fun Context.toast(text: String?, duration: Int = Toast.LENGTH_SHORT){
if (activityToast != null) {
activityToast?.setText(text)
activityToast?.duration = duration
}else{
activityToast = Toast.makeText(this, text, duration)
}
activityToast?.show()
}
嵌套類(lèi)
類(lèi)可以嵌套在其他類(lèi)中,不能訪問(wèn)外部類(lèi)成員:
class Outer {
private val bar: Int = 1
class Nest {
//嵌套類(lèi)不能訪問(wèn)外部類(lèi)成員,相當(dāng)于java的static 靜態(tài)內(nèi)部類(lèi)
fun foo() = 2
}
}
fun main(args: Array<String>) {
//創(chuàng)建嵌套類(lèi)Nest對(duì)象,不需要外部類(lèi)Outer對(duì)象
println(Outer.Nest().foo()) //輸出2
}
內(nèi)部類(lèi)
類(lèi)需要用inner修飾
類(lèi)標(biāo)記為inner,可以訪問(wèn)外部類(lèi)成員:
class Outer {
private val bar: Int = 1
inner class Inner {
//內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)成員,可看作外部類(lèi)對(duì)象的一個(gè)成員
fun foo() = bar
}
}
fun main(args: Array<String>) {
//創(chuàng)建內(nèi)部類(lèi)Inner對(duì)象,需要外部類(lèi)Outer對(duì)象
val outer = Outer()
println(outer.Inner().foo()) //輸出1
}
下一篇:http://www.itdecent.cn/p/9750e3e27af0
錯(cuò)誤不足之處或相關(guān)建議歡迎大家評(píng)論指出,謝謝!如果覺(jué)得內(nèi)容可以的話麻煩喜歡(?)一下