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.
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.
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.
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
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");
}
}
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
new Foo().do();
static do()
méthodeJetez un coup d'oeil à ceci Tutoriel Sun
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.