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()
和程序参数了。你可以不改代码,仅通过命令行传参就改变程序行为。这是每个程序员都必须掌握的基础技能!