为什么 main 方法是 public static void ?

为什么 main 方法是 public static void ?初级程序员面试经常会遇到这个问题,这篇博客带你排异解难。

大家好,又见面了,我是你们的朋友全栈君。

写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的

这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

用知识改变命运,让我们的家人过上更好的生活


main 方法是我们学习Java编程语言时知道的第一个方法,你是否曾经想过为什么 main 方法是 public、static、void 的。当然,很多人首先学的是C和C++,但是在Java中main方法与前者有些细微的不同,它不会返回任何值,为什么 main 方法是 public、static、void,这篇文章尝试去找到一些答案。

main 方法是Java程序的入口,记住,我们这里不会讨论Servlet、MIDlet和其他任何容器管理的java程序,在java核心编程中,JVM会查找类中的 public static void main(String[]args),如果找不到该方法就抛出错误NoSuchMethodError:main 程序终止。

main 方法必须严格遵循它的语法规则,方法签名必须是 public static void,参数是字符串数组类型,如果是Java1.5及以后的版本还可以使用可变参数:

public static void main(String... args)

1、为什么main方法是静态的(static)

  • 正因为main方法是静态的,JVM调用这个方法就不需要创建任何包含这个main方法的实例。

  • 因为C和C++同样有类似的main方法作为程序执行的入口。

  • 如果main方法不声明为静态的,JVM就必须创建main类的实例,因为构造器可以被重载,JVM就没法确定调用哪个main方法。

  • 静态方法和静态数据加载到内存就可以直接调用而不需要像实例方法一样创建实例后才能调用,如果main方法是静态的,那么它就会被加载到JVM上下文中成为可执行的方法。

2、为什么main方法是公有的(public)

Java指定了一些可访问的修饰符如:private、protected、public,任何方法或变量都可以声明为public,Java可以从该类之外的地方访问。因为main方法是公共的,JVM就可以轻松的访问执行它。

3、为什么main方法没有返回值(Void)

因为main返回任何值对程序都没任何意义,所以设计成void,意味着main不会有任何值返回。

4、总结

  • main方法必须声明为public、static、void,否则JVM没法运行程序

  • 如果JVM找不到main方法就抛出NoSuchMethodError:main异常,例如:如果你运行命令:java HelloWrold,JVM就会在HelloWorld.class文件中搜索public static void main (String[] args) 方法。

  • main方法是程序的入口,程序执行的开始处。

  • main方法被一个特定的线程”main”运行,程序会一直运行直到main线程结束或者non-daemon线程终止。

  • 当你看到“Exception in Thread main”如:Excpetion in Thread main:Java.lang.NullPointedException ,意味着异常来自于main线程。

  • 你可以声明main方法使用java1.5的可变参数的方式如:
    public static void main(String... args)

  • 除了static、void、和public,你可以使用finalsynchronized、和strictfp修饰符在main方法的签名中,如:
    public strictfp final synchronized static void main(String[] args)

  • main方法在Java可以像其他方法一样被重载,但是JVM只会调用上面这种签名规范的main方法。

  • 你可以使用throws子句在方法签名中,可以抛出任何checked和unchecked异常。

  • 静态初始化块在JVM调用main方法前被执行,它们在类被JVM加载到内存的时候就被执行了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138361.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • countdown timer plus_android studio计时器

    countdown timer plus_android studio计时器Inthisandroidcountdowntimerexample,we’llimplementatimerobjecttodisplaytheprogressinaProgressBar.Theapplicationwe’llbuildinthistutorialisausefulcomponentinQuizappswhere…

    2025年11月25日
    2
  • 数据库dml和ddl有什么区别(mysql是一种)

    DBMS中DDL和DML有哪些区别发布时间:2020-12-0312:07:24来源:亿速云阅读:119作者:小新这篇文章主要介绍DBMS中DDL和DML有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是DDL?DDL代表数据定义语言,它定义了数据库结构或数据库模式,可以将数据库中定义的数据的其他属性定义为属性域;还提供了指定一些约束以保持数据一致性的工具。D…

    2022年4月17日
    126
  • Pycharm自动导入模块小技巧「建议收藏」

    Pycharm自动导入模块小技巧「建议收藏」周末愉快!不知道大家周末写不写代码,哈哈,反正我已经加完班回来了,今天分享一个能提高编码效率的小技巧,可能你早就在用了,也可能像我一样刚学会,还是趁热跟大家分享一下。如果能把工具熟练运用,往往能达到事半功倍的效果,Pycharm是很多Python开发者的首选IDE,提供各种快捷键、重构功能、调试技巧等,Python是动态语言,对于自动导入模块没有静态语言那么方便,但有了Pycharm,还是…

    2022年8月27日
    5
  • linux终端运行w3m,W3M – 一款终端浏览器

    linux终端运行w3m,W3M – 一款终端浏览器w3m 是一个基于文本的网页浏览器 支持多种操作系统 在命令行终端可以很好的支持中文 即使在没有鼠标支持的情况下也可以检查网页的输出 本文列出常用的快捷键 如果你浏览的关注点是文字 而网页上又有很多干扰你的广告 在终端下使用 w3m 浏览将是一个很好的选择 w3m 可以自动为你去除哪些无聊的广告 专注于文字本身 而且超链接的跳转也很方便 看下文本浏览效果 示例如下 以浏览 https linux265

    2025年8月25日
    4
  • Mac安装pycharm,绑定anaconda3[通俗易懂]

    Mac安装pycharm,绑定anaconda3[通俗易懂]1、首先安装anaconda3(当然使用3啦,除非给自己找麻烦装2)进入官网,https://www.anaconda.com/distribution/,选择系统和版本、下载,傻瓜式安装,结束后,控制台输入:conda–version,输出版本号,表示安装成功。2、安装pycharm进入官网,https://www.jetbrains.com/pycharm/download/…

    2022年8月28日
    10
  • vscode前端插件安装「建议收藏」

    vscode前端插件安装「建议收藏」1.修改语言,如果英语六级的话,便就可以不用修改,按住ctrl+shift+x打开拓展,安装LanguagePacks插件,然后按住Ctrl+Shift+P打开命令调色板,搜索ConfigureDisplayLanguage命令然后按Enter键,将locale.json创建一个文件,其默认值设置为您的操作系统语言。修改为zh-cn语言即可。2.HTMLSnippets:超级实用且初级的H5代码片段以及提示;3.HTMLHint:html代码检测;4.HTMLCSSSupp

    2022年7月25日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号