为什么在Java中main方法是静态的

时间:2020-01-09 10:34:49  来源:igfitidea点击:

编写任何Java程序时,它的主要执行方法都是开始执行点,其形式如下。

Public static void main(String[] args)

给定Java中main方法的签名,就会出现一个问题,为什么main方法在Java中是公共,无效和静态的。面试中也经常问到它。

为什么Java main方法被标记为public

将access修饰符作为public意味着可以从同一包中的类以及其他包中访问方法。
Java中的main方法是公共的,因此JVM可以轻松地访问它,因为JVM需要加载该类并调用该类的main方法。

为什么Java main方法无效

任何不返回值的Java方法都必须标记为void。由于Java中的main方法不返回任何值,因此它是无效的。

为什么Java main方法是静态的

Java中main方法为何是静态的这一点需要一些解释。

在Java中将任何方法标记为静态时,它与该类相关联,而不与该类的任何对象相关联。无需创建类的任何对象即可调用任何静态方法。

例如

Class Test{
  static void methodA(){
    ..
    ..
  }
  ...
}

我们可以使用类本身– Test.methodA();来调用methodA。因为它是静态方法。我们不需要这样做

Test test = new Test();
test.methodA();

我们知道Java中的main方法是程序执行的起点,并且将main方法标记为静态意味着JVM可以调用main方法而无需创建类的任何实例。
我们可能会想,如果创建了实例并使用该类的实例调用main方法,答案是:如果类中有带参数的构造函数,则会引起歧义。
例如,考虑此类

public class Test {
  private int i;
  Test (int i){
     this.i = i;
  }
  public static void main(String args[]){
    Test test = new Test(7);
  }
}

如果JVM必须创建此类的实例,然后调用方法,则必须调用该类的构造函数。在这种情况下,如果JVM必须自己创建实例,则必须为i传递什么值。

它必须执行该语句Test test = new Test(7);创建使用传递的值初始化的类的实例。要调用此语句,必须在不创建类的任何对象的情况下调用方法,因此我们回到了方法必须是静态的这一事实。这就是为什么main方法在Java中是静态的。

重要说明

  • 如果我们不将main方法声明为public void static,则不会出现编译时错误,但会引发运行时错误。如果main方法不是静态的
Error: Main method is not static in class com.theitroad.Test, please define the main method as:
   public static void main(String[] args)

如果main方法不是public static

Error: Main method not found in class com.theitroad.Test, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
  • 使用varargs,Java 5及更高版本的主方法签名也可以如下所示:
public static void main(String ... args).
  • 需要在Java中将main方法设为静态,以便可以在不创建类实例的情况下执行main方法(它是Java程序的起点)。