2011-09-06 9 views
5

Możemy podać parametr args[] na metodę main() lub wybrać nie. Ale jeśli nazwalibyśmy jakąkolwiek inną sparametryzowaną metodę bez podania wystarczającej liczby argumentów, spowodowałoby to błąd.Dlaczego nie otrzymamy błędu, gdy nie przekazujemy żadnych argumentów wiersza poleceń?

Dlaczego nie jest tak w przypadku metody main(String[] args)?

+0

Czy możesz być bardziej jasne, w jaki sposób wykonujesz aplikację zi bez parametrów? – medopal

+3

Powiązana odpowiedź, możesz zrobić to samo, jak w 'public void myMethod (String ... array)' w ten sposób możesz przekazać niecałkowitą liczbę argumentów nawet 0, i to nie spowoduje błędu. – medopal

Odpowiedz

1

Ponieważ Main jest wyjątkowy i automatycznie pobiera pusty String array w leu nic podanych. Jak to dokładnie opisuje wywołanie main() bez argumentów. System zapewnia to jako udogodnienie.

+0

Niepoprawnie. 'null' nie ma z tym nic wspólnego. – aioobe

1

Java wywołuje samą metodę główną z argumentami, więc nie ma na niej błędu, mimo że "wywołujemy" bez argumentów.

4

Tablica ciągów jest zawsze przekazywana, nawet jeśli nie ma parametrów wiersza polecenia. W tej sytuacji długość tablicy jest 0, co można przetestować samemu poprzez

public static void main(String[] args) { 
    if (args.length == 0) { 
     System.out.println("no parameters were passed"); 
    } 
} 
10
public static void main(String[] args) 

main zawsze otrzymuje jego parametr, który jest tablicą String. Jeśli nie przekazujesz żadnych argumentów wiersza poleceń, args jest pusty, ale wciąż tam jest.

2

Jak widać, główny z wyjątkiem jednego argumentu funkcji - który jest tablicą ciągów. JVM dba o przekazywanie wszelkich argumentów wiersza poleceń jako tablicy łańcuchów do głównej funkcji. Jeśli nie podano żadnych argumentów, pusta tablica jest przekazywana - ale wciąż tam jest.

Można by również mieć swój własny funkcja zdefiniowana jako to:

void myMain(String args[]) { 
    for(int i = 0; i < args.length; i++) { 
     System.out.println(args[i]); 
    } 
} 

Następnie można wywołać tej funkcji emulacji przechodzącej trzy argumenty wiersza polecenia:

String a[] = {"foo", "bar", "bah"}; 
myMain(a); 

Albo można naśladować sytuację gdzie nie podano argumentów wiersza polecenia:

String a[] = {}; 
myMain(a); 

Można również przekazać args z prawdziwym głównym do swojej funkcji i będzie działać niezależnie od tego czy jakiekolwiek parametry zostały podane czy nie:

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

Zauważ, że nie ma zerowy sprawdzić wskaźnik w myMain więc jeśli go przekazywać null będzie rzucać NPE.

Powiązane problemy