Einige weitere Erklärungen zur Java -Programmierung
Die Spezifikation der Sprache Java
Die Java Language Specification (JLS ) ist die maßgebliche Spezifikation (also „Festlegung“, „Bestimmung“) der Programmiersprache Java.
Sie stammt vom Inhaber der Rechte am Namen „Java “ für Programmiersprachen, weswegen Dritte wahrscheinlich keine solche Spezifikation veröffentlichen dürfen.
Die Bedeutung von Begriffen in Zusammenhang mit der Programmiersprache Java wird durch die JLS festgelegt.
Die JLS kann mit Suchmaschinen im Web gefunden und dort gelesen werden, ist aber auch als Papierbuch erhältlich.
Die JLS liegt 2018 in der “Java SE 10 Edition ” (Ausgabe) vor, welche auch kurz als JLS10 bezeichnet wird.
Das “Java Development Kit ” (JDK)
Das JDK ist das Entwicklungssystem für Java -Programme, welches vom Inhaber der Rechte an der Bezeichnung „Java “ selber stammt. Damit ist es sozusagen das Standard-Entwicklungssystem für Java. (Es gibt auch andere Entwicklungssysteme für Java.)
Der Java -Ausführer (“Java interpreter ”)
Seit zirka 2018 (JDK 11 ) gibt es einen vereinfachten Aufruf zum Starten eines Java -Programms.
- Kommando zum Starten der Quelldatei »Main.java«
java Main.java
Dieser vereinfachte Aufruf startet das angegebene Java -Programm (»Main.java«).
- Solch ein Kommando muß in die Kommandoeingabe des verwendeten Betriebssystems eingegeben werden. Es ist dann noch möglich, daß das Kommando »java« nicht gefunden wird. Dann muß die Suchpfadliste für Kommandos noch angepaßt werden oder ein vollständiger Pfadname für das Kommando eingegeben werden.
- Wenn man eine Programmiersprache wie Java erlernen will, sollte man schon gute Betriebssystemkenntnisse haben, so daß die Kommandoeingabe und das Verfahren zum Anpassen der Suchpfadliste oder der Schreibung eines vollständigen Pfadnamens hier als schon bekannt vorausgesetzt wird. Eventuell muß man sich sonst erst einmal mit dem Betriebssystem vertraut machen oder sich bei diesen ersten Schritten von jemandem mit Betriebssystemkenntnissen helfen lassen.
Die Quelldatei »Main.java« kann dann Klassendefinitionen (»class«) enthalten, deren erste das Hauptprogramm festlegt.
Bei der traditionellen Weise ein Programm zu starten, sind mindestens zwei Kommandos einzugeben. Dabei darf dann jede Quelldatei nur eine einzige öffentliche Klasse enthalten, und deren Namen muß mit dem Namen der Quelldatei (vor ».java«) übereinstimmen.
Der Java -Übersetzer (“Java compiler ”) ⃗
Java -Programme können üblicherweise nicht direkt ausgeführt werden. Sie müssen erst von einem Java -Übersetzer (einem “Java compiler ”) in die Bytecode -Sprache (den “bytecode ”) gewandelt werden. Das Ergebnis wird dann in einer Klassendatei (“class file ”) (oder in mehreren solcher Dateien) gespeichert. In Java erzeugt der Übersetzer also Klassendateien. Eine Klassendatei enthält die Darstellung eines Java -Programmteils, der Klasse genannt wird.
Die von einem Übersetzer eingelesene Datei wird auch als Quelldatei und die von ihm erzeugte Datei wird auch als Zieldatei bezeichnet, da diese Dateien bei der Übersetzung die Quelle beziehungsweise das Ziel darstellen. Im Falle eines Java -Übersetzers ist die Quelldatei eine Java -Datei (mit „Java-Quelltext“) und die Zieldatei eine Klassendatei.
- Übersetzung einer Quelldatei
- [ Quelldatei ]--->( Übersetzer )--->[ Zieldatei ]
- [ Java-Datei ]--->( Übersetzer )--->[ Klassendatei ]
Das, was ein Übersetzer übersetzt (hier also die Quelldatei), wird auch als Übersetzungseinheit bezeichnet.
Der Java -Übersetzer heißt normalerweise »javac« (“Java compiler ”). Er ist ein Teil des JDK. Wenn er die Quelldatei »Main.java« übersetzt, dann heißt das Ergebnis dieser Übersetzung normalerweise »Main.class«.
- Übersetzung der Quelldatei »Main.java«
- [ Main.java ]--->( javac )--->[ Main.class ]
Das Kommando zum Übersetzen der Quelldatei »Main.java« lautet bei einer gut eingerichteten Umgebung wie folgt.
- Kommando zum Übersetzen der Quelldatei »Main.java«
javac Main.java
Unter einigen Umgebungen kann das tatsächlich notwendige Kommando allerdings von dieser Idealform abweichen.
Die virtuelle Maschine für Java ⃗
Die Bytecode -Sprachen-Darstellung eines Programms kann von einem Programm ausgeführt werden. Dieses ausführende Programm hat damit eine ähnliche Aufgabe wie sonst klassische Prozessoren oder Rechner und wird daher auch als virtuelle Maschine für Java (“Java Virtual Machine ”, oder kurz JVM ) bezeichnet. Das Wort „virtuell“ soll dabei ausdrücken, daß es sich nicht um eine richtige Maschine (ein Gerät, hardware ), sondern um ein Programm (Daten, also Gerätekonfigurationen, Gerätezustände; software ) handelt. Im Gegensatz zu einem Emulator wird dabei eine Maschine simuliert, die nicht unbedingt auch als Gerät (hardware ) existiert haben muß.
- Ausführung einer Klassendatei
- [ Klassendatei ]--->( virtuelle Maschine für Java )
Die virtuelle Maschine für Java heißt als Programm normalerweise »java« oder ähnlich. Sie ist ein Teil des JDK und des JRE .
Eine von ihr ausgeführte Klassendatei kann beispielsweise »Main.class« heißen.
- Ausführung einer Klassendatei durch die virtuelle Maschine für Java
- [ Main.class ]--->( java )
Die JVM kann unter verschiedenen Betriebssystemen und Prozessoren eingerichtet werden. Dadurch wird es möglich, daß die schon übersetzte Bytecode -Sprachen-Darstellung eines Programms unter verschiedenen Betriebssystemen und auf unterschiedlichen Prozessoren ausgeführt werden kann.
Die virtuelle Maschine für Java führt Java -Programme nicht direkt aus, sie führt Bytecode -Programme aus, welche aus Java -Programmen erzeugt werden können.
Das Kommando zum Starten der Klasse »Main« als Programm lautet bei einer gut eingerichteten Umgebung wie folgt.
- Kommando zum Starten der Klasse »Main«
java Main
Unter einigen Umgebungen kann das tatsächlich notwendige Kommando allerdings von dieser Idealform abweichen.
Insgesamt lauten die beiden Kommandos zum Übersetzen der Quelldatei »Main.java« und zum anschließenden Starten der Klasse »Main« als Programm bei einer gut eingerichteten Umgebung also wie folgt.
- Kommando zum Übersetzen der Quelldatei »Main.java« und zum Starten der Klasse »Main«
javac Main.java
java Main
Unter einigen Umgebungen können die tatsächlich notwendigen Kommandos allerdings von dieser Idealform abweichen.
Die beiden Programme »javac« und »java« bilden gemeinsam eine Java -Implementation.
Das Java Runtime Environment (JRE)
Das Java Runtime Environment (JRE ) („Java -Laufzeit-Umgebung“) ist eine Software, die einen Computer dazu befähigt, Bytecode -Programme auszuführen. Das JRE enthält also eine JVM, aber keinen Java -Übersetzer. Es wird daher auf Computer installiert, die Java -Software ausführen können sollen, aber nicht zur Entwicklung neuer Java -Software dienen sollen. Es wird auch manchmal einfach nur als „Java “ bezeichnet.
- Beispiel eines ausführbaren Java-Programms
http://www.jgoodies.com/freeware/jdiskreport/
Java SE
Eine Bibliothek ist eine Sammlung von Programmen (oder Programmbestandteilen).
Java SE (“Java standard edition ”) ist das JRE zusammen mit einer bestimmten Bibliothek – der Standardbibliothek von Java SE.
Java SE wird oft auch einfach nur als „Java “ bezeichnet, weil die Verwendung von Java SE die bekannteste und verbreiteteste Art der Nutzung dieser Programmiersprache ist.
Auch in diesem Kurs hier wird im wesentlichen Java SE behandelt.
Jakarta EE (“enterprise edition ”) ist Java zusammen mit einer für Web-Server erweiterten Bibliothek.
Java ME (“Java micro edition ”) ist Java zusammen mit einer für kleine Computer verminderten Bibliothek.
Verbundene Implementationen
Web-Dienste, welche die Ausführung von Java erlauben sind unter anderem IdeOne und TryJShell.
“JDK Tools And Utilities ” ⃗
Auf der Oracle -Web-Seite “JDK Tools And Utilities ” finden sich Dokumentationen zu Programmen wie »java« und »javac« unter “Basic Tools ”.
- Informationen zu jlink
docs.oracle.com/javase/9/tools/jlink.htm
Zur Lesbarkeit der JLS *
Die folgenden beiden Zitate zeigen, daß die JLS sowohl einfache als auch kompliziert formulierte Aussagen enthält.
Zitat
- An expression statement is executed by evaluating the expression; if the expression has a value, the value is discarded.
Zitat
- Let ssw[i] be the sw[i] edges that are also in the transitive reduction of hb[i] but not in po. We call ssw[i] the sufficient synchronizes-with edges for E[i]. If ssw[i](x, y) and hb[i](y, z) and z in C[i], then sw[j](x, y) for all j ≥ i.
Zitate *
http://www.oracle.com/technetwork/java/javase/terms/products/index.html (2015-09-04) *
- Java SE includes:
- • The Java Development Kit (JDK), including the JavaFX Software Development Kit (SDK),
- • Java Runtime Environment (JRE), (Server and regular packages)
- • JavaFX Runtime,
- • JRockit JDK
- The JDK is a superset of the JRE, and contains everything in the JRE, plus tools such as compilers and debuggers for development. A JRE provides a Java Virtual Machine (JVM), the standard class libraries and other components to run applications written in the Java programming language.
- Aussprachehinweise
- superset ˈsupɚ ˈsɛt