为啥 Kotlin 允许编写不带参数的 main 函数?
Posted
技术标签:
【中文标题】为啥 Kotlin 允许编写不带参数的 main 函数?【英文标题】:Why Kotlin allow write main function with no arguments?为什么 Kotlin 允许编写不带参数的 main 函数? 【发布时间】:2019-09-11 14:26:48 【问题描述】:最近开始学习Kotlin
,发现main()
函数可以不带参数写成这样:
fun main()
dayOfWeek()
这怎么可能?Kotlin
在幕后做了什么?
Java
不允许我们这样做。
【问题讨论】:
感谢您花时间学习新事物,而不是使用 *** 来修复错误:D. 【参考方案1】:main 的签名基于 Java 虚拟机的期望:
Java 虚拟机通过调用 main 方法开始执行 一些指定的类,传递给它一个参数,这是一个 字符串数组。
方法 main 必须声明为 public、static 和 void。它必须 指定一个声明类型为数组的形式参数(第 8.4.1 节) 细绳。因此,可以接受以下任一声明:
public static void main(String[] args) public static void 主要(字符串...参数)
Ref1, Ref2
所以是的,我们应该在main
方法中定义一个数组字符串参数。但是,正如你所问,
这怎么可能?Kotlin 在后台做了什么?
让我们看看,
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 使用方法重载来调用带有 String[]
参数的 main
方法。由此我们可以理解,Koltin 只是帮助我们节省了时间,让语法更具可读性。
在内部,Kotlin 使用 String[]
参数调用 main 方法。
提示
如果您使用的是 IntelliJ IDEA,则可以使用内置的 Kotlin 工具查看编译后的 Java 版本的 Kotlin 代码。
Menu > Tools > Kotlin > Show Kotlin Bytecode
点击Decompile
按钮
您可以从here找到带有屏幕截图的简单指南
【讨论】:
您使用哪个 IDE 进行 Kotlin 开发? IntelliJ IDEA ? 小毛病:它是调用main(String[])
的JVM启动器,当然它对Kotlin一无所知。【参考方案2】:
其他语言(如 C/C++)允许使用空参数列表的 main
函数。在幕后,它们只是通常的main
方法,参数被忽略。此功能纯粹是为了简化短程序和演示软件的语法
【讨论】:
以上是关于为啥 Kotlin 允许编写不带参数的 main 函数?的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin函数 ④ ( 匿名函数参数 | 匿名函数 it 关键字 )
为啥 Kotlin 不能推断以下 lambda 参数(在 Java -> Kotlin 转换之后)?