在java中从主方法调用另一个方法

在java中从主方法调用另一个方法,java,methods,static-methods,main,Java,Methods,Static Methods,Main,我有 但是,当我通过在命令行上运行命令javafoo从main调用do()时,java会抱怨无法从静态函数调用方法 因此,我的问题是:如何从主方法调用方法,如果不可能,在使用java命令从命令行运行程序后,调用方法的替代策略是什么。您只能调用实例方法,如do()(顺便说一句,这是非法的方法名称)针对类的实例: class foo{ public static void main(String[] args){ do(); } public void do(){}

我有

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


因此,我的问题是:如何从主方法调用方法,如果不可能,在使用java命令从命令行运行程序后,调用方法的替代策略是什么。

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

class foo{

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

   public void do(){}


}

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

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

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

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

public void doSomething(){}

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

如果您想在主方法中使用
do()
,有两种选择,因为一种是静态的,而另一种(do())不是

  • 创建新实例并调用do(),如
    newfoo().do()
  • 生成
    static do()
    方法

  • 看看这个

    这是对Java的基本理解,但对新程序员来说可能有点棘手。研究一下静态方法和实例方法之间的区别。基本区别在于实例方法do()仅可由类foo的实例访问

    必须实例化(创建实例)类,创建用于调用实例方法的对象

    我已经包括了你的例子和一些评论和例子

     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将不允许您使用
    do()
    方法。相反,您可以将其设置为
    doOperation()

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


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

    您可以通过多种方式调用。这里有两个。干杯

    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
    

    别让它静止,别无选择。它是有效的,但是应该有一个很好的理由使任何东西都是静态的。@maaartinus:当你对代码的功能一无所知时,你可以做出这样一种全面的陈述,不是吗?当然,不知道更多,我不能。但是,从main调用的唯一方法应该是静态的可能性有多大?静态方法的正当理由太少,使用它们几乎从来都不是一个好主意。特别是对于新手。单词“do”是一个关键字,你不能这样命名一个方法。坚持(至少是最基本的)约定,以大写字母开头命名类。这是从main()调用对象的最常用方法。
    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");
        }
    }