2014-04-11 18 views
5

Possiamo usare quei 3 punti per creare un array al posto di parentesi quadre, come lo abbiamo usato sopra ?? Se no allora perché stiamo usando questa dichiarazione solo per main ??2 diverse firme per il metodo principale

public static void main(String[] args) 

or 

public static void main(String... args) 
+0

perché '[]' è più comune di quanto '' ... e qualche volta un po 'più facile per spiegare ... ma ovviamente funzionano entrambi –

+2

'Possiamo usare quei 3 punti per creare un array al posto delle parentesi quadre' prova con la codifica .. – lakshman

+0

Puoi usarli in modo intercambiabile. –

risposta

4

Queste non sono due diverse firme: sotto il cofano, è la stessa firma; la differenza è che il compilatore utilizza tre punti per consentire invocazioni con elenchi di argomenti variabili.

Dal momento che non si invoca mai main direttamente (beh, non si dovrebbe essere, in ogni caso) la differenza non dovrebbe importare. La prima forma della firma è la prima cosa che si vede nei libri elementari su Java, quindi si dovrebbe attenersi a parentesi quadre per guadagnare "familiarità istantanea" dai lettori del proprio codice.

0

Si Siete sovraccaricare il metodo principale qui ed entrambi sono autorizzati a invocare l'esecuzione come paramater tipo di metodo principale è un Array di String ...

Menzionato nel JLS 12.1.4

Il metodo principale deve essere dichiarato pubblico, statico e vuoto. È necessario specificare un parametro formale (§8.4.1) il cui tipo dichiarato è una stringa di stringa . Pertanto, uno dei seguenti dichiarazioni è accettabile:

public static void main(String[] args) 

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

Guardate questo modo. Se java utilizzato riflessione per trovare il metodo principale che avrebbe fatto qualcosa di simile (linea 6)

public class Main { 

    public static void main(String[] args) throws Exception { 
     if (!(args.length == 1 && args[0].equals("Hello World"))) { 
      System.out.println("You did not recurse!"); 
      Main.class.getDeclaredMethod("main", String[].class).invoke(null, (Object) new String[]{"Hello World"}); 
     } else { 
      System.out.println("You recursed!"); 
     } 
    } 
} 

Si potrebbe trovare una funzione dichiarata con ... o [] quindi richiamare quella funzione.

1

Capisco che questo è già una risposta, ma se questo può aiutare a capire di più ..

Per la vostra specifica domanda -

possiamo usare quei 3 punti per creare un array al posto di piazza staffe

La risposta retta è si, e qui sta la documentazione java: http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs

(String... args) 

Qui il thread principale chiama il metodo principale che passa alcuni argomenti. Il tipo di dichiarazione dei parametri è Array, ma quando viene chiamato il metodo è possibile passare uno o più oggetti String o un array di oggetti String, come parametri di tale funzione. Non c'è specialità per main() in questo caso.

Inoltre, si potrebbe chiamare un myMethod (String args ..) in uno dei seguenti modi:

myMethod(); // Likely useless, but possible 
myMethod("one", "two", "three"); 
myMethod("one"); 
myMethod(new String[]{"a", "b", "c"}); 

Nota importante 1: Il parametro (s) superato in questo modo è sempre una matrice - anche se ce n'è uno solo. Assicurati di trattarlo in questo modo nel corpo del metodo.

Nota importante 2: il parametro che ottiene il ... deve essere l'ultimo nella firma del metodo. Quindi, myMethod (int i, String ... stringhe) va bene, ma myMethod (String ... stringhe, int i) non va bene.

È inoltre menzionato che si è tentato con 'Integer []' e non ha funzionato, ecco un esempio

public static void main(String[] args) { 
     Integer[] a = new Integer[4]; 
     a[0] = 10; 
     a[1] = 20; 
     a[2] = 30; 
     a[3] = 40; 
     myMethod(a); 
    } 

    public static void myMethod(Integer... args) { 
     for (Integer i : args) { 
      System.out.println(i); 
     } 
    } 
Problemi correlati