为什么 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)
上一篇 2022年5月6日 下午1:20
下一篇 2022年5月6日 下午1:20


相关推荐

  • 私有IP地址_ipv6私有地址

    私有IP地址_ipv6私有地址私有IP地址:在ABC三类网络中,如下三段网络地址为私有IP地址,如何人都可以自行在自己的局域网中使用这些IP地址.A类私有:10.0.0.110.255.255.254B类私有:172.16

    2022年8月5日
    15
  • ActivityManager 讲解

    ActivityManager 讲解1.ActivityManager是android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护,本blog就是着手对ActivityManager框架作一个整体的了解       2.先看一个静态类结构图:       上图很清楚地描述了ActivityManager框架的几个主要类之间的关系,我们做应用开发接触很多的

    2025年9月25日
    11
  • 感知机的对偶形式「建议收藏」

    感知机的对偶形式「建议收藏」首先声明感知机的对偶形式与原始形式并没有多大的区别,运算的过程都是一样的,但通过对偶形式会事先计算好一些步骤的结果并存储到Gray矩阵中,因此可以加快一些运算速度,数据越多节省的计算次数就越多,因此比原始形式更加的优化。首先我们介绍一下感知机的原始形式,之后与其对比。感知机感知机是二类分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,分别去+1和-1两值。感知机对应与输入空间中将实例划

    2022年10月20日
    5
  • TCP/ip详解_TCP/IP详解

    TCP/ip详解_TCP/IP详解  TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。…

    2025年7月4日
    3
  • Bluez java_Bluez相关的各种tools的使用

    Bluez java_Bluez相关的各种tools的使用7.1BccmdBccmd是用来和CSR的芯片进行BCCMD(Bluecorecommandprotocol)通讯的一个工具。BCCMD并非蓝牙协议栈的标准,而是CSR芯片的专属协议Bccmd的调用格式为:bccmd[-t][-d][]Tansport类型包括HCIUSBBCSPH4等,常用的估计就是HCI和BCSP两种。需要注意一下他们的使用场合:HCI是…

    2025年5月22日
    6
  • Kimi 迄今能力最强开源思考模型,月之暗面 Kimi K2 Thinking 发布

    Kimi 迄今能力最强开源思考模型,月之暗面 Kimi K2 Thinking 发布

    2026年3月12日
    3

发表回复

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

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