【问题标题】:Does every method in main class have to be static?主类中的每个方法都必须是静态的吗?
【发布时间】:2011-11-14 05:44:57
【问题描述】:

我在 java 方面完全是个菜鸟,但是在今晚练习时,我突然想到,对于 OOP 设计,主类中的每个方法都必须是静态的,对吗?在这段代码中,我无法调用非静态类中的方法。

似乎我错过了为什么要声明一个静态类或不声明一个类。谢谢你的帮助!

public class JavaApplication2 {

private static CreateCar Vroom;
private static Limo Fuuu;

public static void main(String[] args) {
     Vroom = new CreateCar();
     Vroom.creator();
     getGas();
     addGas();
     getGas();
     Fuuu = new Limo();
     Fuuu.creator();
     Fuuu.wheels = 5;
     Fuuu.wheelie();
}
 public static int getGas(){
     Vroom.returnGas();
     return 0;
 }
 public static void addGas(){
     Vroom.fillerUp();
 } 
}

【问题讨论】:

    标签: java


    【解决方案1】:

    您可以调用非静态方法,但只能通过对象来调用。也就是说,您需要调用给定对象的方法。

    你的主类也可以被实例化,所以不是主类中的每个方法都需要是静态的。 例如:

    public class MainClass {
        int value;
    
        public void printValue() {
            System.out.println("" + value);
        }
    
        public static void main(String[] args){
            MainClass o = new MainClass();
            o.printValue();
        }
    }
    

    【讨论】:

    • 谢谢你的简洁而且很有帮助。
    • 谢谢,一直在寻找这个答案。
    • 有什么更好的方法来做到这一点,在其中实例化类或将所有方法声明为静态?
    • 你忘了说,方法必须是公开的而不是私有的。如果您选择私有方法,那么它也必须是静态的。如果我错了,请纠正我。
    【解决方案2】:

    没有。但是main 方法必须是static

    要在类中调用非静态方法,您必须为该对象创建一个引用。然后从引用中调用方法。

    public class JavaApplication2 {
        // non-static method
        public void go() {
            System.out.println("hello");
        }
    
        public static void main(String[] args) {
            // declare a reference
            JavaApplication2 app;
            // create an object
            app = new JavaApplication2();
            // call a method
            app.go();
        }
    }
    

    【讨论】:

    • 哇,这个解释也很有帮助。谢谢!
    【解决方案3】:

    简短回答:是的。

    原因是您的 JVM 需要调用您的类的“main”独立于已经拥有该类的任何现有实例

    次要语义挑剔:“main”是类的成员(静态成员);它不是类本身的名称。

    有用的提示:每个类都可以有它的OWNDIFFERENT“main()”。这对于对单个类进行单元测试非常有用。

    这有时会让 C/C++ 程序员感到震惊,其中“main()”与“.exe”相关联,而您只能拥有一个。在 java 中,您可以拥有许多“main()”方法,并在运行时调用您选择的任何一个。

    【讨论】:

    • +1 for 有时会让 C/C++ 程序员感到震惊,其中“main()”与“.exe”相关联,您只能拥有其中一个...
    【解决方案4】:

    呃,您没有“静态 Main”类。您的 JavaApplication2 类中有一个名为 main 的静态方法。

    该类中不需要任何其他静态方法。要使用该类,您需要实例化它:

    public static void main(String[] args) 
    {
        JavaApplication2 myApp = new JavaApplication2();
        myApp.someMethod(); 
        ...
    }
    

    main 是一个专门命名的静态方法,它充当入口点。当你告诉 Java 从命令行“运行”你的程序时:

    java JavaApplication2

    JVM 调用JavaApplication2.main() 传递命令行参数。

    【讨论】:

      【解决方案5】:

      简短回答:不,每个方法都不需要是静态的。

      事实上:

      1. 对于小型练习,最好不要为您的 main 方法设置不同的类。
      2. 您可以拥有多个具有主要方法的类(在许多库中很常见,用于测试或演示类的使用)
      3. 当您调用 java 程序(通常是 jar 文件)时,您可以选择要调用哪个类的 main 方法
      4. 作为初学者,请尽量避免使用静态方法,除非您确定需要它们。这是因为不擅长面向对象编程的人很容易通过使用静态方法滥用静态方法进行面向函数的编程(不要与函数式编程混淆)。
      5. main 方法(注意,我不是说“the”main 方法)必须是静态的:public static void main (String [] argv) { /* ... */ }

      【讨论】:

        【解决方案6】:

        静态方法意味着你可以直接通过调用它

        public class ClassName{
            //no-op
            public static void method(){//....}
        }    
        ClassName.method();
        

        而且,在某些情况下,ClassName 可以省略,例如。

        static import
        
        main method
        

        但要调用非静态方法,您必须首先启动它。

        【讨论】:

          【解决方案7】:

          方法被声明为静态的,以便被类名引用... 例如

          Math.pow(x,y)  // x^y
          

          在这个称为用户的方法中,用户不必担心实例创建...因为 Math 的所有方法都是静态的,所以这就是使用静态方法的基本原因....

          静态方法可以通过类的对象调用非静态方法

          ClassName cn =new ClassNam().methodName;
          

          main() 是一种特殊的方法,它是程序执行的起点,所以你永远不可能在不运行程序的情况下拥有一个对象,因此它被称为like(execution::java ClassName),所以它必须是静态的。 ..

          【讨论】:

            猜你喜欢
            • 2019-02-12
            • 2015-03-26
            • 2018-11-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-29
            • 1970-01-01
            相关资源
            最近更新 更多