Frage

Ich habe eine Frage zur Syntax von Java main Erklärung:

public static void main (String[] args)

Da Sie beim Aufruf der Hauptfunktion eine variable Anzahl von Strings übergeben können, sollte dies nicht eine Argumentliste variabler Länge und kein Array sein?Warum sollte ein Befehlszeilenaufruf dieser Methode mit einer Liste von String-Parametern überhaupt funktionieren?(Es sei denn, es gibt eine Verarbeitung hinter den Kulissen, die ein Array mit der Liste der Zeichenfolgen erstellt und dieses Array dann an die Hauptmethode übergibt ...?) Sollte die Hauptdeklaration nicht eher so aussehen ...?-

public static void main(String... args) 
War es hilfreich?

Lösung

main(String... args) Und main (String[] args) sind im Grunde dasselbe:Was Sie bekommen, ist ein String Array.Die Varargs sind nur syntaktischer Zucker für den Anrufer.

Ich schätze, da du nie anrufst main() Aus dem Code geht hervor, dass es bei der Einführung von Varargs nicht nachgerüstet wurde.

Bearbeiten:Streichen Sie eigentlich den letzten Satz. main(String... args) ist natürlich eine vollkommen gültige Syntax.Die beiden Stile sind vollständig austauschbar.Das funktioniert ganz gut:

public class Test {

    public static void main(String... args) {
        System.out.println("Hello World");
    }

}

Andere Tipps

Sie können main auf beide Arten deklarieren, und es funktioniert einwandfrei.Es gibt keine Probleme mit der „Abwärtskompatibilität“ oder der „Nachrüstung“.Die Leser Ihres Codes könnten ihn jedoch als störend empfinden, und es ist unwahrscheinlich, dass er Ihr Programm in irgendeiner Weise verbessert.

Abschnitt 8.4.1 der Java-Sprachspezifikation (dritte Ausgabe). sagt: „Wenn der letzte formale Parameter ein variabler Aritätsparameter vom Typ ist T, Es wird davon ausgegangen, dass es einen formalen Parameter vom Typ definiert T[]".

Die Spezifikation, wie ein Java-Programm gestartet wird, finden Sie in JLS 12.2, das auf Kapitel 5 der VM-Spezifikation verweist.Der VM-Spezifikation Abschnitt 5.2 sagt, dass die VM eine öffentliche Klassenmethode aufruft „void main(String[])".Da die VM-Spezifikation kein Konzept der Variablenarität enthält, wurde eine Hauptvariable mit „...„erfüllt die Anforderung.

Die Hauptmethode wurde für Java 1.0 entwickelt.

Die „…“-Syntax wurde in Java 1.5 eingeführt

Es wird über ein Array des von Ihnen definierten Typs implementiert (meine Vermutung, aber ...Wenn Java 1.4- und 1.5-Byte-Codes kompatibel sind, muss es mit Arrays implementiert werden.

Es gibt kein Javas Hauptmethode, tatsächlich können Sie das Array als Vararg in deklarieren Ihre Hauptmethode:

public static void main(String... args) { System.out.println("Hi!"); }

Die Java-Hauptsyntax ist älter als Varargs, die erst in Java 1.5 eingeführt wurden.

Sollte die Hauptdeklaration nicht eher so aussehen ...?

public static void main(String... args) 

Eigentlich wäre das problemlos möglich.

Es war String [] args bevor var args eingeführt wurden, aber heutzutage funktionieren beide.

Nun, die 2. Syntax ist nur eine Variation der 1. und ja, es wäre schön, aber sie ist zu diesem Zeitpunkt noch nicht in Java integriert

Warum kümmert dich das?Niemand ruft die Hauptmethode manuell auf.Es ist Java-intern.

BEARBEITEN :Ich denke, das spielt jetzt keine Rolle mehr, da Sie die Hauptmethode wie folgt definieren können:

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

Mein Standpunkt ist immer noch gültig, da niemand main explizit aufruft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top