在Kotlin中的main()函数之前执行哪些指令?
在Kotlin中,据说在Kotlin中的main()函数之前执行哪些指令?,kotlin,Kotlin,在Kotlin中,据说main函数是入口点(即“…执行程序的第一条指令的地方…”,请参阅)。但是,以下代码在1之前打印2: fun main(args: Array<String>) { println("1") } var print_me = println("2") fun main(args:Array){ println(“1”) } 变量print_me=println(“2”) 为什么?首先,JVM加载任何必需的类。作为这一过程的一部分,它将运行任何静态初
main
函数是入口点(即“…执行程序的第一条指令的地方…”,请参阅)。但是,以下代码在1
之前打印2
:
fun main(args: Array<String>) {
println("1")
}
var print_me = println("2")
fun main(args:Array){
println(“1”)
}
变量print_me=println(“2”)
为什么?首先,JVM加载任何必需的类。作为这一过程的一部分,它将运行任何静态初始化器 尽管您的代码看起来不在类中,但Kotlin/JVM将其编译为一个类;这将有一个字段用于
print\u me
(如何完成是一个实现细节;它可能是类上的一个静态字段,也可能是通过静态字段引用的实例上的一个静态字段)。在任何情况下,该字段都将有一个初始化器
现在,print\u me
的类型是Unit
。这是因为println()
函数没有返回有用的值。(其唯一原因是它的副作用。)但是JVM仍然会运行初始化器,它会在返回分配给print\u me
的Unit
之前愉快地打印“2”
稍后,初始化类后,运行时将调用main()
函数
当然,静态初始化器可以调用您喜欢的任何东西,因此在调用
main()
函数之前,它可能会执行各种操作。但在实践中,这种情况不会太多。自上而下初始化变量,然后调用main
。