Fordern Sie heraus, Javas Hello World unter Bezugnahme auf die Sprachspezifikationen zu erklären

Dieser Beitrag ist ein Artikel aus Schoos Sonderprojekt "Schoo Adventskalender 2016" Ende 2016. Ich bin Assistent bei Schoo und konzentriere mich auf das Masterplan-Geschäft.

Dieses Mal werde ich Javas Hello World anhand der Sprachspezifikationen erläutern. Es ist eine Geschichte wie "public static void main (String [] args) {...}".

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

Warum public static void main (String [] args) {...} beabsichtigt ist

Die Methode main muss als public, static, void deklariert werden. Es muss auch ein Argument erforderlich sein, nämlich ein Array von Zeichenfolgen. Quelle: Java-Sprachspezifikation 3. Ausgabe 12.1.4 Starten von Test.main S.277 </ cite>

Es gibt keine andere Wahl, als zu gehorchen, weil es so etwas sagt. Keine Programmiersprache kann ohne einen Startpunkt starten, der als Einstiegspunkt bezeichnet wird. Obwohl dies je nach Sprache unterschiedlich ist, sind die Einstiegspunktspezifikationen festgelegt, und im Fall von Java ist dies der Fall.

Es ist in Ordnung, damit zu enden, aber wenn man den Grund dafür bedenkt, kann man verschiedene Java-Welten sehen, also bleiben Sie bitte in Kontakt.

Klasse

Lassen Sie uns zunächst über den Teil der Klassendeklaration sprechen.

class Test {
    …
}

Es wird deklariert, dass es ein Schlüsselwort "class" gibt und es sich um eine Klasse namens "Test" handelt.

Da Java auf Objektorientierung basiert, können wir uns vorstellen, dass der Grundbaustein eine Klasse ist. Dies behandelt die main () -Methode nicht als Ausnahme. Wenn Sie also die main () -Methode ausführen, gehört sie zu einer Klasse.

Der Klassenname kann beliebig sein, solange er nicht gegen die Regeln verstößt. Schließlich gibt es beim Ausführen der main () -Methode keine Einschränkungen für den Klassennamen, da dieser bei der Eingabe des Java-Befehls angegeben wird. Der Klassenname kann vielmehr ein beliebiger Name sein, daher ist es zulässig, die main () -Methode in eine beliebige Klasse zu schreiben. Einige Leute verstehen manchmal falsch, dass sie eine im Projekt haben müssen, aber Sie können in jeder Klasse schreiben. Zum Beispiel beim vorübergehenden Schreiben von Testcode. (JUnit ist besser)

Einige Leute mögen auch denken, dass es keine "Öffentlichkeit" gibt, aber es ist kein Muss.

Lassen Sie uns hier etwas tiefer in die Klassendeklaration eintauchen.

Eine Klassendeklaration ist eine Deklaration eines neuen Referenztyps. Es gibt zwei Arten von Klassendeklarationen: normale Klassendeklarationen und Enum-Deklarationen. Quelle: Java-Sprachspezifikation 3. Ausgabe 8.1 Klassendeklaration S.194 </ cite>

Der Teil, der "einen neuen Referenztyp deklariert", ist der wichtigste. Wenn Sie nicht verstehen, dass eine Klasse ein Referenztyp ist, können Sie den Polymorphismus wahrscheinlich nicht verstehen. Da es sich um eine "Klasse" oder "Aufzählung" handelt, ist Aufzählung tatsächlich eine spezielle Klasse. Auch wenn enum ein anderes Konzept als die Klasse zu sein scheint, muss unterdrückt werden, dass es verschiedene Merkmale der Klasse aufweist.

Methode

Als nächstes folgt der Teil der Methodendeklaration.

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

Die Spezifikationen der Methode selbst sehen so aus.

Die Methode deklariert ausführbaren Code, der durch Übergabe einer bestimmten Anzahl von Argumenten als Werte aufgerufen werden kann. Quelle: Java-Sprachspezifikation 3. Ausgabe 8.4 Methodendeklaration S.186 </ cite>

Zugriffsmodifikator

Der Zugriffsmodifikator muss "öffentlich" sein.

Ich kann mir vorstellen, warum es "öffentlich" sein muss. Da die JVM die main () -Methode der durch das Argument angegebenen Klasse ausführt, passt "public" gut, wenn man bedenkt, dass sie offensichtlich von außen gestartet wird. Es scheint, dass die "öffentliche" Bezeichnung notwendig ist.

