2009-11-04 9 views
15

Rozumiem, że ciąg [] argumentów jest tablicą ciągów przekazanych do głównych jako parametry.Dlaczego w języku Java wymagane są argumenty String []?

java Print "Hello, World!" 

 

class Print { 
    public static void main(String[] args) { 
    System.out.println(args[0]); 
    } 
} 

Jeśli jednak nie obejmują go jako parametr (nawet jeśli nie używają), zgłasza wyjątek. Dlaczego jest to wymagane? Dlaczego nie może to być int [] lub boolean []?

Odpowiedz

31

Jest to ciąg, ponieważ wiersz polecenia jest wyrażony w tekście. Jeśli chcesz przekonwertować ten tekst na liczby całkowite lub booleany, musisz to zrobić samodzielnie - w jaki sposób system operacyjny lub program ładujący Java będą dokładnie wiedzieć, jak chcesz, aby wszystko było przetwarzane? Przypuszczam, że Java może szukać głównej metody z taką samą liczbą parametrów, jak argumenty wiersza poleceń, a następnie spróbuj je przeanalizować przy użyciu Integer.parseInt itd ... ale byłoby to dość skomplikowane i nadal byłoby niewystarczające w wielu sytuacjach.

Co do tego, że jest to obowiązkowe - w zasadzie projektanci Javy postanowili trzymać się jednej sygnatury metody, co jest prostsze, niż pozwala na opcjonalność. Byłoby jednak możliwe - w języku C# można mieć dowolną z następujących cech: Ostatecznie nie robi to wielkiej różnicy, szczerze mówiąc. Nie ma znaczącej przewagi w konieczności uwzględnienia parametru.

+0

Oi, dlaczego nazwa się zmienia? – paxdiablo

+0

+1 - to nie ma znaczenia. Poruszaj się, nic się nie dzieje :-) –

+0

@paxdiablo: Mała zabawa z powodu mojej rozmowy w DevDays, to wszystko. Powróci za kilka dni lub tydzień. –

4

System wykonawczy Java wyszukuje konkretnie metodę z pojedynczym parametrem typu String[], ponieważ chce przekazać parametry do metody main. Jeśli taka metoda nie jest obecna, informuje o tym przez wyjątek.

Jeśli chcesz traktować parametry wiersza poleceń jako liczby całkowite lub booleany, musisz wykonać konwersję samodzielnie. Pozwala to na obsłużenie stanu, w którym ktoś wchodzi "ponies", gdzie oczekujesz liczby całkowitej.

+0

Dlaczego? Jeśli znasz powód, powiedz mi tutaj - http: //stackoverflow.com/questions/33454612/significance-of-string-args-while-writing-main – abhishah901

2

Tak zaprojektowano język. C i C++ robią to w podobny sposób, ale z osobną liczbą informacji zawartych w tablicy łańcuchów dla Javy.

Ty mógłby zaprojektowali go wziąć liczb całkowitych lub wartości logicznych ale bym dodał więcej pracy do wykonywania Java dla potencjalnie mało korzyści.

Struny mogą być używane do przesyłania jakichkolwiek informacji do programu głównego (w tym liczby całkowite i booleany). Nie dla liczb całkowitych, jeśli chcesz przekazać ciąg znaków (skrót od użytkownika, który musi ręcznie zakodować go jako UTF-8 lub coś podobnego, a nie coś, co mogłoby zachęcić ludzi do tego języka).

Pamiętaj tylko, aby to zgłosić. Za wszelką cenę, wyślij prośbę o zmianę na język, jeśli chcesz (uczynić to opcjonalnym lub zezwalaj na inne podpisy), ale podejrzewam, że nie zajdzie zbyt daleko.

-1

Ponieważ kod, który uruchamia twoją funkcję main(), wygląda bardzo konkretnie dla tego podpisu. Pomyśl o tym jako o, gdzieś:

Oczywiście, jeśli coś innego podejmie, to się nie powiedzie.

0

To konwencja.Metoda ta jest używana przez interpreter wiersza poleceń i tak się go oczekuje. Co więcej - kompilator oczekuje również podpisu w tej konkretnej formie i nie skompiluje się, jeśli pominięto parametr, na przykład:

+0

Dlaczego? Jeśli znasz powód, powiedz mi tutaj- http://stackoverflow.com/questions/33454612/significance-of-string-args-while-writing-main – abhishah901

+0

Tłumacz * oczekuje podpisu. Bez kompilatora. – abhishah901

0

Parametr string [] służy do zapisywania argumentów linii poleceń, z których pierwsza jest nazwą klasy. Co więcej, jeśli wywołasz swoją główną metodę bez łańcucha [], będzie to po prostu przeciążenie, a JVM nie będzie wywoływać tej metody. Jeśli pominiesz tę główną metodę podpisu, JVM wyrzuci wyjątek:

+0

Pierwszy argument linii poleceń nie jest nazwą klasy w Javie. Jeśli nie przekazujemy żadnego argumentu wiersza poleceń, tj. Po prostu mówienie java yourClassName, to nie wstawi nazwy klasy do tablicy String. W języku C/C++ nazwa pliku wykonywalnego jest pierwszym argumentem. – Vivek

Powiązane problemy