10天学会kotlin DAY5 初始化块

    val nameValue = nName;    // 第三步: 生成 nameValue 的细节

    println("init 代码块打印: $nameValue")



}



constructor(name: String, age: Int, sex: Char, height: Int) : this("tiger", 18, '男'){

// 第四步: 生成次构造的细节

    println("次构造函数被调用了")

}

}




[](https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF)3、延迟初始化 lateinit

------------------------------------------------------------------------------



**lateinit 在使用的时候,需要手动加载的懒加载**



val lateManager = LateManager()



lateManager.loadRequest()

lateManager.showResponseResult()

class LateManager{

// lateinit val AAA; val 是不可修改函数,在后面都无法修改了,肯定不能用val

lateinit var responseResultInfo: String      // lateinit 懒加载模式,在使用的时候,才会被加载

// 模拟服务器加载

fun loadRequest(){

    responseResultInfo = "服务器加载成功!"

}



fun showResponseResult(){

// 由于responseResultInfo 没有初始化,一调用就会直接导致崩溃,这里我们使用一个判断,判断 responseResultInfo 是否初始化

    if (::responseResultInfo.isInitialized){

        println("responseResultInfo: $responseResultInfo")

    }else{

        println("你都还么有初始化,是不是忘了!")

    }

}

}




[](https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF)4、惰性初始化 by lazy

-----------------------------------------------------------------------------



**惰性初始化 by lazy 是在使用的时候,自动加载的 懒加载方式**



val serverData = ServerData()

// 模拟数据库的加载,写一个定时器

Thread.sleep(5000)



println("开始加载数据")



println(serverData.dataBase)

class ServerData{

val dataBase by lazy {

    readSqlServerDatabaseAction()

}



private fun readSqlServerDatabaseAction(): String {



    println("数据加载中,请等待。。。。。。")

    println("数据加载中,请等待。。。。。。")

    println("数据加载中,请等待。。。。。。")

    println("数据加载中,请等待。。。。。。")

    println("数据加载中,请等待。。。。。。")

    println("数据加载中,请等待。。。。。。")

    println("数据加载中,请等待。。。。。。")

    println("数据加载中,请等待。。。。。。")



    return "database data load success ok";

}

}




[](https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF)5、初始化陷阱 01

------------------------------------------------------------------------



class ServerData{

// 在这里,看上去,代码没有任何问题,但是我们前面讲了,成员变量 number 和 init 是同级的。

// 那么就意味着 init 执行的时候,成员变量 number 还没有初始化

// 这里不要套入Java的思想,而是以顺序的思想去考虑

init {

    

    number = number.times(9)    // times(9)  指 number * 9

}



var number = 9

}




[](https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF)6、初始化陷阱 02

------------------------------------------------------------------------



class ServerData{

// 初始化的顺序 ServerData -> var info: String -> init -> getInfoMethod() -> info = “tiger”

// 这样会直接造成info 返回的是一个null ,因为在进入 init 之后,直接调用的就是getInfoMethod()方法,这时候 成员变量 info 还没有进行初始化赋值

var info: String



init {

    getInfoMethod()

    info = "tiger"



}



private fun getInfoMethod() {

    println("info: $info")

}

}




[](https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF)7、初始化陷阱 03

------------------------------------------------------------------------



// 这样写,看着没有什么问题,但是结合函数里面的代码,会直接导致崩溃

// 当你调用 主构造函数,传入info, 再执行成员变量,调用getInfoMethod() 函数,获取字符长度的时候,其实你获取的是null

println("内容的字符长度是:${User("tiger").content.length}")

class User(_info: String) {

val content = getInfoMethod()



private val info = _info



private fun getInfoMethod() = info
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值