主类中的每个方法都必须是静态的吗?

Zom*_*ian 20 java

我是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();
 } 
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*nov 42

您可以调用非静态方法,但只能通过对象执行此操作.也就是说,您需要在给定对象上调用该方法.

您的主类也可以实例化,因此主类中的每个方法都不需要是静态的.例如:

public class MainClass {
    int value;

    public void printValue() {
        System.out.println("" + value);
    }

    public static void main(String[] args){
        MainClass o = new MainClass();
        o.printValue();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你说得简洁,非常有帮助。 (2认同)

wan*_*nik 8

不,但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();
    }
}
Run Code Online (Sandbox Code Playgroud)


pau*_*sm4 6

简短的回答:是的。

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

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

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

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