web-dev-qa-db-fra.com

appeler une autre méthode à partir de la méthode principale en java

J'ai 

class foo{

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

   public void do(){}


}

mais quand j'appelle do() depuis main en exécutant la commande Java foo sur la ligne de commande, Java se plaint de l'impossibilité d'appeler une méthode à partir d'une fonction statique.

Ma question est donc la suivante: comment appeler des méthodes à partir de la méthode principale et s’il n’est pas possible de choisir des stratégies alternatives pour appeler des méthodes une fois le programme exécuté en ligne de commande à l’aide de la commande Java.

21
kamikaze_pilot

Vous pouvez uniquement appeler une méthode d'instance telle que do() (qui est d'ailleurs un nom de méthode non autorisé) à l'aide d'une instance de la classe:

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

public void doSomething(){}

Vous pouvez également rendre doSomething() statique également, si cela convient à votre conception.

42
skaffman

Recherchez la valeur statique avant la méthode principale, cela déclare la méthode en tant que méthode de classe, ce qui signifie qu'elle n'a besoin d'aucune instance pour être appelée. Donc, comme vous allez appeler une méthode non statique, Java se plaint parce que vous essayez d'appeler une "méthode d'instance", qui nécessite bien sûr une instance en premier;)

Si vous souhaitez mieux comprendre les classes et les instances, créez une nouvelle classe avec des méthodes d'instance et de classe, créez un objet dans votre boucle principale et appelez les méthodes!

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

Rappelez-vous également que les classes en Java doivent commencer par une lettre majuscule.

12
yan.kun

Ceci est une compréhension fondamentale en Java, mais peut être un peu délicat pour les nouveaux programmeurs. Faites une petite recherche sur la différence entre une méthode statique et une méthode exemple. La différence fondamentale est que la méthode d'instance do () n'est accessible qu'à une instance de la classe foo.

Vous devez instancier la classe, en créant un objet, que vous utilisez pour appeler la méthode d'instance.

J'ai inclus votre exemple avec quelques commentaires et un exemple.

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
jamesTheProgrammer

Vous pouvez le faire de plusieurs façons. En voici deux. À votre santé!

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

Si vous voulez utiliser do() dans votre méthode principale, vous avez le choix entre 2 choix, l'un étant statique mais l'autre (do ()) non

  1. Créez une nouvelle instance et appelez do () comme new Foo().do();
  2. make static do() méthode

Jetez un coup d'oeil à ceci Tutoriel Sun

1
user467871

Tout d'abord, Java ne vous autorisera pas à utiliser la méthode do(). Au lieu de cela, vous pouvez le rendre doOperation().

Deuxièmement, vous ne pouvez pas invoquer directement des méthodes non statiques à partir d'une fonction statique. Main est une fonction statique. Vous devez d'abord instancier la classe, puis invoquer une méthode à l'aide de cette instance.

Troisièmement, vous pouvez appeler une méthode statique directement à partir de méthodes non statiques.

0
csarathe