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

时间:2011-11-14 05:44:58

标签: 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();
 } 
}

7 个答案:

答案 0 :(得分:40)

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

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

public class MainClass {
    int value;

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

    public static void main(String[] args){
        MainClass o = new MainClass();
        o.printValue();
    }
}

答案 1 :(得分: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();
    }
}

答案 2 :(得分:3)

简答:是的。

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

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

有用的提示:每个类都可以拥有 OWN DIFFERENT “main()”。这对单个测试单个类非常有用。

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

答案 3 :(得分:2)

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

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

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

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

  

java JavaApplication2

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

答案 4 :(得分:0)

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

事实上:

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

答案 5 :(得分:0)

方法声明为static,以便通过类名称引用... 例如

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

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

静态方法可以通过类

的对象调用非静态方法
ClassName cn =new ClassNam().methodName;

main()是特殊方法,它是程序执行的起点,所以你永远不能有一个没有运行程序的对象,因而它的调用就像(execution :: java ClassName),所以它必须是静态的。 ..

答案 6 :(得分:0)

静态方法意味着您可以通过

直接调用它
public class ClassName{
    //no-op
    public static void method(){//....}
}    
ClassName.method();

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

static import

main method

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