【问题标题】:calling another method from the main method in java [duplicate]从java中的main方法调用另一个方法[重复]
【发布时间】:2011-06-18 10:36:30
【问题描述】:

我有

class foo{

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

   public void do(){}


}

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

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

【问题讨论】:

  • “do”这个词是一个关键字,你不能这样命名一个方法。坚持(至少是非常基本的)约定,以大写字母开头的名称类。

标签: java methods static-methods main


【解决方案1】:

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

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

public void doSomething(){}

或者,也可以将 doSomething() 设为静态,如果这适用于您的设计。

【讨论】:

  • 不要让它成为静态的,这是没有选择的。它有效,但应该有充分的理由将任何东西设为静态。
  • @maaartinus:当你对代码的作用一无所知时,你可以做出那种笼统的陈述吗?
  • 不能吗?当然,如果不知道更多,我不能。但是,从 main 调用的唯一方法应该是静态的可能性有多大?静态方法的正当理由太少了,使用它们几乎不是一个好主意。特别是对于新手。
【解决方案2】:

检查 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 中的类应该以大写字母开头。

【讨论】:

    【解决方案3】:

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

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

    看看这个sun tutorial

    【讨论】:

      【解决方案4】:

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

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

      我已将您的示例与几个 cmets 和示例一起包含在内。

      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
      

      【讨论】:

      • 这是从 main() 调用事物的最常用方法。
      【解决方案5】:

      第一个 java 不允许你有 do() 方法。相反,您可以将其设为doOperation()

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

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

      【讨论】:

        【解决方案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");
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2017-09-27
          • 2013-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-02
          • 2023-02-20
          • 2020-12-17
          • 1970-01-01
          相关资源
          最近更新 更多