2013-08-12 18 views
5

Ho la seguente classe.Due metodi principali con diverse firme

public class Test { 

    public static void main(Integer[] args) { 
     System.out.println("This is not a main"); 
    } 

    public static void main(String[] args) { 
     System.out.println("This is the main"); 
    } 
} 

Qui ci sono due main metodo che sono accettare Integer[] e String [] come parametro di input. La mia domanda è come JVM carica sempre il secondo metodo come metodo principale di questa classe. Perché considerare sempre l'argomento di input come array di String?

+5

Decisione di progettazione basata sul commento di SLaks. –

+6

Perché è quello che è una linea di comando. – SLaks

+0

Possibile duplicato http://stackoverflow.com/questions/10183611/using-int-instead-of-string-public-static-void-main-int-args – rozar

risposta

14

Perché è ciò che Java cerca sempre. Java Language Specification, Section 12.1.4:

Il metodo principale deve essere dichiarato pubblico, statico e nullo. E 'necessario specificare un parametro formale (§8.4.1), il cui dichiarato tipo è array di String

5

Perché le stringhe sono ciò che stai passando nella riga di comando.

il 45 da

MyProgram.EXE 45

non è un numero intero. è una stringa contenente i caratteri 4 e 5

Si dà il caso che sia possibile utilizzare una stringa come "45" per rappresentare un numero intero. È un po 'più difficile farlo viceversa. (Per l'utente almeno)

+0

... Perché è possibile passare i numeri interi come stringa, mentre String come intero è piuttosto limitato. –

4

Poiché gli argomenti della riga di comando sono sempre Strings.

+3

+1 per aver menzionato gli argomenti della riga di comando .... –

2

Abbiamo sempre entriamo argomenti della riga di comando come stringhe. :)

0

Come altri hanno detto, il metodo main sarà sempre chiamato dalla JVM con sovraccarico che prende una serie di stringhe. Sei libero di fare altri sovraccarichi con quel metodo se lo desideri. Potresti anche chiamarli tu stesso nel tuo codice. È solo che la VM in particolare cerca quell'overload che accetta una serie di stringhe.

0

Questa è l'unica firma riconosciuta dalla JVM come metodo Main

È possibile avere fino principale metodo di overload come si vuole, ma solo il metodo con la firma di cui sopra si chiamerà con il jvm

0

Gli argomenti della riga di comando sono argomenti del metodo main() che vengono passati ad esso in fase di esecuzione. Poiché Java utilizza solo gli argomenti della riga di comando String, la JVM ignora l'altro metodo main() che passa l'intero.

1

Oltre a ciò che altri hanno menzionato, è possibile utilizzare var-arg per implementare l'array di stringhe.

public static void main (String ...a) 
0

La firma del metodo principale di Java è public static void main(String[] args) {} e questo è ciò che i carichi classloader della JVM all'inizio del programma. L'altro main con un argomento Integer non verrà chiamato a meno che non lo si sia fatto manualmente all'interno del main. Prova a modificare il codice come mostrato di seguito e noterai che non verrà chiamato nulla e che il tuo programma non stamperà nulla.

public class Test { 
    public static void main(Integer[] args) { 
     System.out.println("This is not a real main so nothing gets printed"); 
    } 
} 

Btw, è possibile scrivere un metodo principale sovraccarico con qualsiasi argomento desiderato. Finché l'argomento non è String [] o String ... che sono uguali, non verrà avviato il programma.

Problemi correlati