钩子
写 main 方法写了半个月,有个东西你天天见、从没碰过:
public static void main(String[] args)
这个 String[] args,教科书一笔带过,教程让你"先记住"。今天给它一个出场机会——用一个例子,你会突然理解它。
01 先把 main 的每个词过一遍
| 单词 | 人话翻译 |
|---|---|
| public | 公开的,JVM 要从外面调用它,所以必须公开 |
| static | 静态的,程序启动时还没有对象,它不依赖对象就能被调用 |
| void | 没有返回值,程序入口不需要给谁返回结果 |
| main | 方法名,JVM 只认这个名字,写错就找不到入口 |
| String[] args | 命令行参数,程序启动时从外部带进来的数据 |
前四个词背后是一整套面向对象的知识,现在记"人话翻译"就够了,第 13 篇讲类和对象时会回来重新理解它们。今天的主角是最后一个。
02 args 是什么:程序启动时带进来的数据
写这个程序:
public class ArgsDemo {
public static void main(String[] args) {
System.out.println("收到 " + args.length + " 个参数");
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "] = " + args[i]);
}
}
}
编译后这样运行(注意命令后面跟了两个词):
javac ArgsDemo.java
java ArgsDemo 张三 25
输出:
收到 2 个参数
args[0] = 张三
args[1] = 25
你在 java 命令后面敲的内容,会被空格切开,按顺序装进 args 数组。 这就是它的全部秘密:程序还没跑起来之前,从外部递进来的数据。


03 三个新手疑问,一次说清
问:什么都不传,args 是 null 吗?
不是。是空数组,args.length 是 0,不报错。所以遍历前不用判空。
问:args[1] 是数字 25 吗?
不是。是字符串 "25"。命令行进来的全是 String,要算术得先转换:Integer.parseInt(args[1])——转换的坑第 7 篇马上讲。
问:为什么我在 IDEA 里运行,args 是空的?
IDEA 默认不传参。要传的话:Run → Edit Configurations → Program arguments 填 张三 25。很多新手在这一步懵住:代码明明没错,args.length 就是 0。
04 它什么时候真的有用?
现在你可以怀疑:谁没事从命令行传参数?
- 真实项目:启动服务时传配置,
java -jar app.jar --server.port=8080,原理同一个 - 测试工具:给批量处理脚本传文件路径
- 看懂别人:开源项目 README 里那些启动命令,参数就是从 args 进去的
新手期它是"理解 Java 程序怎么接收外部输入"的最佳教具;工作后它无处不在。今天花 10 分钟跑一遍上面的例子,比背十遍概念都值。
橙码酱,分享更有用的技术知识,助你成为更优秀的开发者。