gpt4 book ai didi

kotlin - 为什么 Kotlin 允许编写没有参数的 main 函数?

转载 作者:行者123 更新时间:2023-12-01 07:50:21 25 4
gpt4 key购买 nike

最近开始学习Kotlin,发现main()函数可以不带参数写成这样:

fun main() {
dayOfWeek()
}

这怎么可能, Kotlin 在幕后做了什么? Java 不允许我们这样做。

最佳答案

main 的签名基于 Java 虚拟机的期望:

The Java Virtual Machine starts execution by invoking the method main of some specified class, passing it a single argument, which is an array of strings.

The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String. Therefore, either of the following declarations is acceptable:

public static void main(String[] args) public static void main(String... args)



Ref1 , Ref2

所以是的,我们应该在 main 方法中定义一个数组字符串参数。但是,正如你所问的,

How is this possible and what Kotlin does under the hood?



让我们来看看,

Kotlin 代码
// fileName : Main.kt
fun main() {
println("Hello World!")
}

编译后的 Java 代码

public final class MainKt {
public static final void main() {
String var0 = "Hello World!";
System.out.println(var0);
}

// $FF: synthetic method
public static void main(String[] var0) {
main();
}
}

如您所见,在编译后的 Java 代码中,Kotlin 使用方法重载以 main 参数调用 String[] 方法。由此我们可以理解,Koltin 只是帮助我们节省时间并使语法更具可读性。

在内部,Kotlin 使用 String[] 参数调用 main 方法。

提示

如果您使用的是 IntelliJ IDEA,则可以使用内置的 Kotlin 工具查看 Kotlin 代码的已编译 Java 版本。
  • Menu > Tools > Kotlin > Show Kotlin Bytecode
  • 点击 Decompile 按钮

  • 您可以从 here 找到带有屏幕截图的简单指南

    关于kotlin - 为什么 Kotlin 允许编写没有参数的 main 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55793647/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com