为什么Java的main函数的参数只能是String[] ?? 其他场景的情况也是比比皆是啊?为何不行?
这是 Java 语言规范规定的,Java 程序的入口点(main 方法)必须是:
public static void main(String[] args)
这样写是有原因的,逐条解释如下:
✅ 为什么必须是 String[] args?
1. Java 启动时从命令行传参
-
当你运行 Java 程序时,可以在命令行传参数:
java MyProgram hello world 123
这时,main 方法中的 args 就会是:
args[0] = "hello" args[1] = "world" args[2] = "123"
所以,String[] args 的作用就是:接收命令行参数。
✅ 为什么是 static?
-
因为程序启动时还没有创建任何对象,如果
main不是static,就必须先创建类对象再调用方法,这不符合程序启动流程。 -
static让 JVM 能直接通过类名来调用方法:
MyClass.main(args);
✅ 为什么是 public?
-
JVM(Java 虚拟机)在外部调用
main方法,必须能访问它。 -
如果
main不是public,JVM 就无法调用,会报错:
Error: Main method not found in class ...
✅ 为什么不能换参数类型,比如 String... args?
其实可以:
public static void main(String... args) // 可变参数写法,也被 JVM 支持
这和 String[] args 本质上一样,JVM 会正常识别。
但像下面这样就不行:
public static void main(int[] args) // ❌ JVM不识别 public static void main(String arg) // ❌ 参数不是数组 public void main(String[] args) // ❌ 不是static private static void main(String[] args) // ❌ 不是public
✅ 小结
| 关键词 | 含义 |
|---|---|
public |
JVM 要从外部调用 main 方法 |
static |
启动时无需创建对象 |
void |
启动函数不返回任何内容 |
String[] |
用来接收命令行参数 |
如你所说,Python 的写法是直接执行,但 Java 属于更严谨的静态语言,这种“入口固定写法”其实也有助于统一规范、方便工具调用和编译执行。

浙公网安备 33010602011771号