社交媒体

main 方法里的 String[] args 是什么?

main 方法里的 String[] args 是什么?

钩子

写 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 数组。 这就是它的全部秘密:程序还没跑起来之前,从外部递进来的数据。

05-args传参流程图.png
image-IjXE.png

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 分钟跑一遍上面的例子,比背十遍概念都值。


橙码酱,分享更有用的技术知识,助你成为更优秀的开发者。