理解Java中“public static void main”中的“static”

以下几点解释了main()方法中的“静态”是什么:

null
  • main()方法 :在Java中,main()方法是JVM(Java虚拟机)进入Java程序的入口点。JVM通过调用main()方法启动java程序。

图片[1]-理解Java中“public static void main”中的“static”-yiteyi-C++库

  • 静态是一个关键词 .在任何实体之前添加static的作用是使该实体成为类实体。这意味着在方法和变量之前添加static将使它们分别成为类方法和类变量,而不是实例方法和实例变量。 因此,静态方法和变量可以在类的帮助下直接访问,这意味着不需要创建对象来访问静态方法或变量。
// Making a function as staticstatic void func(){}// Making a variable as staticstatic int var;
  • 静态方法: 当用static关键字声明一个方法时,它被称为static方法。如上所述,在创建其类的任何对象之前,可以访问任何静态成员,而无需引用任何对象。
// Making a static functionclass GfG{    static void func()    {}}// Calling a static functionGfG.func();
  • 静态main()方法: 当在main()方法的函数定义中添加static关键字时,它被称为static main()方法。
class GfG{    // Making a static main function    public static void main(String[] args)    {}}

main()方法中需要静态 :由于main()方法是任何Java应用程序的入口点,因此必须将main()方法设置为静态,原因如下:

  • static main()方法使JVM可以非常清楚地调用它 用于启动Java应用程序 。否则,需要为每个Java应用程序构建指定入口函数,以便JVM启动应用程序。
  • 该方法是静态的,因为否则会出现 模棱两可 应该调用哪个构造函数。 例如,如果类看起来像这样:
public class GfG{  protected GfG(int g){}  public void main(String[] args){  }}
  • JVM现在进入一个模糊状态,决定是否应该调用新的GfG(int)?如果是的话,那么g应该是什么?如果不是,那么JVM是否应该在不执行任何构造函数方法的情况下实例化GfG? 这样的边缘情况和模糊性太多了,JVM在调用入口点之前必须实例化一个类,这是没有意义的。这就是为什么main是静态的。
  • main()方法是静态的,因为它对JDK很方便。考虑一个场景,它不强制使主()方法静态。在这种情况下,这只会使各种IDE更难自动检测项目中的“可启动”类。因此,将输入方法“main()”设置为“public static void main(String[]args)”是一种方便的约定。

如果我们不在main方法之前写“static”呢: 如果我们不在main方法之前写“static”,那么我们的程序将被编译而没有任何编译错误。但是在执行时,JVM会搜索主方法,它是公共的、静态的,返回类型和字符串数组作为参数。如果找不到这样的方法,则会在运行时生成错误。

爪哇

/*package whatever //do not write package name here */
import java.io.*;
class GFG {
public void main (String[] args) {
System.out.println( "GFG!" );
}
}


输出: 错误信息如下所示

图片[2]-理解Java中“public static void main”中的“static”-yiteyi-C++库

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享