1. 程式人生 > >Kotlin學習歷程三:kotlin中的變數、常量和註釋

Kotlin學習歷程三:kotlin中的變數、常量和註釋

一、變數

kotlin中變數的宣告和java有很大區別,必須使用varvar關鍵字。
var表示:可變變數,可讀也可寫,相當於java中的普通的變數。
val表示:不可變變數,可讀但是不可寫,相當於java中用final修飾的變數。

1.1 基礎用法:

格式:關鍵字(var/val) 變數名: 資料型別 = xxx

  • 其中。varvalKotlin中定義變數必須使用的關鍵字。
  • 每一行程式碼的結束可以省略掉分號;,這一點是和Java不同的地方。當然,第一次寫可能會有一點不習慣。
  • print()println()都是列印方法,後者列印完成之後會換一行。此兩個方法和Java的列印方法是一模一樣的。
  • $符號表示引用的意思。這裡理解為字串模板,$符號後面加上變數名或大括號中的表達。

1.2 在類中宣告以及宣告可空變數

1.2.1 類中宣告變數

1.1中是演示變數的基礎定義,而且只有在頂層宣告的情況下是可以不用例項化的。但是在實際開發當中,一般都是在一個類中去定義變數,這種情況被稱為宣告類的屬性。

其特點如下:必須初始化,如果不初始化,需使用lateinit關鍵字

1.2.2 宣告可空變數

在Java中,當我們宣告一個變數不必關心這個變數是否為空,在使用這個變數的時候幾乎上都會判斷其是否為空增加程式的安全性。這樣的習慣是極好的。但是無形中也增加了一定的程式碼量。有時候這樣的程式碼還極有可能是無用的廢程式碼。然而在Kotlin中當我們可以確定這個屬性或變數一定不為空時,我們就用上面講解到的去定義變數。否則就把它宣告為可空變數。

可空變數的特點:

  • 在宣告的時候一定用標準的宣告格式定義。不能用可推斷型別的簡寫。
  • 變數型別後面的?符號不能省略。不然就和普通的變數沒區別了。
  • 其初始化的值可以為null或確定的變數值。

定義格式:var/val 變數名 : 型別? = null/確定的值

1.3 後期初始化和延遲初始化

在1.2節中,當在類中定義一個變數(屬性)的時候是必須初始化的。這在平時的實際開發中能滿足大部分的需求。但是還是有一些特殊的場景中不能滿足。比如說:Android開發中對元件變數的宣告與賦值,以及在使用Dagger2註解變數等。這就需要Kotlin中特有的後期初始化屬性來滿足這個需求了。當然這裡還為大家講解延遲初始化,在實際的開發中也是很有用處的。

1.3.1 後期初始化屬性

聲明後期初始化屬性的特點:

  • 使用lateinit關鍵字
  • 必須是可讀且可寫的變數,即用var宣告的變數
  • 不能聲明於可空變數。
  • 不能聲明於基本資料型別變數。例:Int、Float、Double等,注意:String型別是可以的。
  • 聲明後,在使用該變數前必須賦值,不然會丟擲UninitializedPropertyAccessException異常。
// 宣告元件
private lateinit var mTabLayout : TabLayout

lateinit var a : Int // 會報錯。因為不能用於基本資料型別。

// 賦值
mTabLayout = find(R.id.home_tab_layout)

// 使用
mTabLayout.setupWithViewPager(mViewPager)

1.3.2 延遲初始化屬性

所謂延遲初始化即:指當程式在第一次使用到這個變數(屬性)的時候在初始化。

宣告延遲初始化屬性的特點:

  • 使用lazy{}高階函式,不能用於型別推斷。且該函式在變數的資料型別後面,用by連結。
  • 必須是隻讀變數,即用val宣告的變數。
// 宣告一個延遲初始化的字串陣列變數
private val mTitles : Array<String> by lazy {
    arrayOf(
            ctx.getString(R.string.tab_title_android),
            ctx.getString(R.string.tab_title_ios),
            ctx.getString(R.string.tab_title_h5)
    )
}

// 宣告一個延遲初始化的字串
private val mStr : String by lazy{
    "我是延遲初始化字串變數"
}

二、Kotlin中常量的用法

Kotlin中使用val時候對應的Java程式碼:

Kotlin中的 val numA = 6   等價於  Java中的:public final int numA = 6
很顯然,Kotlin中只用val修飾還不是常量,它只能是一個不能修改的變數。那麼常量怎麼定義呢?其實很簡單,在val關鍵字前面加上const關鍵字。

即:const val NUM_A = 6
其特點:const只能修飾val,不能修飾var

宣告常量的三種正確方式

  • 在頂層宣告
  • 在object修飾的類中宣告,在kotlin中稱為物件宣告,它相當於Java中一種形式的單例類
  • 在伴生物件中宣告

三、Kotlin中的註釋

Kotlin中的註釋幾乎和Java沒什麼區別。唯一的區別在於Kotlin中的多行註釋中可以巢狀多行註釋,而Java中是不能的。

3.1 單行註釋

兩個斜槓開頭表示單行註釋(//)

3.2 多行註釋(塊註釋)

以斜槓加星號開頭(/*),同時以星號加斜槓結尾(*/),中間這是要註釋的程式碼塊!

3.3 多行註釋巢狀

kotlin中塊註釋的級聯使用,其實個人覺得塊註釋的巢狀使用的意義不大,不過從視覺上確實能給人一種層次感

  /*
    第一層塊註釋
    /*
        第二層塊註釋
        /*
            第三層快註釋
            這種註釋方式在java中是不支援的,但是在kotlin中是支援的。算是一個亮點吧(貌似意義不大)。
         */
     */
 */

           注:在Java中使用上面的註釋程式碼直接報錯。

3.4 類註釋、方法註釋

和Java是一樣的

/**
 *  3. 方法的註釋(同java一樣)
 */
fun testMethodNote(){
    
}