2011-11-14 11 views
14

Sono un noob totale in java ma durante la pratica stasera mi è venuto in mente che con il design OOP ogni metodo nella classe principale deve essere statico giusto? In questo codice non c'è modo per me di chiamare un metodo all'interno della classe che non sia statico. Sembra che forse mi manca il motivo per cui dichiareresti una classe statica o meno. Grazie per l'aiuto!Ogni metodo nella classe principale deve essere statico?

public class JavaApplication2 { 

private static CreateCar Vroom; 
private static Limo Fuuu; 

public static void main(String[] args) { 
    Vroom = new CreateCar(); 
    Vroom.creator(); 
    getGas(); 
    addGas(); 
    getGas(); 
    Fuuu = new Limo(); 
    Fuuu.creator(); 
    Fuuu.wheels = 5; 
    Fuuu.wheelie(); 
} 
public static int getGas(){ 
    Vroom.returnGas(); 
    return 0; 
} 
public static void addGas(){ 
    Vroom.fillerUp(); 
} 
} 

risposta

33

È possibile chiamare metodi non statici, ma è possibile farlo solo tramite un oggetto. Cioè, devi chiamare il metodo su un dato oggetto.

La classe principale può anche essere istanziata, quindi non tutti i metodi nella classe principale devono essere statici. Per esempio:

public class MainClass { 
    int value; 

    public void printValue() { 
     System.out.println("" + value); 
    } 

    public static void main(String[] args){ 
     MainClass o = new MainClass(); 
     o.printValue(); 
    } 
} 
+1

Grazie a te che è stato conciso e molto utile. – Zombian

+0

Grazie, cercavo dappertutto questa risposta. –

+0

Qual è il modo migliore per farlo, creare un'istanza della classe al suo interno o dichiarare tutti i metodi come statici? –

2

Ehm, non si dispone di un "statico principale" di classe. Si dispone di un metodo statico denominato main nella classe JavaApplication2.

Non è necessario disporre di altri metodi statici in tale classe. Per utilizzare la classe, che ci si un'istanza:

public static void main(String[] args) 
{ 
    JavaApplication2 myApp = new JavaApplication2(); 
    myApp.someMethod(); 
    ... 
} 

main è un metodo statico specificamente chiamato che funge da punto di ingresso. Quando dite Java per "eseguire" il programma da linea di comando come:

java JavaApplication2

La JVM chiama JavaApplication2.main() passando gli argomenti della riga di comando.

+0

Ahh! Grazie per la correzione hai ragione. – Zombian

3

Risposta breve: sì.

Il motivo è che la JVM deve richiamare la "principale" della classe indipendentemente dal fatto che esistano già istanze di quella classe.

Minor picking semantico semantico: "main" è un membro (un membro statico) di una classe; non è il nome della classe stessa.

Suggerimento utile: ogni classe può avere è PROPRIO, DIVERSO "main()". Questo può essere estremamente utile per il test unitario di singole classi.

Questo a volte è uno shock per i programmatori C/C++, in cui "main()" è associato a ".exe" e si può sempre avere uno uno di essi. In java, puoi avere molti metodi "main()" e invocare quello che scegli in fase di esecuzione.

+0

+1 a volte è uno shock per i programmatori C/C++, dove "main()" è associato a ".exe", e si può sempre e solo avere uno di loro ... – CoolEulerProject

7

No. Ma il metodo main deve essere static.

Per chiamare un metodo non statico nella classe, è necessario creare un riferimento a un oggetto di quella classe di . Quindi chiami il metodo dal riferimento.

public class JavaApplication2 { 
    // non-static method 
    public void go() { 
     System.out.println("hello"); 
    } 

    public static void main(String[] args) { 
     // declare a reference 
     JavaApplication2 app; 
     // create an object 
     app = new JavaApplication2(); 
     // call a method 
     app.go(); 
    } 
} 
+0

Wow questa spiegazione aiuta molto anche . Grazie! – Zombian

0

risposta breve: no, ogni metodo NON deve essere statico.

infatti:

  1. per i piccoli esercizi, è meglio non avere una classe diversa per il metodo principale.
  2. puoi avere più classi con i metodi principali (abbastanza comune in molte librerie, per testare o dimostrare l'uso della classe)
  3. quando invochi un programma java, che di solito è un file jar, puoi scegliere tra quale metodo principale della classe si desidera invocare
  4. come principiante cercare di evitare il metodo statico se non si è sicuri di averne bisogno. questo perché qualcuno che non è bravo nella programmazione orientata agli oggetti può facilmente abusare dei metodi statici per fare una programmazione orientata alle funzioni (da non confondere con la programmazione funzionale) usando metodi statici.
  5. un metodo main (nota, non sto dicendo "il" metodo principale) deve essere statico: public static void main (String [] argv) { /* ... */ }
0

metodo è dichiarato come statico, in modo da essere sollevata dal nome della classe ... esempio

Math.pow(x,y) // x^y 

In questo metodo denominato utente non deve preoccuparsi per la creazione esempio ... come Math ha tutto il suo metodo come statica di modo che è la ragione fondamentale per cui sono utilizzati metodi statici ....

metodo statico può chiamare metodi non statici se oggetto della classe

ClassName cn =new ClassNam().methodName; 

principale() è metodo speciale, il suo punto di partenza di esecuzione del programma, in modo u può mai avere un oggetto senza eseguire il programma, e da qui il suo chiamato come (esecuzione :: java ClassName), quindi deve essere statico ...

0

metodi statici significa che si può chiamare direttamente attraverso

public class ClassName{ 
    //no-op 
    public static void method(){//....} 
}  
ClassName.method(); 

e, in alcuni casi, il ClassName possibile essere omesso ad es.

static import 

main method 

Ma per invocare un metodo non statico, è necessario prima avviarlo.

Problemi correlati