2011-01-31 17 views
17

hochiama un altro metodo dal metodo principale di java

class foo{ 

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

    public void do(){} 


} 

ma poi quando chiamo do() da main eseguendo il comando java foo sulla riga di comando, Java si lamenta che non si può chiamare un metodo da una funzione statica.

Quindi la mia domanda è: come si chiamano i metodi dal metodo principale e se non è possibile quali sono alcune strategie alternative per chiamare i metodi dopo che il programma viene eseguito dalla riga di comando utilizzando il comando java.

+7

La parola "fare" è una parola chiave, non è possibile denominare un metodo come questo. Attenersi alle convenzioni (almeno di base), classificare le classi iniziando con una lettera maiuscola. – maaartinus

risposta

35

È possibile chiamare solo metodo di istanza come do() (che è un nome di un metodo illegale, per inciso) in un'istanza della classe:

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

public void doSomething(){} 

In alternativa, fare doSomething() statica così, se funziona per il vostro disegno .

+2

Non renderlo statico, non è un'alternativa. Funziona, ma ci dovrebbe essere una buona ragione per fare qualcosa di statico. – maaartinus

+2

@maaartinus: Puoi fare quel tipo di affermazione radicale quando non hai nulla su ciò che fa il codice? – skaffman

+0

Non posso? Certo, senza saperne di più, non posso. Tuttavia, qual è la possibilità che l'unico metodo chiamato da main debba essere statico? Ci sono così poche ragioni legittime per i metodi statici, che usarli non è quasi mai una buona idea. Soprattutto per i principianti. – maaartinus

13

Verificare la statica prima del metodo principale, questo dichiara il metodo come un metodo di classe, il che significa che non è necessario chiamare alcuna istanza. Così come chiamerai un metodo non statico, Java si lamenta perché stai provando a chiamare un cosiddetto "metodo di istanza", che, naturalmente, ha bisogno di un'istanza prima;)

Se vuoi una migliore comprensione delle classi e istanze, crea una nuova classe con metodi di istanza e classe, crea un oggetto nel tuo ciclo principale e chiama i metodi!

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

Inoltre, le classi in Java devono iniziare con una lettera maiuscola.

1

Se si desidera utilizzare do() nel metodo principale ci sono 2 scelte, perché uno è statico, ma altri (do()) non

  1. Creare nuova istanza e invocare fare() come new Foo().do();
  2. make static do() metodo

Date un'occhiata a questo sun tutorial

7

si tratta di un un fondamentale derstanding in Java, ma può essere un po 'complicato per i nuovi programmatori. Fai una piccola ricerca sulla differenza tra un metodo statico e un metodo di istanza. La differenza fondamentale è il metodo di istanza do() è accessibile solo a un'istanza della classe pippo.

È necessario creare un'istanza della classe, creando un oggetto, che si utilizza per chiamare il metodo di istanza.

Ho incluso l'esempio con un paio di commenti ed esempi.

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 
+0

Questo è il metodo più comune per chiamare le cose da main(). –

0

Primo java non consente di avere il metodo do(). Invece puoi farlo doOperation().

Secondo Non è possibile richiamare direttamente metodi non statici dalla funzione statica. Main è una funzione statica. È necessario prima istanziare la classe e quindi richiamare il metodo utilizzando tale istanza.

In terzo luogo è possibile richiamare il metodo statico direttamente dai metodi non statici.

3

Puoi farlo in più modi. Eccone due. Saluti!

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"); 
    } 
} 
Problemi correlati