当前位置: 首页 > news >正文

Kotlin main函数


main() 函数

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

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

fun main() {}

代码解释:

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

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

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

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

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

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

var decrease = 3fun main() {if (decrease == 0)returndecrease = decrease - 1println(decrease)main()
}

代码解释:

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

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

输出结果如下:

2
1
0

main 函数的参数

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

fun main(args: Array<String>) {}

代码解释:

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

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

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

那它有什么用?

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

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


命令行与程序参数

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

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


通过命令行传参

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

运行命令如下:

$ java -jar filename.jar args

代码解释:

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

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

示例

以下是一个简单的例子:

fun main(args: Array<String>) {println(args[0])println(args[1])
}

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

$ java -jar print_args.jar Hello, Kotlin!

输出结果:

Hello,
Kotlin!

代码执行如下:

println(args[0]) // Hello,
println(args[1]) // Kotlin!

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

Love
Kotlin!

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


有参数?没参数?

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

带参数的:

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

不带参数的:

fun main() {val firstName = "Luke"val lastName = "Skywalker"println(firstName + " " + lastName) // Luke Skywalker
}

两者都能正常运行。

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

fun main(args: Array<String>) {println(args[0]) // Loveprintln(args[1]) // Kotlin!
}fun main() {println("Hello, World!") // 不会被调用
}

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

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

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

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

http://www.dtcms.com/a/287862.html

相关文章:

  • RabbitMQ—事务与消息分发
  • JUC并发包CountDownLatch减法计数器的使用实例(多线程)
  • Git 完全手册:从入门到团队协作实战(2)
  • 万字解析LVS集群
  • Pandas 30分钟
  • Mybatis:注解完成增删改查
  • steam游戏搬砖项目超完整版实操分享
  • 解惑LINQ中的SelectMany用法
  • 48Days-Day03 | 删除公共字符,两个链表的第一个公共结点,mari和shiny
  • CCF编程能力等级认证GESP—C++8级—20250628
  • 【EMC设计基础--信号环路分析、PCB设计规则】
  • 深入解析文件操作(上)- 二进制文件和文本文件,流的概念,文件的打开和关闭
  • Visual Studio Code(VSCode)中设置中文界面
  • 使用C#对象将WinRiver项目文件进行复杂的XML序列化和反序列化实例详解
  • STM32_Hal库学习ADC
  • XSS的反射型、DOM型、存储型漏洞
  • sqli-labs靶场通关笔记:第32-33关 宽字节注入
  • Go语言中的类型转换与类型推断解析
  • Spring AI硬核攻略:235个模块解析 + 6大场景实战
  • view和pure的区别
  • 智能合约代理与批量调用优化:最小代理与MultiCall的应用
  • Python趣味算法:百钱百鸡问题——双重循环优化与算法效率分析
  • 【Bluedroid】btif_av_sink_execute_service之服务器启用源码流程解析
  • Typecho博客Ajax评论功能实现全攻略
  • 我是怎么设计一个防重复提交机制的(库存出库场景)
  • 【C语言进阶】结构体
  • Windows原生环境配置Claude Code MCP(通过JSON)
  • 简单易懂,快表 详解
  • 有趣的算法题:有时针分针秒针的钟表上,一天之内,时针和分针可重合多少次?分别在什么时刻重合?
  • 【Python】Pandas