Kotlin 什么时候调用对象的init块?

Kotlin 什么时候调用对象的init块?,kotlin,Kotlin,我试图知道使用以下代码在Kotlin中何时调用对象的init块,但在控制台中没有得到任何结果: fun main(args: Array<String>) { TestObj TestObj } object TestObj { var count = 0 init { fun howManyTimes() { println(++count) } } } fun main(args

我试图知道使用以下代码在Kotlin中何时调用
对象的
init
块,但在控制台中没有得到任何结果:

fun main(args: Array<String>) {
    TestObj
    TestObj
}

object TestObj {
    var count = 0

    init {
        fun howManyTimes() {
            println(++count)
        }
    }
}
fun main(args:Array){
测试对象
测试对象
}
对象TestObj{
变量计数=0
初始化{
《欢乐时光》{
println(++计数)
}
}
}

您在控制台中没有得到任何输出,因为您在
init
块中声明函数,而不是调用它

TestObj
代码更改为:

object TestObj {

    var count = 0

    init {
        howManyTimes()
    }

    fun howManyTimes() {
        println(++count)
    }
}

上面的答案清楚地解释了为什么你们并没有得到预期的产出,我会尽力回答你们的问题

什么时候调用对象的init块

init关键字引入初始值设定项块。这些区块包含 创建类时执行的初始化代码,并且 拟与主要施工人员一起使用。因为 主构造函数具有受约束的语法,它不能包含 初始化代码;这就是为什么有初始值设定项块。如果你 如果需要,可以在一个类中声明多个初始值设定项块


接受的答案对于您的问题是正确的,但是对于您的具体问题,正确的答案是:

如果是
实例化,则在调用构造函数之前执行
init

如果它是一个
对象
,根据Kotlin文档,只要第一次调用(singleton)对象,就会调用它,因为静态对象是惰性初始化的