在Java里main方法有什么作用_Java程序入口机制说明

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 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