📜  了解Java中“ public static void main”中的“ static”

📅  最后修改于: 2020-03-19 13:19:50             🧑  作者: Mango

以下几点解释了main()方法中的“static”:

  1. main()方法:Java中的main()方法是JVM(Java虚拟机)进入Java程序的入口点。JVM通过调用main()方法来启动Java程序。
  2. 静态static是关键字。在任何实体之前添加静态对象的作用是使该实体成为类实体。这意味着在方法和变量之前添加static会使它们分别成为类方法和类变量,而不是实例方法和实例变量。因此,可以在Class的帮助下直接访问静态方法和变量,这意味着无需创建对象即可访问静态方法或变量。
  3. // 创建static方法
    static void func()
    {}
    // 创建static变量
    static int var;
  4. 静态方法:用static关键字声明方法时,称为静态方法。如上所述,可以在创建其类的任何对象之前访问任何静态成员,并且无需引用任何对象。
    // 创建static方法
    class GfG
    {
        static void func()
        {}
    }
    // Calling a static function
    GfG.func();
  5. 静态main()方法:当在main()方法的函数定义中添加static关键字时,则称为static main()方法。
    class GfG
    {
        // 静态maini方法
        public static void main(String[] args)
        {}
    }
  6. main()方法中需要静态:由于main()方法是任何Java应用程序的入口点,因此由于以下原因,必须将main()方法设置为静态是强制性的:
    • 静态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使用。考虑一种非强制将main()方法设为静态的情况,在这种情况下,这将使得在各种IDE上自动检测项目中的“可启动”类变得更加困难。因此,将输入方法“ main()”设置为“ public static void main(String [] args)”是很方便的。

因此,Java中的main()方法被声明为静态方法,以便JVM在创建对象之前可以使用其类名直接访问它。