main方法是Java程序的唯一启动入口,JVM仅识别public static void main(String[] args)签名,要求public、static、void、main名称及String[]参数,其他类可无此方法。

main方法是Java程序的启动开关,JVM靠它开始执行整个应用。没有它,普通类就无法被java命令直接运行。
main方法是JVM唯一认的入口
JVM启动时只找一种签名的方法:public static void main(String[] args)。它不看方法体里写了什么,只严格匹配这五个要素:
- 访问修饰符必须是public(否则JVM跨类调用失败)
- 必须带static(避免先创建对象,节省启动开销)
- 返回类型必须是void(JVM不接收也不处理返回值)
- 方法名必须是小写的main(Main、main2、MAIN都不行)
- 参数只能是String[] args(哪怕写成String args也可以,但类型不能换成int[]或List)
不是每个类都要写main方法
main方法只对“要被java命令直接运行”的类才必需。很多Java代码根本不依赖它:
- Web项目里的Servlet、Controller类由Tomcat等容器调用生命周期方法
- JUnit测试类由测试框架驱动,框架自己有main
- 工具类、实体类、接口实现类,只要不打算单独运行,就可以没有main
args参数是命令行传值的通道
String[] args不是摆设,它是程序和外部交互的第一道接口:
立即学习“Java免费学习笔记(深入)”;
- 运行java MyApp a "hello world" 123时,args数组就是{"a", "hello world", "123"}
- 空格分隔,双引号包裹的内容算一个整体元素
- args可以为空(java MyApp),此时args.length == 0,不会报错
- 常见用途包括传配置路径、开启调试模式、指定输入文件名等
main方法能被当成普通静态方法调用
它的特殊性只在JVM启动时体现,其他时候它和别的static方法没区别:
- 可以在另一个类里写MyApp.main(new String[]{"test"})来手动触发
- 同一个类里可以重载多个main(比如加个int参数),但只有标准签名的那个会被JVM选中
- 多个类各自有main,运行时指定哪个类名,就执行哪个类的main










