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 分钟前
三步搞定短信验证码!SpringBoot集成阿里云短信实战
java·spring boot·后端
码农爱学习2 分钟前
C语言结构体对齐是怎么计算
java·c语言·数据库
黎雁·泠崖6 分钟前
吃透Java操作符入门:分类差异+进制转换+原反补码 核心前置知识(Java&C对比)
java·c语言·开发语言
天天摸鱼的java工程师6 分钟前
volatile 关键字底层原理:为什么它不能保证原子性?
java·后端
钟良堂6 分钟前
Java完整实现 MinIO 对象存储搭建+封装全套公共方法+断点上传功能
java·minio·断点上传
名字不好奇10 分钟前
C++虚函数表失效???
java·开发语言·c++
u01040583612 分钟前
Java中的服务监控:Prometheus与Grafana的集成
java·grafana·prometheus
行稳方能走远14 分钟前
Android java 学习笔记2
android·java
yaoxin52112316 分钟前
286. Java Stream API - 使用Stream.iterate(...)创建流
java·开发语言