从java [duplicate]中的main方法调用另一个方法

问题描述 投票:23回答:6

此问题已经在这里有了答案:

我有

class foo{

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

   public void do(){}


}

但是当我通过在命令行上运行命令do()main调用java foo时,java抱怨您无法从静态函数中调用方法。

所以我的问题是:您如何从主方法调用方法,如果不可能,使用java命令从命令行运行程序后,有哪些替代策略可以调用方法。

java methods static-methods main
6个回答
42
投票

您只能针对该类的实例调用类似do()的实例方法(顺便说一句,这是非法的方法名称:

public static void main(String[] args){
  new Foo().doSomething();
}

public void doSomething(){}

或者,也可以将doSomething()设为静态,如果它对您的设计有效。


13
投票

在main方法之前检查静态,这将方法声明为类方法,这意味着它不需要调用实例。因此,当您要调用非静态方法时,Java会抱怨,因为您试图调用所谓的“实例方法”,这当然首先需要一个实例;)

如果您想更好地了解类和实例,请使用实例和类方法创建一个新类,在主循环中创建一个对象并调用这些方法!

 class Foo{

    public static void main(String[] args){
       Bar myInstance = new Bar();
       myInstance.do(); // works!
       Bar.do(); // doesn't work!

       Bar.doSomethingStatic(); // works!
    }
 }

class Bar{

   public do() {
   // do something
   }

   public static doSomethingStatic(){
   }
}

还请记住,Java中的类应以大写字母开头。


7
投票

这是Java的基本知识,但是对于新程序员来说可能有些棘手。对静态方法与实例方法之间的区别进行一些研究。基本区别是实例方法do()仅可用于foo类的实例。

您必须实例化(创建其实例)该类,并创建一个对象,用于调用实例方法。

我已经在您的示例中添加了一些注释和示例。

public class SomeName {

//this is a static method and cannot call an instance method without a object
public static void main(String[] args){

    // can't do this from this static method, no object reference
    // someMethod();

    //create instance of object
    SomeName thisObj = new SomeName();
    //call instance method using object
    thisObj.someMethod();
}

//instance method
public void someMethod(){
    System.out.print("some message...");
}

}// end class SomeName

6
投票

您可以通过多种方式进行操作。这是两个。干杯!

package learningjava;

public class helloworld {
    public static void main(String[] args) {
        new helloworld().go();
        // OR
        helloworld.get();
    }

    public void go(){
        System.out.println("Hello World");
    }
    public static void get(){
        System.out.println("Hello World, Again");
    }
}

1
投票

如果要在主要方法中使用do(),则有2个选择,因为一个是静态的,而另一个(do())不是

  1. 创建新实例并像new Foo().do();那样调用do()
  2. make static do()方法

看看这个sun tutorial


0
投票

第一个Java不允许您使用do()方法。相反,您可以将其设置为doOperation()

第二,您不能直接从静态函数调用非静态方法。 Main是静态功能。您需要首先实例化该类,然后使用该实例调用方法。

第三,您可以直接从非静态方法调用静态方法。

© www.soinside.com 2019 - 2024. All rights reserved.