Kotlin main函数


main() 函数

来仔细看看 main() 函数。实际上,它就是一个很常见的函数:你可以对它做任何你能对普通函数做的事。唯一的不同是:它是程序的入口点(entry point)。这意味着程序的执行从调用这个函数开始。

我们来拆解一下 main() 的结构:

kotlin 复制代码
fun main() {}

代码解释:

  • fun 是关键字,表示我们正在定义一个函数;

  • main 是函数名。这个名字不能改 :比如如果你改成 Main(),程序可能会编译成功,但不会运行;

  • 最后是函数体,和其他函数一样,写在 {} 大括号中。

实际上,main() 函数也可以有输入参数 ------ args,它并不是必须的,我们稍后会详细讲它。

总之,除了不能改名,main() 就是一个普通函数。

但它最主要的特点是:它必须存在。没有它,程序不会启动。不过,它也可以像其他函数一样被调用,比如它自己调用自己:

kotlin 复制代码
var decrease = 3

fun main() {
    if (decrease == 0)
        return
    decrease = decrease - 1
    println(decrease)
    main()
}

代码解释:

这个程序中,每次调用 main() 函数都会让全局变量 decrease 减 1,并输出当前的值,直到它变成 0。

"全局变量"表示这个变量在整个程序中都可以访问,包括在 main() 函数内部。

输出结果如下:

kotlin 复制代码
2
1
0

main 函数的参数

其实 main() 函数可以有输入参数。它们通常被命名为 args,并保存在一个字符串数组中。语法如下:

kotlin 复制代码
fun main(args: Array<String>) {}

代码解释:

使用 args 的方式和普通数组一样,例如:

  • args.size:获取参数个数;

  • args[1]:获取程序的第二个参数。

那它有什么用?

简单来说,main() 函数的参数就是程序运行时传入的数据。你可能见过类似的情景,比如"用某程序打开文件":这个文件路径就是通过参数传给程序的。

所以,借助 args,我们可以给程序传入外部数据。


命令行与程序参数

我们可以通过 IDE 工具命令行 给程序传入参数。你可能已经知道在 IDE 中该怎么做。命令行的方式稍微复杂点,但非常重要。

掌握命令行技巧对你以后编程的道路大有帮助。比如,它可以避免为程序构建 GUI 界面。


通过命令行传参

要从命令行运行程序,你需要一个已经 编译好的程序

运行命令如下:

bash 复制代码
$ java -jar filename.jar args

代码解释:

  • filename.jar:是你的程序文件;

  • args:是你传给程序的参数(中间用空格分隔);

示例

以下是一个简单的例子:

kotlin 复制代码
fun main(args: Array<String>) {
    println(args[0])
    println(args[1])
}

假设你将它保存为 print_args.kt,然后编译成 print_args.jar,运行命令如下:

bash 复制代码
$ java -jar print_args.jar Hello, Kotlin!

输出结果:

kotlin 复制代码
Hello,
Kotlin!

代码执行如下:

kotlin 复制代码
println(args[0]) // Hello,
println(args[1]) // Kotlin!

如果你输入参数为 "Love""Kotlin!",输出会变成:

kotlin 复制代码
Love
Kotlin!

所以,只通过改变命令行参数,不修改代码,就可以改变程序输出。


有参数?没参数?

main() 函数可以带参数也可以不带参数。来看两个示例:

带参数的:

kotlin 复制代码
fun main(args: Array<String>) {
    val firstName = "Luke"
    val lastName = "Skywalker"
    println(firstName + " " + lastName) // Luke Skywalker
}

不带参数的:

kotlin 复制代码
fun main() {
    val firstName = "Luke"
    val lastName = "Skywalker"
    println(firstName + " " + lastName) // Luke Skywalker
}

两者都能正常运行。

而且你可以在同一个文件中同时写这两种 main()

kotlin 复制代码
fun main(args: Array<String>) {
    println(args[0]) // Love
    println(args[1]) // Kotlin!
}

fun main() {
    println("Hello, World!") // 不会被调用
}

程序只会从 main(args: Array<String>) 开始执行。

但是注意:你不能 在一个文件中写多个参数一样的 main()。带参数或不带参数的 main() 都只能各写一个。

你也可以写带有其他参数类型的 main(),比如:

kotlin 复制代码
fun main(arg: Int) {}
fun main(a: Double, b: String) {}

但这些就只是普通函数了,不会作为程序入口点。

只有 main()main(args: Array<String>) 才能作为程序入口。


总结

  • 程序从 main() 开始执行;

  • 你可以用参数 args 向程序传入数据;

  • 你可以通过命令行或 IDE 设置这些参数;

  • Kotlin 1.3 以后,main() 可以没有参数;

  • 同一个文件只能有一个带参数的 main() 和一个不带参数的 main()

  • 其他写法的 main() 会被当作普通函数,不会自动运行。

现在,你已经学会了使用 main() 和程序参数了。你可以不改代码,仅通过命令行传参就改变程序行为。这是每个程序员都必须掌握的基础技能!

相关推荐
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁2 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
孙启超2 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust