Kotlin學習(一)--初嘗試(Var變量與Val常量)

前言:

Kotlin里面沒有new !!! Kotlin里面沒有new !!! Kotlin里面沒有new !!!
不用寫 ; 號結尾

一.var與val

var 代表變量
具體使用:

    var a: Int? = null//定義可為null
    var b: Any = Any()//定義類型為Any(就是Object).不可為null
    var c: String? = null//定義可為null
    lateinit var d: String//定義類型為String,延遲初始化,不能為基本類型數據

val 代表常量
定義比較簡單,和java一樣.必須初始化賦值

val e:String ="val"

二get() 和set()

kotlin里 變量定義默認是有get()和set()的,

var <propertyName>: <PropertyType> [= <property_initializer>]
      <getter>
      <setter>

上面這個看不懂也沒關系.
具體點

 var data: Any = Any()
        get() {
  //這里的field代表data,可以理解為臨時變量,用于代表訪問data,
  //因為直接return data的話,在kotlin data就代表get()方法,就死循環了..
            return field
        }
        set(value) {
            field = value//同理
        }

var和val的get set會有區別

很好理解
var是變量,所以有get和set方法
val是常量,所以只有get方法

具體使用

  var data: Any = Any()
    fun test() {
        //相當于getData()
        var a = data
        HLog.i("a", a.toString())
        HLog.i("data", data.toString())

       //相當于setData()
        data = Any() 
        HLog.i("data", data.toString())
    }

測試結果:


Paste_Image.png

三.變量的空引用檢查

Kotlin 類型系統致力于消滅空引用!不允許聲明變量但不初始化!

很重要的一句話.說的也很明白
在這里我糾結了1個多小時,思想沒轉過來!

舉個例子:

1.成員變量延遲初始化

  private Object data;
  public Object getData() {
        if (data==null){
            data = new Object();
        }
        return data;
  }
 public void setData(Object data) {
        this.data = data;
    }

這種代碼在java里還是經常能見到的,延遲初始化.調用的時候才去創建
或是在沒有set的情況下就get,防止報空,防止被設置為null.初始化個默認值,

自動轉化成kotlin代碼是這樣的:

Paste_Image.png

報錯了!為什么會報錯?

Paste_Image.png

那么聲明一下,在返回類型后面加個?,允許return null

Paste_Image.png

仔細想想邏輯會發現有問題. data不可能為null
因為調用后返回的必定不為null.這里為了不報錯卻聲明返回可能會null.
這就不合理了.

換種寫法

Paste_Image.png

這樣邏輯是對了,但是這樣卻很麻煩.我將類型改為List

Paste_Image.png

直接 data.xxx 的話會提示出錯.
必須調用getData()來操作.這樣就感覺有點不和諧了.

我覺得這樣寫就好了

Paste_Image.png

因為使用kotlin一般不需要聲明get()和set()方法

當然,哪種寫法好,看各自的愛好了.如果聲明的不是很耗性能的對象,我認為
可以直接初始化

四.lateinit 延遲初始化var

   lateinit var data: Any

注意是var,不能延遲初始化val.
雖然說是必須定義的時候就初始化,但還是提供了一個標識,讓var可以延遲初始化


Paste_Image.png

判null,會提示這是無用的代碼;
而且無法重寫get set方法,個人覺得這點不太友好.

---------------------------------分割線---------------------------------------

您的喜歡與回復是我最大的動力-_-

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態類型編程...
    任半生囂狂閱讀 26,276評論 9 118
  • Kotlin系統化學習-20170823文章中有大部分內容是借鑒《Kotlin實戰》中文版,特此注明一下。 Kot...
    ClAndEllen閱讀 1,732評論 2 10
  • google宣布Kotlin作為andorid一級開發語言有一段時間了。在這段時間,我也在新的模塊上嘗試使用了ko...
    鋒ivy閱讀 1,037評論 1 2
  • Google在今年的IO大會上宣布,將Android開發的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍灰_q閱讀 77,004評論 31 489
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399