Java 中的 main 方法必须是静态的吗?

Does the main method in Java have to be static?

主要方法(您在 class 中的 Java 请求)是否必须是静态的?例如我有这个代码

public class Sheet {

    public static void main(String[] args) {
        myMethod();
    }

    public void myMethod() {
        System.out.println("hi there");
    }

}

这是给我的错误

cannot make a static reference to the non-static call method from main

如果我说清楚了,我从 main 方法调用的任何方法都必须是 static,并且我从 调用的每个方法]static 方法必须是 static.

为什么我的整个 class(如果我们更进一步,我的整个程序)和方法必须是静态的?我该如何避免这种情况?

并非所有方法都必须是静态的,只有应用程序的主要入口点。所有其他方法都可以保持非 static,但您需要使用 class 的引用才能使用它们。

您的代码如下所示:

public class Sheet {
    public static void main(String[] args) {
        Sheet sheet = new Sheet();
        sheet.myMethod();
    }

    public void myMethod(){
        System.out.println("hi there");
    }
}

此处解释了您的疑虑(无需在此处复制所有信息):

  • Why is the Java main method static?
  • What does the 'static' keyword do in a class?
  • In laymans terms, what does 'static' mean in Java?

您的 main 方法必须是 static,因为这是您程序中该 运行 配置的单一入口点。

static 方法绑定到 class,因此它无法知道 class 的单个实例。

您可以通过实例化您的 Sheet class:

来调用 myMethod
new Sheet().myMethod();

创建实例:

public class Sheet {

    public static void main(String[] args) {
        Sheet sheet = new Sheet();
        sheet.myMethod();
    }

    public void myMethod(){
        System.out.println("hi there");
    }
}

是的,main 方法必须是静态的,因为我们不会为 main 方法创建任何对象。并且在class加载的时候可以直接调用静态方法。由于它们是在 class 加载时加载的,因此我们不必为其创建任何对象!!

而我们知道,static主要是为了内存管理。所有静态方法和变量都可以直接使用 class 名称访问。当然我们可以为静态方法和变量创建对象来访问它们。但这是一种内存浪费。

并不是所有的方法都需要是静态的。根据您指定的应用程序,我们可以使用静态方法。