news 2026/6/12 20:02:03

Java Main方法为什么必须是 public static void?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java Main方法为什么必须是 public static void?

为什么必须是 public static void

    • 前言
    • 正文
      • 一、为什么必须是 public?
      • 二、为什么必须是 static?
      • 三、为什么返回值必须是 void?
      • 四、为什么方法名必须固定为 main?
      • 五、为什么入参必须是 String[] 字符串数组?
    • 总结如下

前言

下午在这坐班,跟一老哥聊天,给我笑死了,在这聊技术,我问他什么是java他说是编程语言,我说有啥区别呢,他就不知道了,不过还能编一编,我随后又问为什么java写代码的时候为什么必须用 public static void,他就懵逼了,哈哈哈,其实所有Java程序员都写过:

public static void main(String[] args)

但是90%的人只会死记硬背,根本不知道为什么这一串单词几乎不能改动。

正文

一、为什么必须是 public?

核心原因:JVM对于我们自己写的Java代码来说,属于外部程序,不在项目的包、类体系内。
Java有四种访问权限,权限范围从小到大依次是:

  • private(仅本类可见)
  • default(同包可见)
  • protected(同包+子类可见)
  • public(全局所有位置可见)

如果main方法不设置为public,外部的JVM就没有访问权限,找不到程序的入口方法,直接报错无法启动程序。简单来说,

public就是专门给JVM开启的访问权限,是程序启动的必备钥匙。

二、为什么必须是 static?

这是最核心的关键点:程序刚刚启动的瞬间,我们编写的类仅仅完成了加载,没有创建任何实例对象。普通的实例方法,必须通过new创建对象之后才能调用。但main是程序的入口,是最先执行的方法,根本没有前置代码帮我们创建对象。而static静态方法的特性就是:依托类本身存在,不需要实例对象,类加载完成后就可以直接通过类名调用。

只有加上static,JVM才能在无对象的初始状态下,成功调用main方法启动程序。

三、为什么返回值必须是 void?

对比C/C++就能轻松理解,C语言的main方法有int返回值,主要是给操作系统传递程序退出状态,标识程序正常结束还是异常崩溃。但Java的程序退出机制,完全由JVM全权管控,和main方法的返回值没有任何关系。JVM退出只看两个条件:一是所有非守护线程全部执行完毕,二是代码调用了exit退出方法。

这就导致main方法的返回值没有任何接收方、没有任何实际作用,无论返回什么都不会影响程序运行和退出状态,所以Java直接规定main方法统一使用void无返回值。

四、为什么方法名必须固定为 main?

这是JVM的硬性固定规则,属于语法约定。JVM启动程序时,只会主动检索名为main的方法作为唯一入口。修改成Main、MAIN、main1等任何名称,都会导致JVM找不到程序入口,程序无法启动。

五、为什么入参必须是 String[] 字符串数组?

Java程序支持终端命令行传参启动,我们在命令行执行java命令运行程序时,后面可以携带多个自定义参数。
所有命令行传递的参数,本质都是字符串格式,且参数个数不固定,可能是0个、1个甚至多个。为了兼容不定数量的字符串参数,main方法的入参统一设置为String[]字符串数组,用来批量接收所有命令行参数。

总结如下

1、public:对外开放访问权限,让外部JVM可以识别、调用程序入口;
2、static:无需实例化对象,类加载后JVM可直接调用,适配程序启动初始状态;
3、void:Java程序退出由JVM线程状态决定,main方法返回值无实际意义;
4、main:JVM约定的唯一程序入口方法名,不可修改;
5、String[]:用于接收命令行传递的不定数量的字符串参数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 20:02:02

终极指南:如何快速掌握N_m3u8DL-RE流媒体下载工具

终极指南:如何快速掌握N_m3u8DL-RE流媒体下载工具 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE N…

作者头像 李华
网站建设 2026/6/12 19:53:56

AI 电动摩托车升降台智能功率 MOSFET 完整选型方案

随着AI技术在智能车库与维修站中的普及,电动摩托车升降台对功率MOSFET提出了更苛刻的要求:高功率密度、快速动态响应、高可靠性与节能。微碧半导体(VBsemi)基于超结、SGT及Trench工艺,为您提供覆盖主电源、电机驱动、控…

作者头像 李华
网站建设 2026/6/12 19:46:57

从电磁学到流体力学:旋度散度为零这个‘恒等式’到底有多重要?

从电磁学到流体力学:旋度散度为零的恒等式为何是物理世界的基石?在电磁场仿真软件的参数设置中勾选"Curl-free"选项时,工程师们可能不会想到,这个看似简单的复选框背后隐藏着自然界最基本的约束法则。当流体力学研究者调…

作者头像 李华
网站建设 2026/6/12 19:43:44

工业控制全能连接芯片MCF537x:集成USB、以太网与硬件加密的嵌入式方案

1. 项目概述:为什么工业控制需要“全能型”连接芯片?在工业自动化、智能楼宇或者复杂的设备管理系统中,我们工程师经常面临一个头疼的问题:设备既要能和上位机或服务器高速交换数据,又要能直接连接U盘、扫码枪等外设&a…

作者头像 李华
网站建设 2026/6/12 19:40:59

OBS多平台直播终极指南:3步实现高效多路推流方案

OBS多平台直播终极指南:3步实现高效多路推流方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾为无法同时在多个平台直播而感到困扰?OBS Multi RTMP插…

作者头像 李华