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

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

相关推荐
SamDeepThinking20 小时前
从REST到gRPC,一个API选型的思考框架
java·后端·程序员
Zane199421 小时前
接口都能写默认实现了,为什么还需要抽象类
java·后端
未秃头的程序猿21 小时前
读Spring AI源码的方法——不是硬啃,是带着问题去翻
java·后端·spring
用户31268748772021 小时前
别再 Thread.sleep 硬等了!并发工具类到底怎么选?
java
Java内核笔记21 小时前
万字长文剖析 Spring Boot 4 自动配置机制源码:从 @EnableAutoConfiguration 到条件装配
java·后端
evans在进步21 小时前
Spring MVC 核心机制详解:全局异常处理、请求跳转与数据绑定
java·spring·mvc
weixin_BYSJ198721 小时前
springboot小区物业管理小程序---附源码45555
java·javascript·spring boot·python·django·flask·php
coder_lorraine21 小时前
Halo 2.x 回收站文章无法删除?一篇文章教你彻底解决
java·运维
索隆zoro21 小时前
Army 进阶:DML 操作体系与 Spring AI 集成
java
吃饱了得干活21 小时前
为什么你的Service越写越臃肿?三层架构的“业务逻辑层”是个黑盒
java·后端·架构