main方法是Java程序的执行起点,JVM通过查找public static void main(String[] args)标准签名来启动应用;无此方法则无法独立运行,但非所有类都必需,仅启动类需要。

main方法是Java程序的执行起点,JVM启动时会查找并调用它,从而开始运行整个应用程序。 没有合法的main方法,独立运行的Java类就无法被JVM识别为可执行程序。
main方法的签名必须严格符合规范
Java虚拟机只认一种固定格式的main方法:
- 访问修饰符必须是public static,确保JVM无需实例化对象就能直接调用
- 返回类型必须是void,因为JVM不处理main方法的返回值
- 方法名必须是main,大小写敏感,写成Main或main2都会失败
- 参数必须是String[] args(也可写作String... args),用于接收命令行传入的字符串参数
JVM如何定位和调用main方法
当你执行java MyClass时:
- JVM先加载MyClass.class文件
- 在该类的字节码中搜索符合规范的public static void main(String[])方法
- 如果找到,就为其分配栈帧、初始化args数组(可能为空),然后执行方法体
- 如果没找到或签名不匹配,抛出NoSuchMethodError: main
main方法不是Java语法强制要求,而是JVM约定
一个Java类可以没有main方法,也能正常编译;它可能是工具类、接口实现、或是被其他类调用的组件。只有当这个类需要作为“启动类”被JVM直接运行时,才必须提供合规的main方法。例如:
立即学习“Java免费学习笔记(深入)”;
- Web应用中的Servlet类不需要main方法,由容器(如Tomcat)调用其生命周期方法
- 单元测试类通常也不含main,而是由JUnit框架驱动
- 但一个控制台小工具(如文件处理器、计算器)就必须靠main来启动
常见误区与注意事项
- main方法可以重载,但只有标准签名的那个会被JVM调用
- main方法可以被其他代码像普通静态方法一样调用(比如在另一个类里写MyClass.main(args))
- 多个类可以各自有main方法,运行时指定哪个类名,就执行哪个类的main
- args数组内容来自命令行空格分隔的字符串,如java Test a "hello world" 123 → args = {"a", "hello world", "123"}










