Kotlin 學習筆記

var 和 val (Declaring Properties)

val and var are the two keywords you can use to declare variables (and properties). The difference is that using val gives you a read-only variable, which is the same as using the final keyword in Java.

val 和 var 都是聲明變量的關(guān)鍵字。不同點在于val 是只讀變量,相當于java中的final變量,因此創(chuàng)建的時候必須初始化。

var x = 10    // int x = 10;
val y = 25    // final int y = 25;

Objects

參考:http://www.itdecent.cn/p/ba3d13581a06

1、Object expression(對象表達式)

在Android里面,我們對一些點擊事件的監(jiān)聽的時候,會使用到匿名內(nèi)部類
而在Kotlin中,就用對象表達式來替換匿名內(nèi)部類,是這樣子來寫的

fab.setOnClickListener(
            object : View.OnClickListener {
                override fun onClick(v: View?) {
                } 
            })
// 上面可以使用Lambdas簡寫成
// fab.setOnClickListener( View.OnClickListener { })

如果父類有構(gòu)造函數(shù),則必須傳遞相應(yīng)的構(gòu)造函數(shù)。多個父類可以用逗號隔開,寫在冒號后面

open class A(x: Int) {
    public open val y: Int = x
}
interface B {...}
val ab: A = object : A(1), B {
    override val y = 15
}

當只需要一個對象just an object,沒有父類的情況下

val adHoc = object {
    var x: Int = 0
    var y: Int = 0
}
print(adHoc.x + adHoc.y)

就像Java的匿名內(nèi)部類一樣,對象表達式中的代碼可以訪問封閉范圍的變量。

fun countClicks(window: JComponent) {
    var clickCount = 0 // 如果是Java的話這里要加上final
    var enterCount = 0 // 這里也是
    window.addMouseListener(object : MouseAdapter() {
        override fun mouseClicked(e: MouseEvent) {
            clickCount++
        }
        override fun mouseEntered(e: MouseEvent) {
            enterCount++
        }
    })
    // ...
}

與Java不同,封閉范圍的變量不需要聲明為final

2、Object declarations(對象聲明)

object DataProviderManager {
    fun registerDataProvider(provider: DataProvider) {
        // ...
    }

    val allDataProviders: Collection<DataProvider>
        get() = // ...
}

這樣的代碼稱為一個 對象聲明(object declaration), 在 object 關(guān)鍵字之后必須指定對象名稱

注意: 對象聲明不可以是局部的(也就是說, 不可以直接嵌套在函數(shù)之內(nèi)), 但可以嵌套在另一個對象聲明之內(nèi), 或者嵌套在另一個非內(nèi)部類(non-inner class)之內(nèi).

3、Companion Objects(伴生對象)

Kotlin允許我們?nèi)ザx一些行為與靜態(tài)對象一樣的對象。盡管這些對象可以用眾所周知的模式來實現(xiàn),比如容易實現(xiàn)的單例模式。
我們需要一個類里面有一些靜態(tài)的屬性、常量或者函數(shù),我們可以使用companion objecvt。這個對象被這個類的所有對象所共享,就像Java中的靜態(tài)屬性或者方法。


Object expression是馬上執(zhí)行的
Object declaration是lazy的,在第一次使用時執(zhí)行
Companion Object是在類第一次加載時執(zhí)行


構(gòu)造方法

(待續(xù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基本數(shù)據(jù)類型 和java類似,首字母大寫 Type BitWidthDouble 64Float ...
    王巖_shang閱讀 876評論 0 2
  • 項目未來可能需要使用kotlin開發(fā),所以特此記錄一下學習筆記,僅供參考,方便后期查詢。已同步到GitHub上:K...
    下位子閱讀 2,544評論 7 17
  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,690評論 9 118
  • 未完待續(xù)······太監(jiān)直播吃電腦(●'?'●) 一.基礎(chǔ)操作符、語法、定義等 val --> 常量 ; var...
    blink_dagger閱讀 538評論 1 1
  • 關(guān)鍵字:var:定義變量val:定義常量fun:定義方法Unit:默認方法返回值,類似于Java中的void,可以...
    x小明閱讀 760評論 0 0

友情鏈接更多精彩內(nèi)容