01.04.02 Analyse des Quellcodes
Widmen wir uns nun der Analyse des Quellcodes. Es ist wichtig zu wissen, dass Java eine Objekt-Orientierte-Programmiersprache ist. Das heißt, dass jedes Java-Programm in Klassen mit unterschiedlichen Funktionen aufgeteilt wird. Jede Klasse sollte in einer eigenen Datei abgespeichert werden. Unsere Anwendung benötigt aber lediglich eine Klasse – die HelloWorld
-Klasse.
package de.helloworld;
Diese Zeile spezifiziert das Package
dieser Klasse (Datei). Packages
kann man sich wie eine Ordnerhierarchie vorstellen. Der Programmierer definiert verschiedene Packages
, um eine klare Struktur in seine Anwendung zu bringen und verschiedene Programmteile voneinander zu trennen. Unterverzeichnisse werden bei Packages
durch den „.“ (Punkt) definiert.
public class HelloWorld {
Diese Zeile definiert die Klasse (class) mit dem Namen HelloWorld
und der Sichtbarkeit public
(öffentlich). Anschließend wird durch eine geöffnete, geschweifte Klammer signalisiert, dass ab hier die Definition/der Gültigkeitsbereich dieser Klasse beginnt. Der Klassenname sollte immer identisch zu dem Dateinamen, in welchem der Quellcode abgespeichert ist, sein. Wenn die Klasse öffentlich ist (was meistens zutrifft), dann müssen Dateinamen und Klassennamen sogar identisch sein. Nennen Sie die Datei also am Besten immer so, wie auch Ihre Klasse heißt (wird in späteren Kapiteln nicht mehr explizit angemerkt).
public static void main(String[] args) {
Das ist die so genannte Main-Methode, welche den Einstiegspunkt eines jeden Java-Programms definiert. Vorerst müssen Sie nicht mehr wissen, wie dass der Code nach der geöffneten, geschweiften Klammer bis zur abschließenden, geschlossenen, geschweiften Klammer immer zuerst in Ihrem Programm ausgeführt wird.
Den Bereich zwischen den beiden geschweiften Klammern nennt man (Methoden-) Körper, Block oder Gültigkeitsbereich
Alles andere wird aus dieser Methode heraus gesteuert/gestartet.
System.out.println("Hallo Welt");
Mit diesem Code wird der Text „Hallo Welt“ auf dem Bildschirm/in der Konsole ausgegeben. Grundsätzlich können Sie sich merken, dass mit System.out.println()
ein Text ausgegeben wird. Der auszugebende Text wird in die Klammern und in Anführungszeichen geschrieben.
Genau genommen funktioniert
System.out.println("Hallo Welt");
so: Es wird die öffentliche Methodeprintln()
des öffentlichen, statischenPrintStreams out
der KlasseSystem
mit dem Übergabeparameter „Hallo Welt“ aufgerufen. Wenn Sie diese Ausführung nicht verstehen, ist dies nicht weiter schlimm.
Das abschließende Semikolon weißt den Compiler darauf hin, dass dieser Funktionsaufruf hier abgeschlossen ist, und nun weitere Aufrufe folgen können. Generell endet jeder Aufruf, der keinen Gültigkeitsbereich/Block definiert, mit einem Semikolon.
}
Eine geschlossene, geschweifte Klammer schließt den zuletzt geöffneten Gültigkeitsblock (natürlich können mehrere Blöcke ineinander verschachtelt werden) – in diesem Fall den Bereich der Main-Methode.
}
Die letzte, geschlossene, geschweifte Klammer schließt den Gültigkeitsbereich unserer Klasse und stellt somit auch das Ende dieser Klasse dar.
Kompilieren der Klasse
Sie erinnern sich an den javac
-Aufruf aus dem letzten Kapitel zum Kompilieren des Programms? Dieser setzt sich wie folgt zusammen:
javac
Javac ist der Java-Compiler. Dieses Programm wird mit bestimmten Parametern aufgerufen, um aus Java-Quellcode Java-Byte-Code zu erstellen. Nach javac
folgt eine Leerzeichen und anschließend
de/helloworld/
, was das Package
der zu kompilierenden Klasse angibt. Es ist wichtig, dass das Package
beim Kompilieren in der Form package/unterpackage/
(sprich: durch Schrägstriche getrennt und nicht etwa durch Punkte) angegeben wird. Anschließend folgt noch der vollständige Dateiname der zu kompilierenden Klasse (inkl. .java Endung).
HelloWorld.java
Ausführen der Anwendung
Der Aufruf zum Ausführen einer Anwendung ist dem zur Kompilierung von Quelltext sehr ähnlich:
javac
durchjava
ersetzen- „/“ (Slash) im
Package
durch „.“ (Punkt) ersetzen - Die Dateiendung wird nicht mit angegeben. Aus
HelloWorld.java
wird alsoHelloWorld
Warum ist es wichtig, dass das Package in der Form package/unterpackage/ angegeben wird?
Bei mir sieht die Ordner-Struktur ungefähr so aus:
Uebungen(hier kommen alle Beispiele rein) \Beispiel1(hier kommt das erste Beispiel „Hello World“ rein) \ HelloWorld.java
Ist so eine Ordner-Struktur für die Zukunft ein Hinderniss beim Programmieren bzw macht es schwerer sich auszukennen?
Sollte ich bei dem Ordner Beispiel1 noch einen Unterordner machen wie z.B. src? Wenn ja, warum?
Habe ein bisschen gegoogelt aber keine für mich verständliche und logische Antwort gefunden.
Hallo Niko,
da hast du etwas falsch verstanden. Diese Aussage, die du in deinem Kommentar zitierst, steht unter der Überschrift Kompilieren der Klasse. Es ist nur wichtig, dass beim Kompilieren über die Konsole auch die Package-Struktur mit angegeben wird. Wie du deine Package- und/oder Projektstruktur gestaltest, bleibt ganz dir überlassen (und soll in diesem Kapitel auch noch gar nicht behandelt werden). Sie sollte nur logisch sein. Für weitere Informationen über Packages kannst du im Kapitel 04.03.10 Pakete nachschlagen.
Gruß
Stefan
PS: Ich werde mal betreffende Zeile etwas umformulieren, dass es im Kapitel etwas deutlicher wird. Danke für den Hinweis 🙂 .
Okay.
Gerne doch.
Hab bisher auch 2 Schreibfehler gesehen. Aber ich glaube das ist unwichtig oder möchtest du sie wissen? 😀
Und Kapitel 04.03.10 Pakete hat meine weiteren Fragen zu diesem Thema großteils beantwortet.
Ist es denn in Ordnung das ich Fragen hier als Kommentar schreibe oder gibt es auch ein Forum speziell zu diesem Blog-Buch?
Abend Niko,
da haben wir ja einen Stammleser gewonnen 🙂 .
Rechtschreibfehler kannst du mir gerne mitteilen – die gehören einfach nicht in ein Buch. Würde aber bevorzugen, wenn diese per Mail an mich kommen, oder wenn ich den Kommentar danach wieder löschen darf. Nicht etwa, weil wir den Anspruch erheben unfehlbar zu sein ( 😉 ), sondern vielmehr damit die Kommentare sachlich und für den Leser nützlich und übersichtlich bleiben.
Wenn du weitere Fragen zu Paketen hast, kannst du diese gerne beim entsprechenden Kapitel stellen. Ein separates Forum gibt es nicht. Dies ist auch so gewollt. So können andere Leser (falls sie evtl. die selben Fragen haben sollten) die Antwort direkt in den Kommentaren finden – ohne sich umständlich registrieren, oder lange auf eine Antwort warten zu müssen.
Gruß
Stefan
Ein paar kleine Anmerkungen die nicht veröffentlicht werden müssen (post kann gelöscht werden)
Oben steht „.. können getrost einige Kapitel überspringen“ widerspricht sich irgendwie mit „Vermeiden Sie Kapitelsprünge (jeder Aspekt einer Programmiersprache ist wichtig)“ aus ‚Lernen Sie Schritt für Schritt!‘
Das ist aber nicht was ich eigentlich sagen wollte.
Ich wollte eigentlich nur darauf aufmerksam machen das unter ‚Kompilieren der Klasse‘ folgendes steht: „Nach javac folgt eine LeerZEILE und anschließend“.
Es soll bestimmt LeerZEICHEN heißen. Oder?
X!
Hallo Xnilagor,
danke für die Hinweise. Ich habe das Kapitel soweit angepasst.
Das Überspringen der Kapitel bezog sich darauf, dass jemand, der schon Erfahrungen mit Java gesammelt hat, sich nicht mit einem Hello-World-Programm beschäftigen muss. Aber Sie haben recht. Meistens werden in solchen Fällen ohnehin die ersten Kapitel übersprungen.
Gruß
Stefan