1.6 Programme des Java JDK
1.6 Programme des Java JDKJava Standard Edition (SE) in seiner Distribution von Oracle kann in zwei Varianten benutzt werden:
- JRE: Java Runtime Environment
- JDK: Java Development Kit (JDK Oracle Download Seite)
Das JDK ist eine echte Obermenge des JRE und enhält die folgenden Komponenten die man zur Entwicklung und Ausführung von Java Programmen im Rahmen des Kurses benötigt:
Program | Bedeutung | Kommentar |
---|---|---|
java | Startet Java Programme | Laufzeitsystem. Interpretiert Javabytecode. Übersetzt häufig verwendeten Javabytecode in Maschinencode |
javac | Übersetzer | Übersetzt Javaquellcode in Bytecode |
javadoc | Generieren von Dokumentation | Erzeugt Dokumentation durch Übersetzen von speziellen Kommentaren im Javaquellcode |
jar | Java Archiver | Bündelt Javabytecode und Dateien zu jar Dateien |
javap | Java Class File Disassembler | Extrahiert Schnittstelleninformation aus class Dateien und erzeugt öffentliche Schnittstellen |
jdb | Java Debugger | Kommandozeilendebugger |
jps | Anzeige der Prozess Ids von Java Programmen | Hilfswerkzeug für jconsole |
jconsole | Monitoren von Java Prozessen | graphisches Werkzeug zum monitoren von Java Anwendungen |
jinfo | Auslesen der Konfiguration eines laufenden Javaprozess | Konsolenausgabe der laufenden Prozessdaten |
Dies ergibt die folgenden Zusammenhänge zwischen den verschiedenen Dateien die bei der Entwicklung beteiligt sind:
Referenzen
- 7002 views
1.6.1 Das erste Javaprogramm (Benutzung der Kommandos java und javac)
1.6.1 Das erste Javaprogramm (Benutzung der Kommandos java und javac)Überblick
Das Übersetzen von Javaquellprogrammen in interpretierbare Bytecodedateien erfolgt mit dem Java-Übersetzer javac. Das Ausführen der übersetzten Dateien erfolgt mit dem Kommando java, dem Javalaufzeitsystem, welches Javaprogramme startet.
Javaübersetzer: javac
Der Javaübersetzer übersetzt lesbare Quelldateien mit der Dateiextension *.java in eine oder mehrere Bytecodedateien mit der Dateiextension *.class.
Beispiel
$ javac HelloWorld.java
Dieser Befehl erzeugt eine Datei mit dem Namen HelloWorld.class im gleichen Verzeichnis
Tipp: DerJavaübersetzer erwartet den vollen Dateinamen inklusive der Dateiextension .java
Javalaufzeitsystem: java
Das Kommando java erlaubt das Starten von Java-Programmen.
Beispiel:
$ java HelloWorld
Javaprogramme müssen als Bytecodedateien (Dateiextension *.class) oder als zu Java-Archiven (Dateiextension *.jar) gebündelte Bytecodedateien vorliegen.
Tipp: Das Kommando java akzeptiert nur den Namen der auszuführenden Klasse. Es akzeptiert nicht den Namen der gleichnamigen Datei mit dem Bytecode!
Das Kammando java sucht dann standardmässig im aktuellen Verzeichnis nach einer Bytecodedatei (Extension *.class) die den Interpretercode für die gewünschte Klasse enthalten.
Hiermit ergibt sich die Abfolge der Kommandos für ein einfaches Testprogrann HelloWorld.java:
1. Testen der Java Laufzeitumgebung
Überprüfen sie ob eine Javalaufzeitumgebung vorhanden ist. Dies geschieht mit der Option -version des Programms java:
$ java -version openjdk version "11.0.11" 2021-04-20 LTS OpenJDK Runtime Environment Corretto-11.0.11.9.1 (build 11.0.11+9-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.11.9.1 (build 11.0.11+9-LTS, mixed mode)
2. Erstellen des Java-Quellcodes
Erstellen sie eine Textdatei mit dem Namen HelloWorld.java mit dem folgenden Inhalt:
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
Zum Beispiel mit gedit:
3. Übersetzen des Quellcodes
Das Programm javac (javac.exe in Windows) übersetzt den Quellcode.
$ javac HelloWorld.java
Das Ergebnis ist eine Datei mit dem Namen HelloWorld.class. Diese Datei enthält den interpretierbaren Bytecode des Programms.
4. Ausführen des Programmes
Der generierte Bytecode der Datei HelloWorld.class wird dann mit Hilfe des Programms java ausgeführt. Die extension .class wird nicht mit angegeben:
$ java HelloWorld Hello World!
- 8779 views
javac
javacDie (vereinfachte) Syntax von javac ist:
$ javac [Optionen] [Quelldateien]
Die wichtigsten Optionen des Javaübersetzers javac sind:
- -classpath -cp classpath : Verzeichnisse in denen nach .class Dateien gesucht werden soll
- -d directory : Verzeichnis in dem die erzeugten .class Dateien abgelegt werden. Das Verzeichnis muss bereits existieren. Fehlt diese Option, so werden die erzeugten .class Dateien im aktuellen Verzeichnis abgelegt
- - help: druckt alle Standardoptionen auf der Konsole
- -source release: Erlaubt das Parsen der Javaquelldateien nach alten Sprachstandards [1.5,5,1.4,1.3].
- -sourcepath sourcepath: Suchen von Quelldateien in den angegebenen Verzeichnissen und jar Archiven
- -X : Anzeige der nicht Standardoptionen
- 5523 views
1.6.2 Generieren von Schnittstelleninformation
1.6.2 Generieren von SchnittstelleninformationSchnittstellengenerierung mit javap
Der Schnittstellengenerator javap wird im gleichen Verzeichnis aufgerufen in dem sich die Datei HelloWorld.class befindet. Rufen Sie ihn mit dem Befehl "javap HelloWorld" auf. Die Dateiendung .class wird nicht benötigt. javap benutzt nicht die Quelldatei. javap benutzt die Binärdatei und sucht sie im vorgegebenen Suchpfad für Binärdateien
$ javap HelloWorld Compiled from "HelloWorld.java" class HelloWorld extends java.lang.Object{ HelloWorld(); public static void main(java.lang.String[]); }
Es werden die Informationen über alle öffentlichen Eigenschaften generiert. Es werden nicht Informationen über die Implementierung und private Attribute und Methoden generiert.
- 4965 views
1.6.3 Generieren von Javadokumentation
1.6.3 Generieren von Javadokumentation1. Editieren Sie die Datei HelloWorld.java
/** * * @author Ihr Name */ public class HelloWorld { /** * @param args the command line arguments */ public static void main(String[] args) { System.out.println("HelloWorld"); } }
Datei sichern...
2. Rufen Sie javadoc auf
sschneid@scalingbits:~/l1$ javadoc HelloWorld.java Loading source file HelloWorld.java... Constructing Javadoc information... Standard Doclet version 1.6.0_18 Building tree for all the packages and classes... Generating HelloWorld.html... Generating package-frame.html... Generating package-summary.html... Generating package-tree.html... Generating constant-values.html... Building index for all the packages and classes... Generating overview-tree.html... Generating index-all.html... Generating deprecated-list.html
3. Kontrolle Ergebnis: Öffnen Sie mit Ihrem Browser die Datei index.html
Beispiel (Screenshot)
- 5895 views
1.6.4 Javaprozess-Monitoring mit jconsole, jinfo, jps
1.6.4 Javaprozess-Monitoring mit jconsole, jinfo, jpsMonitoring mit jconsole
jconsole ist eine grafische Javaanwendung die es erlaubt die Konfiguration eines Javapozess' zur Laufzeit zu beobachten. Einige der Eigenschaften die beobachtet werden können sind:
- Speicherverbrauch
- Parameter mit denen die VM konfiguriert ist
- genauer Typ der VM
- CPU-Verbrauch
- Anzahl der Threads
- Anzahl geladene Klassen
- ...
Die Verwendung von jconsole geschieht wie folgt:
1. Starten eines Javaprogramm
Starten eines (länger) laufenden Javaprogramm
Starten des Programm DemoFrame
java DemoFrame
2. Bestimmen der Pozess-Id des laufenden Javaprogramms
Jeder Prozess des Betriebssystems hat eine eindeutige Nummer den "Process Identifier". Das Kommando jps listet unabhängig vom Betriebssystem alle Javaprozesse.
jps 254 16964 Jps 16959 DemoFrame
3. Starten von jconsole
jconsole 16959
Wichtig: Das Javaprogramm darf zum Zeitpunkt an dem jps und jconsole aufgerufen werden noch nicht beendet sein!
Laufende jconsole Anwendung:
Monitoring mit jinfo
jinfo liest ebenfalls die wichtigsten Kenndaten eines laufenden Prozesses aus und gibt sie auf der der Konsole aus.
Das erfassen der ProzessId geschieht auch mit dem Hilfsprogramm jps:
1. Starten des Javaprogramms
Starten (länger) laufenden Javaprogramm
Starten des Programm DemoFrame
java DemoFrame
2. Bestimmen der Pozess-Id des laufenden Javaprogramms
Pegasus:bin sschneid$ jconsole 16959 Pegasus:bin sschneid$ jps 254 17168 Jps 17166 DemoFrame
3. Starten von jinfo
Pegasus:bin sschneid$ jinfo 17166 Attaching to process ID 17166, please wait... Debugger attached successfully. Client compiler detected. JVM version is 16.3-b01-279 Java System Properties: java.runtime.name = Java(TM) SE Runtime Environment sun.boot.library.path = /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Libraries java.vm.version = 16.3-b01-279 awt.nativeDoubleBuffering = true gopherProxySet = false mrj.build = 10M3065 java.vm.vendor = Apple Inc. java.vendor.url = http://www.apple.com/ path.separator = : java.vm.name = Java HotSpot(TM) Client VM file.encoding.pkg = sun.io sun.java.launcher = SUN_STANDARD user.country = DE sun.os.patch.level = unknown java.vm.specification.name = Java Virtual Machine Specification user.dir = /Users/sschneid/Documents/JavaKurs/beispiele/l1/HelloWorld java.runtime.version = 1.6.0_20-b02-279-10M3065 java.awt.graphicsenv = apple.awt.CGraphicsEnvironment java.endorsed.dirs = /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/endorsed os.arch = i386 apple.awt.graphics.UseOpenGL = false java.io.tmpdir = /var/folders/UO/UOnPVFsvGEO5k3UJnjadeE+++TI/-Tmp-/ line.separator = java.vm.specification.vendor = Sun Microsystems Inc. os.name = Mac OS X sun.jnu.encoding = MacRoman java.library.path = .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java java.specification.name = Java Platform API Specification java.class.version = 50.0 sun.management.compiler = HotSpot Client Compiler os.version = 10.6.4 http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16 user.home = /Users/sschneid user.timezone = java.awt.printerjob = apple.awt.CPrinterJob file.encoding = MacRoman java.specification.version = 1.6 java.class.path = . user.name = sschneid apple.awt.graphics.UseQuartz = false java.vm.specification.version = 1.0 java.home = /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home sun.arch.data.model = 32 user.language = de java.specification.vendor = Sun Microsystems Inc. awt.toolkit = apple.awt.CToolkit java.vm.info = mixed mode java.version = 1.6.0_20 java.ext.dirs = /Library/Java/Extensions:/System/Library/Java/Extensions:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/ext sun.boot.class.path = /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/jsfd.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/ui.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/laf.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/sunrsasign.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/jsse.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/charsets.jar java.vendor = Apple Inc. file.separator = / java.vendor.url.bug = http://bugreport.apple.com/ sun.io.unicode.encoding = UnicodeLittle sun.cpu.endian = little mrj.version = 1060.1.6.0_20-279 socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16 ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16 sun.awt.exception.handler = apple.awt.CToolkit$EventQueueExceptionHandler sun.cpu.isalist = VM Flags:
- 6201 views