【问题标题】:Does the main method in Java have to be static?Java中的主要方法必须是静态的吗?
【发布时间】:2015-03-26 05:57:47
【问题描述】:

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

public class Sheet {

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

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

}

这是给我的错误

无法从 main 中对非静态调用方法进行静态引用

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

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

【问题讨论】:

标签: java methods static main


【解决方案1】:

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

您的代码如下所示:

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

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

您所关心的问题的解释在此处进行了解释(无需在此处复制所有信息):

【讨论】:

    【解决方案2】:

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

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

    您可以通过实例化您的 Sheet 类来调用 myMethod

    new Sheet().myMethod();
    

    【讨论】:

    • 使用这种方式调用大量方法会损害性能吗?在时间,内存使用方面以及什么更有用,这种方式或其他方式在主中创建自己的类的对象?
    • @obeyjoseph 没关系。如果您的方法很慢,则将其设置为static 不会加快速度关于内存,具有单个类实例和 0 的唯一区别基本上是 4 个字节(以及其他一些字节取决于 JVM 是 32 还是64 位)。定义方法/字段static 取决于设计。即使对于小型应用程序,您也可以创建主类的单个实例并调用相关方法。
    • @obeyjoseph 如果您每次都使用new Sheet().myMethod(); 调用每个方法,那么您什么也得不到,静态方法也可以正常工作。如果在同一个实例上调用多个方法,则必须使用非静态方法。
    【解决方案3】:

    创建一个实例:

    public class Sheet {
    
        public static void main(String[] args) {
            Sheet sheet = new Sheet();
            sheet.myMethod();
        }
    
        public void myMethod(){
            System.out.println("hi there");
        }
    }
    

    【讨论】:

      【解决方案4】:

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

      众所周知,静态主要用于内存管理。所有静态方法和变量都可以使用类名直接访问。当然,我们可以为静态方法和变量创建对象来访问它们。但这是对内存的浪费。

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

      【讨论】:

        猜你喜欢
        • 2018-11-01
        • 1970-01-01
        • 2011-02-08
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        相关资源
        最近更新 更多