web-dev-qa-db-ja.com

javaのメインメソッドから別のメソッドを呼び出す

私は持っています

_class foo{

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

   public void do(){}


}
_

しかし、コマンドラインでコマンド_Java foo_を実行してmainからdo()を呼び出すと、Javaが呼び出せないことを訴えます静的関数からのメソッド。

だから私の質問は次のとおりです:メインメソッドからメソッドをどのように呼び出しますか?それが不可能な場合、Javaコマンドを使用してコマンドラインからプログラムを実行した後にメソッドを呼び出すいくつかの代替戦略は何ですか? 。

23
kamikaze_pilot

クラスのインスタンスに対してdo()(これは不正なメソッド名です)のようなインスタンスメソッドのみを呼び出すことができます:

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

public void doSomething(){}
_

または、設計で機能する場合は、doSomething()も静的にします。

42
skaffman

Mainメソッドの前にstaticをチェックしてください。これにより、メソッドがクラスメソッドとして宣言されます。つまり、インスタンスを呼び出す必要はありません。したがって、非静的メソッドを呼び出すときは、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のクラスは大文字で始まる必要があります。

13
yan.kun

これは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
7

複数の方法で実行できます。ここに2つあります。乾杯!

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");
    }
}
6
richardl

メインメソッドでdo()を使用する場合は、2つの選択肢があります。1つは静的ですが、もう1つは(do())ではないためです

  1. 新しいインスタンスを作成し、new Foo().do();のようなdo()を呼び出します
  2. make static do()メソッド

これをご覧ください Sun tutorial

1
user467871

最初のJavaではdo()メソッドを使用できません。代わりにdoOperation()にすることができます。

第二に、静的関数から非静的メソッドを直接呼び出すことはできません。 Mainは静的関数です。最初にクラスをインスタンス化し、次にそのインスタンスを使用してメソッドを呼び出す必要があります。

3番目に、非静的メソッドから直接静的メソッドを呼び出すことができます。

0
csarathe