Es gibt "öffentliche", "(nicht spezifizierte)", "geschützte" und "private" Zugriffsmodifikatoren für Methoden, und es ist wünschenswert, das Ausblenden von Informationen durch Verhalten durch Auswahl dieser zu steuern.

static

Muss "statisch" sein. Angesichts der Tatsache, dass dies der Instanziierung der main () -Methode entspricht, ist es unvermeidlich, dass die main () -Methode eine statische Methode sein muss.

Als statisch deklarierte Methoden werden als Klassenmethoden bezeichnet. Klassenmethoden werden immer ohne Verweis auf ein bestimmtes Objekt aufgerufen. Quelle: Java-Sprachspezifikation 3. Ausgabe 8.4.3.2 statische Methode S.193 </ cite>

Als Methode zum Erstellen einer Instanz in Java kann "neu" oder "durch Reflexion erstellen" in Betracht gezogen werden. Es wird jedoch angenommen, dass diese vom ursprünglich instanziierten Objekt ausgeführt werden. Was passiert dann im Ausgangszustand, in dem noch keine Instanz existiert?

Daher ist in Java statisch vorhanden. Es ist statisch, dass es "immer ohne Verweis auf ein bestimmtes Objekt gestartet werden kann", wie in der Spezifikation beschrieben. Daher ist eine statische Methode erforderlich, die so gestartet werden kann, wie sie ist, damit eine Art Start durchgeführt werden kann, wenn kein Objekt vorhanden ist, das neu gestartet werden kann.

Wenn Sie dies verstehen können, sollten Sie in der Lage sein, das Speichermodell von Java zu verstehen. Java-Klassen sind im Grunde genommen Objektentwurfszeichnungen, die zum neuen Zeitpunkt instanziiert und im Speicher erweitert werden (obwohl es Reflexionen gibt). Abgesehen davon gibt es jedoch auch statische Aufladung.

Dieses statische Konzept ist Programmanfängern nur schwer zu erklären. Um das Konzept von "neu" mit aller Kraft zu vermitteln, würde ich sagen "etwas ist statisch" ... Außerdem ist eine erfahrene Person mit funktionaler Sprache missbräuchlich, um alles statisch zu machen.

Rückgabetyp

Der Rückgabetyp muss "void" sein. Die main () -Methode in Java gibt nichts zurück.

Deklarieren Sie im Rückgabetyp der Methode den Wert, wenn die entsprechende Methode einen Wert zurückgibt, und beschreiben Sie andernfalls void. Quelle: Java-Sprachspezifikation 3. Ausgabe 8.4.5 Methodenrückgabe S.196 </ cite>

Es scheint nichts zurückzugeben, also ist es nichtig. Wenn Sie wirklich einen Rückkehrcode zurückgeben möchten, gibt es eine Methode wie System.exit ().

Methodenname

Der Methodenname muss "main" sein. Es ist eine Regel, also habe ich keine andere Wahl, als sie zu befolgen.

Wenn Sie ab und zu einen Fehler wie "mein" machen, wird kein Kompilierungsfehler angezeigt und Sie können nicht starten. Leute, die daran gewöhnt sind, sind gut, aber Anfänger neigen dazu, Fehler zu machen und süchtig zu werden, besonders wenn sie nur mit Notizblock fertig sind.

Der normale Methodenname kann beliebig sein, solange er nicht gegen die Konvention verstößt.

Streit

"Außerdem müssen Sie ein Argument erhalten, das ein Array von Zeichenfolgen ist." "String [] args" ist erforderlich. Es muss vorhanden sein und es können keine anderen Argumente akzeptiert werden. Übrigens ist es möglich, "String ... args" zu schreiben.

Dies ist erforderlich, um beim Start Informationen zu erhalten. Es ist schön anzunehmen, dass Sie den Modus der Anwendung angeben möchten.

schließlich

Auf dieser Grundlage werde ich Anfängern erklären. Ich möchte, dass die japanische Version der Java SE 8-Version der Sprachspezifikation veröffentlicht wird.

Recommended Posts

Fordern Sie heraus, Javas Hello World unter Bezugnahme auf die Sprachspezifikationen zu erklären
Zurück zum Anfang verspottete Java-Kisama Hello World-
12 Entspricht der while-Anweisung
Über die Sprache, die von nun an zu lernen ist
Ich habe versucht, die Methode zu erklären