kotlin中的初始化问题纪录

1. init 代码块的顺序问题

init代码块和成员变量实质上是按先后顺序执行的。若果init{} 中有成员变量使用。要把成员变量放到代码块之前。

2. init代码块之中的函数问题

下面是一段错误的代码:

Kotlin 复制代码
class mkotlin{
    val info:String
    init {
        getInfoMethod()
        info ="adaddddd"
    }
    
    fun getInfoMethod() = println("info 的值 ${info}")
}
fun main(){
    mkotlin().getInfoMethod()

}

错误原因:

mkotlin().getInfoMethod() 中的第一个括号 = 调用mkotlin的主构造函数。

主构造函数会先调用init代码块。此时getInfoMethod() 先于info初始化。

3. 初始化陷阱

下面是一段会崩溃的代码。无法取得.length()的值的。

Kotlin 复制代码
class mkotlin(_info :String){

    val content:String =getInfoMethod()
    private val info:String =_info

    private fun getInfoMethod() = info
}
fun main(){
    println("长度 ${mkotlin("changdu").content.length}")

}

问题的原因:

**1.**mkotlin("changdu") 调用主构造函数

  1. content访问getInfoMethod 方法,获取info。----》info还没有来的及初始化,无法确保info一定会有值

所以info放到最前面。

所有类成员都放到最前面去

相关推荐
星火开发设计1 分钟前
堆排序原理与C++实现详解
java·数据结构·c++·学习·算法·排序算法
七七powerful9 分钟前
docker28.1.1和docker-compose v.2.35.1安装
java·docker·eureka
小白学大数据18 分钟前
百科词条结构化抓取:Java 正则表达式与 XPath 解析对比
java·开发语言·爬虫·正则表达式
2501_9418072624 分钟前
在迪拜智能机场场景中构建行李实时调度与高并发航班数据分析平台的工程设计实践经验分享
java·前端·数据库
一 乐28 分钟前
餐厅点餐|基于springboot + vue餐厅点餐系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
ss27330 分钟前
volatile的可见性、安全发布的秘密与ThreadLocal原理
java·开发语言
小猪配偶儿_oaken38 分钟前
SpringBoot实现单号生成功能(Java&若依)
java·spring boot·okhttp
宋情写38 分钟前
JavaAI04-RAG
java·人工智能
毕设源码-钟学长42 分钟前
【开题答辩全过程】以 中医健康管理系统为例,包含答辩的问题和答案
java
susu108301891142 分钟前
docker部署 Java 项目jar
java·docker·jar