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

kam*_*lot 23 java methods static-methods program-entry-point

我有

class foo{

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

   public void do(){}


}
Run Code Online (Sandbox Code Playgroud)

但后来当我打电话do()main通过运行以下命令java foo在命令行上,JAVA抱怨说,你不能调用从静态功能的方法.

所以我的问题是:如何从main方法调用方法,如果不可能,在使用java命令从命令行运行程序之后调用方法的替代策略是什么.

ska*_*man 43

您只能do()针对类的实例调用实例方法(顺便提一下,这是一个非法的方法名称):

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

public void doSomething(){}
Run Code Online (Sandbox Code Playgroud)

或者,doSomething()如果适合您的设计,也要制作静态.

  • 不要让它静止,它别无选择.它有效,但应该有一个很好的理由使任何东西静止. (3认同)
  • @maaartinus:当你对代码的作用一无所知时,你可以做出那种彻底的陈述吗? (2认同)

yan*_*kun 14

在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(){
   }
}
Run Code Online (Sandbox Code Playgroud)

还要记住,Java中的类应该以大写字母开头.


jam*_*mer 8

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


小智 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");
    }
}
Run Code Online (Sandbox Code Playgroud)