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

相关推荐
whoarethenext20 分钟前
使用 C++ 和 OpenCV 进行表面划痕检测
开发语言·c++·opencv·划痕检测
_一条咸鱼_26 分钟前
Android Runtime调试检测与反制手段(86)
android·面试·android jetpack
遇见尚硅谷1 小时前
C语言:20250719笔记
c语言·开发语言·数据结构·c++·算法
一起搞IT吧1 小时前
Camera相机人脸识别系列专题分析之十七:人脸特征检测FFD算法之libhci_face_camera_api.so 296点位人脸识别检测流程详解
android·图像处理·人工智能·数码相机·算法·计算机视觉
夜月蓝汐1 小时前
JAVA高级第六章 输入和输出处理(一)
java·开发语言
docker真的爽爆了2 小时前
bws-rs:Rust 编写的 S3 协议网关框架,支持灵活后端接入
开发语言·后端·rust
寄思~2 小时前
PyQt5—Qt QDialog 学习笔记
开发语言·笔记·python·qt·学习
爬点儿啥2 小时前
[JS逆向] 微信小程序逆向工程实战
开发语言·javascript·爬虫·微信小程序·逆向
Yolo566Q2 小时前
基于现代R语言【Tidyverse、Tidymodel】的机器学习方法
开发语言·经验分享·机器学习·r语言
aqi003 小时前
FFmpeg开发笔记(七十六)使用国产SDK的播放器wlmedia渲染视频
android·ffmpeg·音视频·直播·流媒体