kotlin屬性初始化和懶加載之lateinit澈段、by lazy

java屬性的初始化

在說kotlin屬性初始化之前我們先來看下java屬性的初始化

//可以不設置初始值悠菜,默認為null
    private Object object;

    //可以不設置初始值,默認為null败富,類創(chuàng)建時就進行默認復制
    private static Object sObject;

    {
        object = new Object();
        System.out.println("對象代碼塊");
    }

    //靜態(tài)代碼塊在類創(chuàng)建時就進行初始化
    static {
        //object須為動態(tài)的悔醋,
        sObject = new Object();
        System.out.println("靜態(tài)代碼塊");
    }

    //構造函數(shù),創(chuàng)建實例對象的時候
    public UserBean() {
        object = new Object();
        System.out.println("構造函數(shù)");
    }

大體分為成員變量初始化兽叮、靜態(tài)成員初始化芬骄、代碼塊初始化、靜態(tài)代碼塊初始化
執(zhí)行順序打印如下:


image.png

kotlin屬性初始化

  • 1.類體內定義屬性鹦聪,同時初始化


    image.png

    從上圖可以看出账阻,編譯器直接報錯了,屬性必須要被初始化泽本。那么我們手動給他賦值為null呢淘太,再來看看:


    image.png

    結果編譯器還是報錯,提示null不能賦值為一個非空值,意思是name默認為非空蒲牧。寫到這里撇贺,突然想到?可以聲明修飾一個可空的屬性冰抢,于是就有了
    image.png

    編譯通過松嘶,說明這種方式的初始化必須的給一個非null的默認值,或者通過挎扰?指定一個null的初始值翠订,初始值為null時,下面使用的地方也一定要通過name?進行訪問遵倦,示例如下:

    init {
        name?.length
    }
  • 2.主構造函數(shù)內定義屬性尽超,使用傳入的參數(shù)初始化屬性
class User constructor(var name: String) {

}
  • 3.類體內定義屬性,init 塊里初始化
    init {
        name = "haha";
    }

再來看下lateinit和by lazy的區(qū)別:

lateinit

lateinit延遲初始化梧躺,lateinit只能修飾var橙弱,不能修飾val,當我們使用lateinit時就是告訴編譯器這個屬性的初始化時機由開發(fā)者把控燥狰,當我們未給這個被lateinit修飾的變量任何初始化時棘脐,


image.png

原因就是編譯器會把lateinit修飾的變量在這個類中所有方法遍歷一遍,看有沒有對它進行初始化龙致,沒初始化就會報錯蛀缝。因此lateinit修飾的變量一定是要進行初始化的

by lazy

by關鍵字在kotlin中表達的委托的概念,by lazy只是會在使用到的時候進行初始化(類似懶漢式的單例),使用代理的方式調用get/set方法目代,所以var 不能聲明by lazy修飾的屬性

class User private constructor() {

    companion object{
        val instance:User by lazy {
            User()
        }
    }

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末屈梁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榛了,更是在濱河造成了極大的恐慌在讶,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霜大,死亡現(xiàn)場離奇詭異构哺,居然都是意外死亡,警方通過查閱死者的電腦和手機战坤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門曙强,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人途茫,你說我怎么就攤上這事碟嘴。” “怎么了囊卜?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵娜扇,是天一觀的道長错沃。 經常有香客問我,道長雀瓢,這世上最難降的妖魔是什么捎废? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮致燥,結果婚禮上,老公的妹妹穿的比我還像新娘排截。我一直安慰自己嫌蚤,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布断傲。 她就那樣靜靜地躺著脱吱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪认罩。 梳的紋絲不亂的頭發(fā)上箱蝠,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音垦垂,去河邊找鬼宦搬。 笑死,一個胖子當著我的面吹牛劫拗,可吹牛的內容都是我干的间校。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼页慷,長吁一口氣:“原來是場噩夢啊……” “哼憔足!你這毒婦竟也來了?” 一聲冷哼從身側響起酒繁,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤滓彰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后州袒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揭绑,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年郎哭,在試婚紗的時候發(fā)現(xiàn)自己被綠了洗做。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡彰居,死狀恐怖诚纸,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情陈惰,我是刑警寧澤畦徘,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布毕籽,位于F島的核電站,受9級特大地震影響井辆,放射性物質發(fā)生泄漏关筒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一杯缺、第九天 我趴在偏房一處隱蔽的房頂上張望蒸播。 院中可真熱鬧,春花似錦萍肆、人聲如沸袍榆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽包雀。三九已至,卻和暖如春亲铡,著一層夾襖步出監(jiān)牢的瞬間才写,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工奖蔓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赞草,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓吆鹤,卻偏偏與公主長得像房资,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子檀头,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容