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放到最前面。

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

相关推荐
AKA__Zas30 分钟前
芝士算法(前缀和2.0)
java·数据结构·算法·leetcode·哈希算法·学习方法
caishenzhibiao37 分钟前
降雨带波段点差 同花顺期货通指标
java·c语言·c#
七夜zippoe1 小时前
OpenClaw Prompt 工程:从角色设定到 Skill 封装的 Agent 输出质量方法论
java·服务器·prompt·openclaw·skill封装
rosmis1 小时前
agent各指标定义
android·java·开发语言
mifengxing1 小时前
Java 集合进阶(一)
java·开发语言·数据结构·复习笔记
令狐前生2 小时前
Intellij IDEA 2025 破解安装
java·ide·intellij-idea
数聚天成DeepSData2 小时前
数聚天成 DeepSData 数据价值落地实战指南
java·maven·devops
小小小米粒2 小时前
阿姆达尔定律(Amdahl‘s Law)
java·开发语言
知彼解己2 小时前
Java 版本演进
java·开发语言·spring boot
极客先躯3 小时前
高级java每日一道面试题-2026年05月11日-实战篇[Docker]-如何容器化金融产品推荐系统?
java·运维·docker·容器·金融·高级面试·金融产品推荐系统