kotlin中 init、constructor、companion object 调用顺序

本文详细探讨了Kotlin中类的构造器、init代码块以及伴生对象的初始化顺序。通过实例展示了不同构造方式的执行流程,强调伴生对象的初始化在类加载时进行,而init代码块会合并到构造方法中。同时,文章指出伴生对象类似Java的静态成员,其init块等同于静态代码块,只在类加载时执行一次。
摘要由CSDN通过智能技术生成


class Human {

    private var work: String = "医生"

    constructor() {
        println("主构造方法 constructor")
    }

    constructor(name: String) {
        println("带参数次构造方法 constructor $name")
    }

    init {
        println("Human init")
    }

    init {
        println("Human init $work")
    }

    companion object {

        val instance: Human by lazy {
            Human("John")
        }

        init {
            println("companion init one")
        }

        init {
            println("companion init two")
        }
    }

}

调用Human() ,出现结果:

companion init one
companion init two
Human init
Human init 医生
主构造方法 constructor

调用有参构造方法Human("Tom") ,出现结果

companion init one
companion init two
Human init
Human init 医生
带参数次构造方法 constructor Tom

调用有参构造方法Human.instance ,出现结果

companion init one
companion init two
Human init
Human init 医生
带参数次构造方法 constructor John

Kotlin中的init代码块就相当于Java中的普通代码块,在创建对象的时候代码块会先执行。注意是每次创建都会执行一遍

那如果伴生对象里的instance不是懒加载的,出现结果

Human init
Human init 医生
带参数构造方法 constructor John
companion init one
companion init two

对于伴生对象,我们可以这样简单的理解

Kotlin中的伴生对象相当于Java中的Static关键字。
伴生对象里的init代码块就相当于Java中的静态代码块。在类加载的时候会优先执行且只会执行一次。

总结:由于伴生对象中的代码是在类加载时就会执行,所以伴生类初始化会先执行,再执行本身构造方法, 会把init代码 合并到构造方法中,但会插到构造方法最前面。

参考文章:kotlin中 init、constructor、companion object 调用顺序_千寻-CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值