wake-up-neo.com

aufruf einer anderen Methode aus der Hauptmethode in Java

Ich habe 

class foo{

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

   public void do(){}


}

wenn ich jedoch do() von main durch Ausführen des Befehls Java foo in der Befehlszeile aufrufe, beschwert sich Java, dass eine Methode nicht von einer statischen Funktion aufgerufen werden kann.

Meine Frage lautet also: Wie rufen Sie Methoden aus der Hauptmethode auf und ob es nicht möglich ist, welche alternativen Methoden Sie aufrufen können, nachdem das Programm von der Befehlszeile aus mit dem Java-Befehl ausgeführt wurde.

21
kamikaze_pilot

Sie können die Instanzmethode wie do() (die übrigens ein unzulässiger Methodenname ist) nur für eine Instanz der Klasse aufrufen:

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

public void doSomething(){}

Alternativ können Sie auch doSomething() statisch machen, wenn dies für Ihr Design funktioniert.

42
skaffman

Überprüfen Sie die Statik vor der Hauptmethode. Dies deklariert die Methode als Klassenmethode. Dies bedeutet, dass keine Instanz aufgerufen werden muss. Wenn Sie also eine nicht statische Methode aufrufen, beschwert sich Java, weil Sie versuchen, eine sogenannte "Instanzmethode" aufzurufen, die natürlich zuerst eine Instanz benötigt;).

Wenn Sie ein besseres Verständnis von Klassen und Instanzen haben möchten, erstellen Sie eine neue Klasse mit Instanz- und Klassenmethoden, erstellen Sie ein Objekt in Ihrer Hauptschleife und rufen Sie die Methoden auf!

 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(){
   }
}

Denken Sie auch daran, dass Klassen in Java mit einem Großbuchstaben beginnen sollten.

12
yan.kun

Dies ist ein grundlegendes Verständnis von Java, kann jedoch für neue Programmierer etwas schwierig sein. Untersuchen Sie den Unterschied zwischen einer statischen Methode und einer Instanzmethode. Der grundlegende Unterschied ist, dass die Instanzmethode do () nur für eine Instanz der Klasse foo verfügbar ist.

Sie müssen die Klasse instanziieren und ein Objekt erstellen, mit dem Sie die Instanzmethode aufrufen.

Ich habe Ihnen ein Beispiel mit einigen Kommentaren und Beispiel beigefügt.

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

Sie können es auf verschiedene Arten tun. Hier sind zwei. Prost!

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

Wenn Sie do() in Ihrer Hauptmethode verwenden möchten, gibt es zwei Möglichkeiten, da eine statisch ist, andere dagegen (do ()) nicht

  1. Erstellen Sie eine neue Instanz und rufen Sie do () wie new Foo().do(); auf.
  2. methode static do() erstellen

Werfen Sie einen Blick auf dieses Sun Tutorial

1
user467871

Erstes Java erlaubt keine do()-Methode. Stattdessen können Sie es doOperation() machen.

Zweitens Sie können nicht nicht statische Methoden direkt von der statischen Funktion aufrufen. Main ist eine statische Funktion. Sie müssen zuerst die Klasse instanziieren und dann die Methode mit dieser Instanz aufrufen.

Drittens können Sie statische Methoden direkt aus nicht statischen Methoden aufrufen.

0
csarathe