Krautkanal.com

Veröffentlicht am 2015-03-21 18:56:56 in /prog/

/prog/ 6831: Was ist der Unterschied zwischen diesen beiden Main-Met...

mizhgan Avatar
mizhgan:#6831

Was ist der Unterschied zwischen diesen beiden Main-Methoden einer Java Klassen. Wann wird welche Methode aufgerufen?

Und warum kann man keine dritte Main-Methode dieser Klasse hinzufügen?
public static void main(String[] agrs) {
System.out.println("Walter");
}

ajaxy_ru Avatar
ajaxy_ru:#6832

Die erste kompiliert nicht, glaube ich. Du kannst kein Array an Varargs übergeben. Auch kannst du keine zwei main-Methoden in einem Projekt haben.

String[] ist ein Array-Datentyp mit fester Elementzahl,

String... ist ein Vararg-Datentyp von Strings.

In main-Methode, die von CMD z.B. aufegrufen werden kann mit "eins", "zwei", "drei" als Argumenten (hinter Programmnamen), spielt es keine Rolle, was du verwendest.

Aber wenn du von anderer Methode aus main() aufrufst, musst du bei String... Strings nicht vorher in ein Array/Liste packen.

arashmanteghi Avatar
arashmanteghi:#6833

Nee, Moment, müsste kompilieren, Generics mit denen Varargs implementiert sind, können ja auch Arrays aufnehmen. Aber du hast trotzdem vermutlich nicht String[]... gemeint

jqueryalmeida Avatar
jqueryalmeida:#6836

Die Syntax
void x(y... z)
wird vom Compiler ersetzt durch
void x(y[] z).

Dementsprechend ist OPs Code äquivalent zu
public class Test {
public static void main(String[][] a) {
System.out.println("Bernd");
}

public static void main(String[] a) {
System.out.println("Lauert");
}
}

D.h. main liegt zweimal in überladener Form vor (die Signatur besteht in Java aus Methodenname sowie Anzahl und Typen der Argumente (und vielleicht auch aus der Sichtbarkeit, da ist Bernd sich gerade nicht sicher).

Beim Aufruf einer Klasse von der Kommandozeile aus wird die Methode mit der Signatur main(String[]) aufgerufen, in OPs Beispiel also die zweite.