2014-04-11 12 views
5

Czy możemy użyć tych 3 kropek do utworzenia tablicy w miejscu nawiasów kwadratowych, tak jak użyliśmy go powyżej? Jeśli nie, dlaczego używamy tej deklaracji tylko dla głównego?2 różne sygnatury dla głównej metody

public static void main(String[] args) 

or 

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

ponieważ '[]' jest bardziej powszechne niż '...' a czasem nieco łatwiejsze wyjaśnić ... ale oczywiście obie prace –

+2

'Czy możemy użyć tych 3 kropek do utworzenia tablicy w miejscu nawiasów kwadratowych? spróbuj przez kodowanie. – lakshman

+0

Możesz używać ich zamiennie. –

Odpowiedz

4

To nie są dwa różne podpisy - pod maską jest to ten sam podpis; różnica polega na tym, że kompilator używa trzech kropek, aby umożliwić wywoływanie ze zmiennymi listami argumentów.

Ponieważ nigdy nie powołujesz się bezpośrednio na main (cóż, nie powinieneś tak być) różnica nie powinna mieć znaczenia dla ciebie. Pierwsza forma podpisu jest pierwszą rzeczą, którą widzisz w elementarnych książkach o Javie, więc należy trzymać się nawiasów kwadratowych, aby uzyskać "natychmiastową znajomość" przez czytelników twojego kodu.

0

Tak jesteś przeciążenia metody Main tutaj i oba mogą wywołać wykonanie jak typ paramater metody głównej jest Array od String ...

Wymienione w JLS 12.1.4

metoda Głównym musi być zadeklarowane jako publiczne, statyczne i nieważne. Należy podać parametr formalny (§8.4.1), którego zadeklarowanym typem jest tablica z ciągiem . Dlatego jedną z następujących deklaracji jest dopuszczalne:

public static void main(String[] args) 

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

Spójrz na to sposób. Jeśli java używany odbicie znaleźć główne metody byłoby zrobić coś takiego (linia 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!"); 
     } 
    } 
} 

Byłoby wybrać funkcję zadeklarowaną z ... lub [] następnie wywołać tę funkcję.

1

Rozumiem to już odpowiedział, ale jeśli to może pomóc zrozumieć więcej ..

do konkretnego pytania -

Możemy wykorzystać te 3 kropki, aby utworzyć tablicę w miejscu z placu wsporniki

odpowiedź jest prosta tak, a tu jest docs Java: http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs

(String... args) 

Tutaj główny wątek wywołuje główną metodę przekazywania niektórych argumentów. Typ deklaracji parametru to Array, ale gdy zostanie wywołana metoda, można przekazać jeden lub więcej obiektów String lub tablicę obiektów String jako parametry tej funkcji. W tym przypadku nie ma specjalności dla main().

Również można nazwać myMethod (String args) .. w jeden z następujących sposobów:

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

Ważne Uwaga 1: Parametr (y) przekazywane w ten sposób zawsze jest tablicą - nawet jeśli jest tylko jeden. Upewnij się, że traktujesz to w ten sposób w treści metody.

Ważna uwaga 2: Parametr, który otrzymuje ... musi być ostatnim w sygnaturze metody. Tak więc, myMethod (ciągi int, String ...) jest w porządku, ale myMethod (String ... string, int i) nie jest w porządku.

też wspomnieć, że Próbowano z „Integer []” i nie zrobił praca, Oto przykład

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); 
     } 
    } 
Powiązane problemy