1. Einführung
1. EinführungDieser Abschnitt gibt...
- einen allgemeinen Überblick über Java.
- stellt die wichtigsten Programme des JDK vor
- erklärt das Konzept von Variablen und Zuweisungen.
- 20384 views
1.1 Buchreferenzen
1.1 Buchreferenzen
|
Kostenlose E-Books
- Gallileo Computing <openbook>
- Java 7 - Mehr als eine Insel
- Java ist auch eine Insel
- 9038 views
1.2 Algorithmen
1.2 Algorithmen
Im Diagramm links wird das typische Vorgehensmodell gezeigt welches von einer Problemstellung zur einer ausführbaren Anwendung führt.
Üblicherweise treten in jeder Phase Fehler auf, die ein Zurückgehen und Verbessern der Ergebnisse einer früheren Phase erfordern. |
Algorithmus
- Vorgehensbeschreibung, Handlungsanweisung
- Alltagsbeispiele: Kochrezept, Bastelanleitung, Partitur
- Mathematische Beispiele:
- Euklids ggT-Bestimmung, geometrische Konstruktionen
- Name abgeleitet von Muhammed al-Chwarizmis Buch „Über das Rechnen mit indischen Ziffern“ (um 825)
- Erster Computeralgorithmus: 1843 von Ada Lovelace für Charles Babbages Analytical Engine (Maschine wurde nicht vollendet)
Anforderungen an einen gültigen Algorithmus
- Er verlangt gültige Eingaben und liefert definierte Ausgaben, durch die seine Korrektheit überprüft werden kann
- Er umfasst endlich viele Einzelschritte und besteht aus hinreichend elementaren Anweisungen
- Er ist in realistischer Zeit ausführbar
- Er terminiert garantiert: d.h. ist nach endlich vielen Schritten fertig abgearbeitet, liefert ein Ergebnis und „hält an“
Algorithmus |
---|
|
- 7814 views
Beispiel
BeispielDas Problem des Findens einer Kubikwurzel ist ein Beispiel für das Entwickeln einer Lösungsidee und der Entwicklung eines Algorithmus.
Die Anwendung ist relativ klein und wahrscheinlich in der oberen linke Ecke des Bildschirms zu finden:
Herunterladen der jar Datei mit Demoprogramm. Starten:
Quellcode der Anwendung auf Github. |
ProblemBestimmen von Kubikwurzeln deren Ergebnis eine ganze Zahl zwischen Null und Hundert ist. Das Demoprogramm links erlaubt Ihnen Ihre Fähigkeiten zu testen. |
- 5219 views
Lösungsidee
LösungsideeLösungsidee 1: "Educated Guess"
Man kennt ja so einige Kubikwurzeln...
- Kubikwurzel von 1 : 1
- Kubikwurzel von 8 : 2
- Kubikwurzel von 27 : 3
- Kubikwurzel von 64 : 4
- Kubikwurzel von 125 : 5
- Kubikwurzel von 1000: 10
Lösungsidee 2: Taschenrechner mit Möglichkeit zur dritten Wurzel ziehen benutzen
Zum Kopfrechnen wenig geeignet...
Lösungsidee 3: Taschenrechner mit Potenzfunktion nutzen
Kubikwurzel x = x1/3
Zum Kopfrechnen auch weniger geeignet
Lösungsidee 4: Primzahlzerlegung!
8 = 2 * 2 * 2. Die Kubikwurzel von 8 ist 2!
Was tun bei größeren Zahlen?
Beispiel: 216 = 2 * 2 * 2 * 3 * 3 * 3
Lösung: 6 = 2 * 3
Vorgehen
Merke Dir jeden Primfaktor der dreimal vorkommt. Die Lösung ist das Produkt der Primfaktoren die 3 mal vorkommen.
Dieses Verfahren ist prinzipiell im Kopf zu meistern. Divisionen durch kleine Zahlen sind nicht so schwer.
- 4723 views
Algorithmus
AlgorithmusVorbedingung
Die vorgebene Zahl k soll eine Kubikwurzel aus den natürlichen Zahlen kleiner, gleich 100 besitzen
Der Algorithmus
Verbale Beschreibung | UML Diagramm |
---|---|
|
Wir gehen davon aus, dass Merken, Dividieren, Multiplizieren elementare Anweisungen sind die nicht weiter verfeinert werden müssen.
Der Algorithmus wird immer terminieren, da die Division durch den letzten Primfaktor eins ergeben wird.
Das Teilproblem Primfaktor von k bestimmen ist aber kein elementares Problem. Zur Lösung dieses Teilproblems wird eine neue Lösungsidee und ein neuer Algorithmus benötigt.
Teilalgorithmus Primfaktor einer Zahl k
Verbale Beschreibung | UML Diagramm |
---|---|
Wie kann man diesen Algorithmus schneller machen?
|
- 4047 views
Implementierung in Java
Implementierung in JavaImplementierung in Java
/** * Berechnet die Kubikwurzel einer positiven Zahl * * @param k Zahl von der die Kubikwurzel berechnet werden soll. * @return Ergebnis die Kubikwurzel */ public static int kubikwurzelVon(int k) { int ergebnis=1; do { int f = primfaktor(k); ergebnis = ergebnis*f; k = k / (f*f*f); } while (k>1); return ergebnis; } /** * Diese Methode berechnet einen Primfaktor des Werts k * Es wird 1 zurückgegeben wenn es keine anderen Primfaktoren * gibt * @param k Die Zahl von der ein Primfaktor berechnet wird * @return f ein Primfaktor der Zahl oder 1 falls keiner existiert */ public static int primfaktor(int k) { int f = 1; do { f++; } while ((k/f*f!=k)&&(f<k)); if (f==k) f=1; return f; }
Der Algorithmus zum Bestimmen eines Primfaktors ist sehr naiv...
- 4411 views
1.3 Grundlegende Konzepte
1.3 Grundlegende KonzepteIm Javaumfeld muss man zwei grundlegende Konzepte unterscheiden:
- Die Programmiersprache Java: Mit ihr werden die zu programmierenden Algorithmen beschrieben
- Das Laufzeitsystem Java zu dem man auch die Entwicklungswerkzeuge (JDK) zählt.
- Mit Hilfe der Entwicklungswerkzeuge werden die (menschlich) lesbaren Java-Quellcodeprogramme in ein maschinenlesbares Format übersetzt und auf diverse Fehler geprüft
- Das Laufzeitsystem kann dann diese übersetzten Programme ausführen.
- 5170 views
1.3.1 Grundkonzepte von Programmiersprachen
1.3.1 Grundkonzepte von ProgrammiersprachenProgrammiersprachen sind eine Ebene über den Maschinensprachen angesiedelt. Sie sind ein Mittel der Abstraktion und Strukturierung.
Die wichtigsten Komponenten einer Programmiersprache (Neuendorf S.40) sind:
- Datentypen: (primitive und strukturierte)
- Modellierung verschiedener Wertebereiche (Größen); Sicherheit durch Typprüfung
- Variablen und Konstanten
- Verwendung von Namen anstelle von Speicheradressen für Behälter die Daten verwalten
- Ausdrücke
- Verknüpfung von Variablen und Konstanten zu Termen die Werte berechnen
- Zuweisungen
- Speicherung von Ausdruckswerten in Variablen
- Ablaufsteuerungsanweisungen: Verzweigungen und Schleifen
- Manipulation des Programmverlaufs. Sie erlauben die Steuerung des Kontrollflusses
- Unterprogramme: Prozeduren, Funktionen, Methoden
- Kapselung von Programmteilen zur Wiederverwendung und übersichtlichen Strukturierung
Die oben aufgeführten Komponenten sind in allen gängigen Programmiersprachen zu finden.
In Java werden diese Komponenten zu Klassen zusammengeführt:
- Sie sind die Zusammenfassung von Daten und Methoden in eigenständigen gekapselten Einheiten
Der Zusammenhang zwischen diesen Komponenten wird im folgenden UML Diagramm vereinfacht gezeigt:
- 6070 views
Tippfehler?
Hallo!
Ich denke Sie haben einen kleinen Tippfehler bei den Komponenten gemacht. Es steht dort Unterprogrogramme anstelle von Unterprogramme. Da ich mir nicht sicher war, ob die nun wirklich so heißen, wollte ich nur einmal nachfragen, ob das so stimmt.
MFG
- Log in to post comments
1.3.2 Klassen und Objekte
1.3.2 Klassen und ObjekteBevor man ein System in einer Programmiersprache implementiert, verwendet man objektorientierte Techniken um mit dem Kunden den Problembereich (Anwendungsbereich) im Rahmen einer Systemanalyse zu modellieren.
Anschließend werden die modellierten Objekte und ihre Datentypen in eine Programmiersprache abgebildet.
Im Rahmen des Kurses werden Diagramme in UML (Unified Modeling Language) zur Beschreibung von Javaklassen verwendet. In Java sowohl als UML werden die folgenden Begriffe verwendet:
- Klasse: Ein Typ eines Gegenstandes in der realen Welt. Mit Klassen werden nicht nur Typen der realen Welt beschrieben sondern auch abstrakte Konzepte wie zum Beispiel ein Vertrag
- Attribute: Datenfelder einer Klasse. Sie haben einen Namen zur Unterscheidung und einen Typ
- Methoden: Programme die auf alle Instanzen einer Klasse angewendet werden können.
- Methoden können keinen, einen oder mehrere Eingabewerte haben
- Methoden können keinen oder einen Rückgabewert haben
- Methoden können die Datenfelder der Objekte verändern
- Objekte:
- Ausprägungen von Klassen
- Entitäten mit gemeinsamen Eigenschaften
- Instanzen von Klassen
Objekte haben einen Lebenszyklus. Sie können erzeugt, modifiziert und dereferenziert werden. Dereferenzierte Objekte in Java sind nicht mehr erreichbar und daher nutzlos. Sie sind defacto gelöscht.
Modellierung in UML
Im Folgenden ist eine Klasse Flugzeug in UML und zwei Objekte der Klasse a380 und jumbo modelliert.
Implementierung in Java
Die Modellierung der Klasse Flugzeug in Java ist nachfolgend dargestellt.
Die Erzeugung der beiden Objekte a380 und jumbo erfolgt in der Methode main(). Hierzu muss ein Javaprogramm ausgeführt werden.
Die Methode main() wird als Javaprogramm durch das Kommando java Flugzeug aufgerufen.
public class Flugzeug { String kennzeichen; // Ein Attribut vom Typ einer Zeichenkette int leerGewicht; // Ein Attribut vom Type einer Ganzzahl /** * Eine Methode zum Drucken der Attributbelegung des Objekts * Die Methode erfordert keine Eingaben. Sie erzeugt keine * Aufgaben */ public void drucken() { System.out.println("Kennzeichen " + kennzeichen + " " + leerGewicht + "kg"); } /** * Die Methode main() wird zum Starten des Programms benutzt * @param args Übergabe von Konsolenparameter. Hier nicht genutzt */ public static void main(String[] args) { // Erzeugen zweier Objekte Flugzeug jumbo = new Flugzeug(); Flugzeug a380 = new Flugzeug(); // Belegen der Attribute des ersten Objekts mit Werten jumbo.kennzeichen = "D-ABYT"; jumbo.leerGewicht = 191000; // Belegen der Attribute des zweiten Objekts mit Werten a380.kennzeichen = "D-AIMD"; a380.leerGewicht = 286000; // Drucken der beiden Objekte auf der Konsole jumbo.drucken(); a380.drucken(); } }
Das obige, ausführbare Programm hat die folgende Grundstruktur die in allen Javaklassen zufinden ist.
Javaklassen können noch mehr Bestandteile haben. Für die Einführung sind die folgenden Bestandteile die wichtigsten:
- Eine Javaklasse sollte in einer Datei mit dem gleichen Namen und der Extension .java gespeichert werden
- Das Schlüsselwort class steht unmittelbar vor dem gewählten Namen der Klasse
- Vor dem Schlüsselwort class können noch weitere Schlüsselworte stehen, die z.Bsp. die Sichbarkeit der Klasse bestimmen
- Nach dem Klassennamen können noch Oberklassen oder Implementierungen angegeben werden
- Die Implementierung der Klasse steht zwischen dem folgenden geschweiften Klammerpaar
- Attribute einer Klasse haben einen Typ und einen Namen. Sie werden immer mit einem Semikolon beendet.
- Methoden einer Klasse besitzen
- optionale Schlüsselworte um die Methodeneigenschaften zu spezifizieren
- Rückgabetypen: Der Typ des Ergebnis der Berechnung
- einen Namen
- eine Parameterliste die mit runden Klammern beschrieben wird. Sie kann leer sein.
- Einen Rumpf mit der Implementierung der Methode. Der Rumpf wird mit geschweiften Klammern implementiert. Die Implementierung des Rumpfs steht zwischen den geschweiften Klammern
- 6313 views
1.4 Java Abgrenzung, Begriffsbestimmung
1.4 Java Abgrenzung, BegriffsbestimmungJava ist:
- eine der vier großen Sundainseln der Republik Indonesien
- im amerikanischen benutztes Synonym für: (guten) Kaffee
- alles was ein Softwareentwickler braucht ist ausreichend Kaffee
- eine Programmiersprache und das damit verbundene Laufzeitsystem
Java in der Softwareentwicklung
- Markenzeichen (Trademark) der Firma Oracle (ehemals Sun Microsystems)
- nur von Oracle zertifizierte und/oder lizensierte Produkte dürfen das Warenzeichen führen
- Programmiersprache
- C/C++ ähnliche Syntax
- 1995 veröffentlicht
- konservative Weiterentwicklung der Sprache um Fragmentierung zu vermeiden
- standardisierter Bytecode
- wird aus Javaquellcode generiert
- plattform- und betriebssystemunabhängig
- Virtuelle Maschine (VM: Laufzeitumgebung)
- führt (neutralen) Bytecode aus
- verfügbar von unterschiedlichen Anbietern für viele Betriebsysteme
- Laufzeitbibliotheken (Java API)
- standardisiert
- optionale, sowie verpflichtende Komponenten
- reichhaltiger Funktionsvorrat der alle wesentlichen Funktionen eines Betriebssystem portabel für die Anwendung zur Verfügung stellt
- Graphik
- Netzwerkommunikation
- Mathematik
- Verschlüsselung
- Dateizugriff
- Datenbankzugriff
- etc.
- standardisiert
- Java "Editionen" (Editions)
- Funktionalitätsbündel für unterschiedliche Anwendungszwecke
- gleiche Sprache, unterschiedliche VM, unterschiedlicher Bibliotheksumfang
- z.Zt. existierende Editionen
- SE: Standard Edition (Gegenstand des Kurses!)
- Desktopanwendungen, fundament für Serveranwendungen, zunehmend auch Smartphones
- EE: "Enterprise Edition"
- Middleware für Java-Applikationsserver
- Fokus: Mehrbenutzeranwendungen, Webfrontends, komplexe betriebswirtschaftliche Anwendungen
- ME: "Micro Edition"
- Mobile Endgeräte: Mobiltelefone, PDAs, Smartphone
- Fokus: Animation auf Mobiltelefonen, Nutzung der Mobiltelefoninfrastruktur
- unterschideliche "Profile und Konfigurationen" für unterschiedliche Geräteklassen
- wird nicht mehr wirklich verwendet...
- JavaCard
- Javalaufzeitumgebung für intelligente EC und Kreditkarten mit Chip
- weitere Varianten
- JavaFX : Laufzeitumgebung für multimediale Benutzeroberflächen
- Ist Seit Java 7.0 update 6 Teil der Javalaufzeitumgebung von Oracle
- Randbemerkung: JavaScript: Netscape führte im Frühjahr 1996 die Browserscriptsprache JavaScript ein. Netscape war zum damaligen Zeitpunkt ein sehr früher Kooperationspartner von Sun Microsystems, der als einer der ersten Partner eine Portierung von Java im Browser auslieferte. Sun Microsystems gewährte Netscape zum damaligen Zeitpunkt das Recht das Markenzeichen "Javascript" zu verwenden. Die Marke gehört noch heute Oracle (als Nachfolger von Sun Microsystems)
- Interessant: JavaScript hat technologisch gesehen nichts mit der Programmiersprache Java gemein.
- JavaFX : Laufzeitumgebung für multimediale Benutzeroberflächen
- SE: Standard Edition (Gegenstand des Kurses!)
- 6215 views
1.4.1 Java Standard Edition (SE)
1.4.1 Java Standard Edition (SE)Standalone Java-Programme
Java-Programme können lokal wie ein gewöhnliches Programm ausgeführt werden.
Java-Applikationsserver die selbst keine direkte Benutzeroberfläche haben und im Hintergrund laufen sind technisch gesehen Programme der Java Standardedition.
Java-Programme die selbst eine graphische Benutzerschnittstelle mit Hilfe der Java Swing/AWT Bibliotheken exponieren nennt man auch "Fat" oder "Rich Clients".
Das Starten eines Javaprogramms geschieht mit dem Kommando java welches die Javalaufzeitumgebung startet:
$ java HelloWorld Hello World!
Softwarepakte der Java Standard Edition
Hier wird der Stand der Entwicklung basierend auf Java 7 update 25 dokumentiert.
JRE: Java Runtime Environment
Dieses Softwarebündel enthält alle Komponenten die man zum Ausführen von Javaprogrammen benötigt. Seit Java 7u21 kann man sie in zwei Varianten installieren
JRE (für Desktops): Download
- Javalaufzeitumgebung
- Plugins und Bibliotheken für Browsereinbettung
- Sicherheitskonsole
- Kommentar: Dieses Javapaket sollten Sie installiert haben um die Applets des Kurses auf dieser Webseite zusehen
JRE for Server: Download
- Javalaufzeitumgebung
- Zusatzprogramme zum Monitoren von Serveranwendungen
- das Paket enthält keine Browserplugins
- Kommentar: Dieses Paket wird nicht für den Kurs benötigt
JDK: Java Development Kit (Download)
Dieses Softwarepaket wird für den Kurs verwendet. Es enhält
- Javalaufzeitumgebung
- Übersetzer
- Analyse- und Testprogrogramme
- Programme zum Erstellen von Javadokumentation
Hinweis: Sie müssen für den Kurs JRE und JDK installieren. Die Softwarepakete werden an unterschiedlichen Stellen installiert.
- 6185 views
1.4.1. JRE
JRE steht doch für Java Runtime Environment, statt für Java Runtime Edition, oder?
In Wikipedia z.B. steht auch, dass es Environment heißt.
lG
- Log in to post comments
1.4.2 Java Enterprise Edition
1.4.2 Java Enterprise EditionDie Java Enterprise Edition (JEE) ist eine Applikationservertechnologie die auf der Java Standard Edition aufbaut.
JEE Applikaktionsserver betreiben in der Regel Mehrbenutzeranwendungen die Webseiten für die Benutzer generieren. Die Enterprise Edition wird typischerweise in zwei Varianten eingesetzt.
- Webcontainer: Um die Klasse Servlet entwickelte Technologien zum Erzeugen von html Seiten
- EJB Container (Enterprise Java Beans): Ein auf EJB Klassen basierendes Framework um Anwendungslogik zu implementieren die unabhängig vom Benutzer ist (z. Bsp. Datenbank, Persistenz, Messaging, Sperren etc.)
Hinweis: Java EE ist nicht Gegenstand dieses Kurses.
- 4894 views
1.5 Java Historie
1.5 Java HistorieFreigabe | Neue Eigenschaften | ||
---|---|---|---|
JDK Beta | 1995 | AWT | |
JDK 1.0 | Jan. 1996 | ||
JDK 1.1 | Feb. 1997 | Innere Klassen | |
J2SE 1.2 | Dec. 1998 | JFC (Swing), Collections | |
J2SE 1.3 | May. 2000 | ||
J2SE 1.4 | Feb. 2002 | 64 Bit Unterstützung, Assertions | |
J2SE 5.0 | Sept. 2004 | Generics, Concurrency, Autoboxing, Enumerations | Anforderungen des Kurrikulums der DHBW... |
Java SE 6 | Dez. 2006 | updates Concurrency | |
Java SE 7 | Jul. 2011 | updates Concurrency, Unterstützung für dynamische Sprachen | |
Java SE 8 | März 2014 | Long Term Support | |
Java SE 9 | Sept. 2017 | Modularisierung (Project Jigsaw) | |
Java SE 10 | März 2018 | ||
Java SE 11 | Sept. 2018 | Long Term Support | |
Java SE 12 | März 2019 | ||
Java SE 13 | Sept. 2019 | Switch Expressions (Preview) | |
Java SE 14 | März 2020 | Switch Expressions (Standard) | |
Java SE 15 | Sept. 2020 | ||
Java SE 16 | März 2021 | ||
Java SE 17 | planned Sept. 2021 | planned: Long Term Support |
Referenz: Wikipedia
Bei den neuen Eigenschaften werden nur Eigenschaften genannt, die einen Bezug zur Vorlesung haben!
- 408 views
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
- 5524 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.
- 4966 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
1.7 Variablen und Zuweisungen
1.7 Variablen und ZuweisungenZur Verwaltung der Objekte(Daten) in einem Programm dienen Datenbehälter die Variable oder Konstante genannt werden.
Datenbehälter | Bedeutung | Beispiel |
---|---|---|
Konstante |
Ein Datenbehälter dem über die gesamte Lebensdauer eines Programms genau ein Wert zugewiesen wird. Hinweis: In Java ist eine Konstante eine Variable die beim Deklarieren mit dem Schlüsselwort final versehen wurde. Eine Konstante ist in Java eine Variable die nur einmal mit einem Wert belegt werden kann. |
pi = 3.14; |
Variable | Datenbehälter der mit einem bestimmten Wert initialisiert wird: Ihm können im Laufe der Programmausführung unterschiedliche Werte zugewiesen werden |
x = 0; x = 1; x = x +1; |
Variablen müssen in Java immer deklariert sein bevor man sie benutzen kann. Dies erfolgt mit einer Deklaration in der folgenden Syntax:
Typ der Variablen: bestimmt den Wertebereich und Operationen auf einer Variablen. Er ist fest für die Lebensdauer einer Variablen.
Variablennamen: Ein beliebiger Bezeichner zum Benennen der Variable. Der Variablenname muß innerhalb eines gegebenen Kontexts eindeutig sein. Man kann einen Namen nicht zweimal in einem bestimmten Kontext verwenden.
Beispiele:
int x; float y,z;
Variablen erhalten mit Zuweisungen eine neue Belegung. Hierfür können Konstanten, Variablen oder Audrücke benutzt werden deren Ergebnis auf eine Variable zugewiesen wird.
Die Syntax einer Zuweisung ist in Java immer:
|
Beispiele:
int x = 1; float y = 3.2* 4.1;
Die Bedeutung in Java ist:
Zuweisungsoperator Java ( Variable = Ausdruck;) |
---|
Nimm das Ergebnis der Berechnung der rechten Seite des Operators und weise der Variablen auf der linken Seite das Ergebnis zu. |
Java führt immer zuerst die Berechnung des Ausdrucks auf der rechten Seite aus. Erst dann weist Java das Ergebnis der Variablen zu.
Der Ausdruck selbst muss nicht unbedingt eine komplexe Berechnung sein. Er kann auch eine Variable oder Konstante sein.
Tipps zum Verstehen einer Zuweisung
- Identifizieren sie die 4 Bestandteile einer Zuweisung
- Zuweisungsoperator =
- Semikolon
- Variable (links vom Zuweisungsoperator)
- Term (rechts vom Zuweisungsoperator, links vom Semikolon
- Lesen Sie eine eine Zuweisung immer von rechts nach links. Zuerst wird der Term auf der rechten Seite berechnet. Dann wird das Ergebnis der linken Seite zugewiesen
Ein Beispiel sei ein einfaches Programm welches die Eingaben in den Variablen x und y nutzt um durch fortgesetzte Addition zu Multiplizieren.
Prozessorschritte | x | y | z |
---|---|---|---|
Initialisierung x=2; y=3; z=0; x = x -1; z = z + y; x = x - 1; z = z + y; |
2 1 1 0 |
3 3 3 3 |
0 0 3 6 |
Ergebnis in z | 0 | 3 | 6 |
Beispiele
Zuweisung einer Konstanten auf eine Variable. Um genau zu sein: Es wird ein Literal zugewiesen.
pi = 3.14;
Zuweisung einer Variablen auf eine andere Variable:
d = pi;
Zuweisung eines mathematischen Ausdrucks(Term) auf eine Variable. Der Term wird vor der Zuweisung berechnet.
d = 2*pi*r;
Zuweisung eines Terms der die Variable selbst enthält. Der Term wird vor der Zuweisung mit dem alten Wert der Variablen berechnet. Erst nach der Berechnung wird der neue Wert zugewiesen.
d = 2* d;
- 7271 views
1.8 Übungen
1.8 Übungen
1.7.1 Das erste Java Programm
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } |
- Übersetzen Sie die Datei HelloWorld.java mit Hilfe des Kommandos javac in eine Bytecode-Datei mit dem Namen HelloWorld.class.
- Führen Sie das Programm mit dem Kommando java aus.
1.7.2 Eine einfache grafische Oberfläche
|
1.7.3 Swing Rechner
Diese Übung ist eine Gruppenübung. Sie ist wahrscheinlich zu schwer für das Selbststudium.
1. Quellcode erzeugen
Erzeugen Sie eine Datei mit dem Namen SwingRechner.java und dem folgendem Inhalt:
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; public class SwingRechner extends javax.swing.JFrame { private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JPanel jPanel1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextFieldOut; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private void initComponents() { jTextField1 = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); jTextFieldOut = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Swing Rechner"); jTextField1.setText("0"); jTextField1.setColumns(6); jTextField2.setText("0"); jTextField2.setColumns(6); jTextFieldOut.setText("0"); jTextFieldOut.setEditable(false); jButton1.setText("XXXX"); jButton2.setText("YYYY"); jButton3.setText("ZZZZ"); JPanel radioPanel = new JPanel(new GridLayout(1, 0)); radioPanel.add(jButton1); radioPanel.add(jButton2); radioPanel.add(jButton3); jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton1) jTextFieldOut.setText( executeOperation1(jTextField1.getText(), jTextField2.getText())); } } ); jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton2) jTextFieldOut.setText( executeOperation2(jTextField1.getText(), jTextField2.getText())); } } ); jButton3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton3) jTextFieldOut.setText( executeOperation3(jTextField1.getText(), jTextField2.getText())); } } ); this.setBounds(300, 300, 200, 30); setMinimumSize(new Dimension(200,30)); getContentPane().add(jTextField1, BorderLayout.WEST); getContentPane().add(jTextField2, BorderLayout.EAST); getContentPane().add(radioPanel, BorderLayout.NORTH); getContentPane().add(jTextFieldOut, BorderLayout.SOUTH); pack(); } public SwingRechner() { initComponents(); } public static void main(String[] args) { SwingRechner f1 = new SwingRechner(); f1.setVisible(true); } public String executeOperation1(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); // Add Application logic here: int resultInt = 0; return (Integer.toString(resultInt)) ; } public String executeOperation2(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); // Add Application logic here: int resultInt = 1; return (Integer.toString(resultInt)) ; } public String executeOperation3(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); int resultInt = 2; return (Integer.toString(resultInt)) ; } }
2. Erzeugen Sie die Javabytecodedatei SwingRechner.class
javac SwingRechner.java
3. Führen sie das Programm aus
java SwingRechner
Das erscheinende Programmfenster sollte so aussehen
Programmvorlage | Gelöste Aufgabe |
---|---|
4. Programmanpassung
Passen Sie das Programm an um einen Rechner für drei Grundrechenarten zu erhalten. Ersetzen sie in SwingRechner.java die folgenden Texte
- XXXX durch ein Symbol einer Rechenart
- YYYY durch eine Symbol einer Rechenart
- ZZZZ durch ein Symbol einer Rechenart
Implementieren Sie die drei entsprechenden Grundrechenarten in den Methoden executeOperation1(), executeOperation2(), executeOperation3().
Ändern Sie hierfür die drei Zuweisungen sinngemäss und ersetzen sie die Zuweisungen von 0, 1, 2 durch den passenden mathematischen Term mit op1 und op2.
... int resultInt = 0; ... int resultInt = 1; ... int resultInt = 2; ...
Das Programm soll anschliesend die Operationen passend zu den Buttonbeschriftungen ausführen
5. Speichern, Übersetzen und Ausführen des Programms
1.7.4 Übersetzen und Ausführen eines Programms mit Konsoleneingaben
Erzeugen Sie eine Datei mit dem entsprechenden Namen. Setzen Sie den unten aufgeführten Quellcode ein. Übersetzen Sie ihn. Führen Sie ihn aus.
import java.util.Scanner; public class GGT { public static void main(String[] args) { Scanner eingabe = new Scanner(System.in); System.out.print("Geben Sie die erste Zahl ein: "); int zahl1 = eingabe.nextInt(); System.out.print("Geben Sie die zweite Zahl ein: "); int zahl2 = eingabe.nextInt(); int ergebnis = ggT(zahl1, zahl2); System.out.println("Ergebnis: " + ergebnis); } /** * Euklidscher Algorithmus als Java-Methode */ public static int ggT(int x, int y) { while (x != y) { System.out.println("Zwischenbelegung, x= " + x + ", y=" + y); if (x > y) { x = x - y; } else { y = y - x; } } return x; } }
1.7.8 Airline in Block 1
Warnung: Alle verwendeten Namen in Java sind sensitiv auf Klein- und Großschreibung! Dies bedeutet, dass für Java ein Name der wie in der deutschen Sprache mit einem Großbuchstaben beginnt, etwas anderes ist als ein Name mit der mit einem Kleinbuchstaben beginnt.
Legen Sie ein Projekt "javakurs1" für die erste Vorlesung an.
Benutzen Sie in Netbeans den Menüpunkt File->New Project
Sie erhalten dann einen modalen Dialog. Wählen Sie "Java Application" dann den Button "next".
Der Name des Projekts ist prinzipiell frei wählbar und hat keinen weiteren Einfluß für die Vorlesung (Sie müssen dieses Projekt nur wieder finden und sie sollten hier keine Klassen benutzen die noch in der Vorlesung kommen werden).
- Tragen Sie nur im ersten Feld "Project Name" den Wert "javakurs1" ein.
- Entfernen Sie in der Checkbox "Create Main Class" den Haken.
- Clicken Sie auf "Finish"
Empfehlung: Ändern Sie in diesem keines der anderen Felder und einen wirklich guten Grund
2. Anlegen eines Pakets "Airline"
Pakete dienen zum Trennen und Gruppieren von Klassen in Java.
Bewegen Sie die Maus über das Projektsymbol (Kaffeetasse) mit dem Namen "javakurs1" und lassen Sie sich mit einem rechte Mausklick mit Halten das folgende Auswahlmenü anzeigen.
Wählen Sie hier "New"->"Java Package" aus:
Es erscheint der folgende modale Dialog:
Tragen Sie bei "Package Name" den Wert "Airline" ein un beenden Sie den Dialog mit dem "Finish" Button.
3. Erzeugen eines Unterpakets "Block1" im Paket "Airline"
In jeder Vorlesungsstunde(Block) wird in der Regel ein neues Paket verwenden.
Diese Aufgabe müssen Sie in jeder Vorlesungsstunde sinngemäß wiederholen.
In der linken Spalte kann man das Projekt "javakurs1" sehen. Diese Projekt hat eine Unterkategorie "Source packages". Hier sollte es jetzt einen Eintrag für ein Paket mit dem Namen "Airline" geben.
Man kann Unterpakte erzeugen, in dem man die Maus auf das Symbol von "Airline" bewegt. Führen Sie auf diesem Symbol einen Rechtsklick aus und halten Sie ihn.
Wählen Sie hier, wie zuvor "New"->"Java Package" aus
Es erscheint ein modaler Dialog. Tragen Sie hier im Feld "Package Name" den Wert "Airline.Block1" ein.
Beenden Sie den Dialog mit "Finish"
Wichtig: Hier wird einer Unterpaket zum Paket Airline angelegt. Der Punkt zwischen "Airline" und "Block1" trennt die beiden Namen. Er ist notwendig. Hier darf kein anderes Zeichen (z.Bsp. Leerzeichen stehen).
4. Anlegen der Klasse Flugzeug im Paket Airline.Block1
Gehen Sie link im Editor mit der Maus zum Paket "Airline.Block". Führen Sie einen Rechstklick aus und halten Sie ihn.
Es erscheint ein modaler Dialog.
Tragen Sie im Feld "Class Name" Flugzeug ein.
Ändern Sie die anderen Felder nicht.
Beenden Sie den Dialog mit dem Button "Finish"
Sie haben jetzt eine leer Klasse Flugzeug im Paket Airline.Block1 angelegt.
Diese Klassen können Sie nun editieren. Der Editor sieht wie folgt aus:
5. Erweitern der Klasse Flugzeug
Geben Sie Flugzeugen die Eigenschaft ein Kennzeichen zu haben. Kennzeichen sollen beliebige Zeichenketten sein. Zeichenketten sind in Java Klassen mit dem Namen String.
public class Flugzeug { String kennzeichen; }
Sichern Sie diese Datei. Sie finden schon raus wie das geht :-)
Wenn die Syntax der Klasse korrekt ist, werden am rechten Rand keine roten Symbole erscheinen.
Hinweis: Sie können Javacode der Vorlesung mit Copy-und-Paste direkt in Eclipse oder Netbeans einfügen. Unter Windows kommt es vor, dass die Zeilenumbrüche von html verloren gehen. Nutzen Sie in diesem Fall die Windows Anwendungen Notepad oder Wordpad als "Zwischenlandeplatz".
6. Anlegen der Klasse Flughafen
Nutzen Sie Ihre neuen Kenntnisse und Erzeugen Sie eine Klasse Flughafen im Paket Airline.Block1.
7. Erweitern der Klasse Flughafen
Flughäfen sollen die folgenden Eigenschaften haben
- einen Namen name der mit Zeichenketten verwaltet wird
- Sechs Flugsteige gate1 bis gate6 an denen Flugzeuge andocken können
- ein Treibstofflage treibstofflager in dem mit einer großen Fließkommazahl (double) der gelagerte Treibstoff verwaltet
Dies geschieht wenn Sie die Klasse Flugzeug mit dem fett gedruckten Text erweitern:
public class Flughafen { String name; Flugzeug gate1; Flugzeug gate2; Flugzeug gate3; Flugzeug gate4; Flugzeug gate5; Flugzeug gate6; double treibstoffLager; }
Es sollten nach Ihren Anpasssungen, links kein Fehler aufleuchten!
8. Schreiben eines Hauptprogramms in der Klasse Flughafen
Fügen Sie eine leer Methode mit dem Namen main() ein. Die Syntax muss exakt so aussehen wie im fett gedruckten Text
public class Flughafen { String name; Flugzeug gate1; Flugzeug gate2; Flugzeug gate3; Flugzeug gate4; Flugzeug gate5; Flugzeug gate6; double treibstoffLager; public static void main(String[] args) { } }
Nach dem Sichern der Datei Flughafen hat sich die Ikone in der linken Spalte verändert. Sie enthält jetzt eine grünes Dreieck.
Das grüne Dreick hat die Bedeutung der bekannten Starttaste. Diese Klasse kann man als Hauptprogramm ausführen! |
Diese Klasse können Sie ausführen indem Sie die Maus über das Symbol der Klasse bewegen |
Unten auf dem Bildschirm taucht eine Konsole auf. Es werden zunächst alle geänderten Klassen übersetzt und dann die gewünschte Klasse gestartet. Da die main() Methode der Klasse Flugzeug aber nichts macht, gibt es auch eine Ausgaben. |
Fügen Sie den folgenden Code innerhalb der geschweiften Klammern ein, die die Methode main() begrenzen.
public static void main(String[] args) { Flughafen pad = new Flughafen(); pad.name="Paderborn"; pad.treibstoffLager = 1000000; System.out.println("*** Unser Flughafen ***"); System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1); System.out.println("Am Gate 2: " + pad.gate2); System.out.println("Am Gate 3: " + pad.gate3); System.out.println("Treibstoff: " + pad.treibstoffLager); System.out.println("***********************"); }
Sichern Sie die Datei und starten Sie die Klasse Flughafen erneut an.
Sie sollten die folgende Konsolenausgabe sehen:
Was ist hier passiert?
Flughafen pad = new Flughafen(); |
Eine Zeigervariable pad vom Typ Flughafen wird angelegt. Es wird ein neues Flughafenobjekt erzeugt und auf die Variable zugewiesen. |
pad.name="Paderborn"; |
Das Objekt pad bekommt seinen Namen "Paderborn" zugewiesen. |
pad.treibstoffLager = 1000000; |
Das Treibstofflager des Objekt pad bekommt den Wert 1000000 zugewiesen. |
System.out.println("*** Unser Flughafen ***"); |
Die Methode System.out.println() druckt Zeichenketten auf der Konsole.
|
System.out.println("Flughafen " + pad.name); |
Drucke den Namen des Objekt pad |
System.out.println("Am Gate 1: " + pad.gate1); |
Drucke die Belegung von gate1 |
System.out.println("Am Gate 2: " + pad.gate2); |
Drucke die Belegung von gate2 |
System.out.println("Am Gate 3: " + pad.gate3); |
Drucke die Belegung von gate3 |
System.out.println("Treibstoff: " + pad.treibstoffLager); |
Drucke die Treibstoffmenge
|
System.out.println("***********************"); |
Drucke Sternchen... |
9. Erzeugen eines Flugzeugs und Anlegen am Gate1
Implementieren Sie die folgenden Befehle am Ende der main() Methode.
- Legen Sie eine Zeigervariable vom Typ Flugzeug mit dem Namen lh1 and und Erzeugen Sie ein Flugzeugobjekt
- Geben Sie dem Flugzeug das Kennzeichen D-ABTL
- "Docken" Sie das Flugzeug am Gate 1 des Flughafens pad an.
- Geben Sie den Namen des Flugzeugs an Gate aus
- Wiederholen Sie all Druckbefehlee des vorhergenden Schritts.
Hierzu muss die folgende Codesequenz in der main() Methode vor der letzten geschwiften Klammer eingefügt werden:
// Boeing 747, https://de.wikipedia.org/wiki/Boeing_747#747-400 Flugzeug lh1 = new Flugzeug(); lh1.kennzeichen ="D-ABTL"; pad.gate1 = lh1; System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1.kennzeichen); System.out.println("*** Unser Flughafen ***"); System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1); System.out.println("Am Gate 2: " + pad.gate2); System.out.println("Am Gate 3: " + pad.gate3); System.out.println("Treibstoff: " + pad.treibstoffLager); System.out.println("***********************");
Sichern Sie die Datei. Übersetzen Sie Datei und führen Sie sie wieder aus.
Die Ausgabe auf der Konsole ist:
*** Unser Flughafen *** Flughafen Paderborn Am Gate 1: null Am Gate 2: null Am Gate 3: null Treibstoff: 1000000.0 *********************** Flughafen Paderborn Am Gate 1: D-ABTL *** Unser Flughafen *** Flughafen Paderborn Am Gate 1: AirlineSolution.Block1.Flugzeug@677327b6 Am Gate 2: null Am Gate 3: null Treibstoff: 1000000.0 ***********************
10. Anlegen eines zweiten Flugzeugs
Fügen Sie in der main() Methode nach dem Anlegen des ersten Flugzeugs die folgenden Befehle ein:
- Legen Sie eine Variable lh2 für ein zweites Flugzeug und erzeugen Sie ein Flugzeugobjekt wie beim ersten Flugzeug
- Das Kennzeichen des Flugzeugs soll D-AIMA sein
- Legen Sie das Flugzeug an Gate 2 des Flughafens pad
Fügen Sie hinter den Befehl der das erste Flugzeug an Gate 1 ausgibt einen gleichartigen Befehl für Gate 2
Die main() Methode sieht jetzt wie folgt aus. Die neuen Befehle sind fett gedruckt:
public static void main(String[] args) { Flughafen pad = new Flughafen(); pad.name="Paderborn"; pad.treibstoffLager = 1000000; System.out.println("*** Unser Flughafen ***"); System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1); System.out.println("Am Gate 2: " + pad.gate2); System.out.println("Am Gate 3: " + pad.gate3); System.out.println("Treibstoff: " + pad.treibstoffLager); System.out.println("***********************"); // Boeing 747, https://de.wikipedia.org/wiki/Boeing_747#747-400 Flugzeug lh1 = new Flugzeug(); lh1.kennzeichen ="D-ABTL"; pad.gate1 = lh1; // Airbus A380 https://de.wikipedia.org/wiki/Airbus_A380#A380-800 Flugzeug lh2 = new Flugzeug(); lh2.kennzeichen = "D-AIMA"; pad.gate2 = lh2; System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1.kennzeichen); System.out.println("Am Gate 2: " + pad.gate2.kennzeichen); System.out.println("*** Unser Flughafen ***"); System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1); System.out.println("Am Gate 2: " + pad.gate2); System.out.println("Am Gate 3: " + pad.gate3); System.out.println("Treibstoff: " + pad.treibstoffLager); System.out.println("***********************"); }
Sichern Sie die Datei, übersetzen Sie sie, führen Sie die main() Methode der Klasse Flughafen aus.
*** Unser Flughafen *** Flughafen Paderborn Am Gate 1: null Am Gate 2: null Am Gate 3: null Treibstoff: 1000000.0 *********************** Flughafen Paderborn Am Gate 1: D-ABTL Am Gate 2: D-AIMA *** Unser Flughafen *** Flughafen Paderborn Am Gate 1: AirlineSolution.Block1.Flugzeug@677327b6 Am Gate 2: AirlineSolution.Block1.Flugzeug@14ae5a5 Am Gate 3: null Treibstoff: 1000000.0 ***********************
- 7355 views
1.9 Lösungen
1.9 Lösungen1.8.3 Swing Rechner
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; public class SwingRechner extends javax.swing.JFrame { private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JPanel jPanel1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextFieldOut; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private void initComponents() { jTextField1 = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); jTextFieldOut = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Swing Rechner"); jTextField1.setText("0"); jTextField1.setColumns(6); jTextField2.setText("0"); jTextField2.setColumns(6); jTextFieldOut.setText("0"); jTextFieldOut.setEditable(false); jButton1.setText("+"); jButton2.setText("-"); jButton3.setText("*"); JPanel radioPanel = new JPanel(new GridLayout(1, 0)); radioPanel.add(jButton1); radioPanel.add(jButton2); radioPanel.add(jButton3); jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton1) jTextFieldOut.setText( executeOperation1(jTextField1.getText(), jTextField2.getText())); } } ); jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton2) jTextFieldOut.setText( executeOperation2(jTextField1.getText(), jTextField2.getText())); } } ); jButton3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton3) jTextFieldOut.setText( executeOperation3(jTextField1.getText(), jTextField2.getText())); } } ); this.setBounds(300, 300, 200, 30); setMinimumSize(new Dimension(200,30)); getContentPane().add(jTextField1, BorderLayout.WEST); getContentPane().add(jTextField2, BorderLayout.EAST); getContentPane().add(radioPanel, BorderLayout.NORTH); getContentPane().add(jTextFieldOut, BorderLayout.SOUTH); pack(); } public SwingRechner() { initComponents(); } public static void main(String[] args) { SwingRechner f1 = new SwingRechner(); f1.setVisible(true); } public String executeOperation1(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); // Add Application logic here: int resultInt = op1+op2; return (Integer.toString(resultInt)) ; } public String executeOperation2(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); // Add Application logic here: int resultInt = op1-op2; return (Integer.toString(resultInt)) ; } public String executeOperation3(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); int resultInt = op1*op2; return (Integer.toString(resultInt)) ; } }
Beispiel
1.7.8 Airline Block1
Klasse Flugzeug
package AirlineSolution.Block1;
/**
*
* @author stsch
*/
public class Flugzeug {
String kennzeichen;
}
Klasse Flughafen
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package AirlineSolution.Block1;
/**
*
* @author stsch
*/
public class Flughafen {
String name;
Flugzeug gate1;
Flugzeug gate2;
Flugzeug gate3;
Flugzeug gate4;
Flugzeug gate5;
Flugzeug gate6;
double treibstoffLager;
public static void main(String[] args) {
Flughafen pad = new Flughafen();
pad.name="Paderborn";
pad.treibstoffLager = 1000000;
System.out.println("*** Unser Flughafen ***");
System.out.println("Flughafen " + pad.name);
System.out.println("Am Gate 1: " + pad.gate1);
System.out.println("Am Gate 2: " + pad.gate2);
System.out.println("Am Gate 3: " + pad.gate3);
System.out.println("Treibstoff: " + pad.treibstoffLager);
System.out.println("***********************");
// Boeing 747, https://de.wikipedia.org/wiki/Boeing_747#747-400
Flugzeug lh1 = new Flugzeug();
lh1.kennzeichen ="D-ABTL";
pad.gate1 = lh1;
// Airbus A380 https://de.wikipedia.org/wiki/Airbus_A380#A380-800
Flugzeug lh2 = new Flugzeug();
lh2.kennzeichen = "D-AIMA";
pad.gate2 = lh2;
System.out.println("*** Unser Flughafen ***");
System.out.println("Flughafen " + pad.name);
System.out.println("Am Gate 1: " + pad.gate1.kennzeichen);
System.out.println("Am Gate 2: " + pad.gate2.kennzeichen);
System.out.println("Am Gate 3: " + pad.gate3);
System.out.println("Treibstoff: " + pad.treibstoffLager);
System.out.println("***********************");
// Hänge Flugzeug um. mover bewegt Flugzeug
// von Gate 1 nach Gate 3
Flugzeug mover = pad.gate1;
pad.gate1=null;
System.out.println("*** Unser Flughafen ***");
System.out.println("Flughafen " + pad.name);
System.out.println("Am Gate 1: " + pad.gate1);
System.out.println("Am Gate 2: " + pad.gate2.kennzeichen);
System.out.println("Am Gate 3: " + pad.gate3);
System.out.println("Treibstoff: " + pad.treibstoffLager);
System.out.println("***********************");
pad.gate3= mover;
mover=null;
System.out.println("*** Unser Flughafen ***");
System.out.println("Flughafen " + pad.name);
System.out.println("Am Gate 1: " + pad.gate1);
System.out.println("Am Gate 2: " + pad.gate2.kennzeichen);
System.out.println("Am Gate 3: " + pad.gate3.kennzeichen);
System.out.println("Treibstoff: " + pad.treibstoffLager);
System.out.println("***********************");
}
}
- 5752 views
1.10 Fragen
1.10 Fragen
1.10.1 Javakommandos des JDK
|
1.10.2 Zuweisungen
- Welche vier Syntaxkomponenten enhält eine Anweisung?
- In welcher Reihenfolge stehen die vier Syntaxkomponenten
- Welche der folgenden Anweisungen sind erlaubt?
a = 4; a = a; a = b 18 = c; c = 18 + a; d = 18 - c; a,b = 18;
1.10.3 Zuweisungsbeispiel
Welche Belegung haben die Variablen x,y und z wenn alle Zuweisungen ausgeführt?
Notieren Sie zur Hilfe alle Zwischenzustände
Prozessorschritte | x | y | z |
---|---|---|---|
x = 2; y = 3; z = 4; |
2
|
3
|
4 |
Endergebnis | ? | ? | ? |
- 4585 views
Aufgabe 1.10.2 18 = c
Es fehlt das Semikolon. In der Lösung ist das Semikolon wieder vorhanden.
- Log in to post comments
Frage zu 1.10.2
Werden hier in der Frage das Wort Zuweisungen und Anweisungen als Synonym verwendet? Denn im Kapitel 1.7 ist nur von Zuweisungen die Rede.
- Log in to post comments
1.11 Antworten
1.11 Antworten1.11.1 Javakommandos des JDK
- Mit welchem Befehl übersetzt man ein Javaquellprogramm in eine Javabinärdatei? javac
- Welche Datei ensteht beim Übersetzen einer Datei mit dem Namen Fahrzeug.java die eine Klasse Fahrzeug enhält? Fahrzeug.class
- Mit welchem Befehl kann man Javabinärdateien ausführen? java
- Eine Datei Test.java enthält eine Klasse Test. Mit welcher Befehlsequenz übersetzen Sie die Javaquelldatei Test.java und führen die Klasse Test dann aus?
- javac Test.java
- java Test
- Nennen Sie mindestens drei Javabefehle die nur das JDK enthält nicht aber das JRE
- javac
- javadoc
- javap
- Welcher Typ von Dateien wird vom Befehl javadoc erzeugt?
- javadoc erzeugt Dokumentationsdateien im html Format. Die Dateiendung ist daher .html
1.11.2 Zuweisungen
- Welche vier Syntaxkomponenten enhält eine Anweisung?
- Variable
- Zuweisungsoperator =
- Term
- Semikolon
- In welcher Reihenfolge stehen die vier Syntaxkomponenten?
- siehe vorherige Antwort
- Welche der folgenden Anweisungen sind erlaubt?
a = 4; // korrekt a = a; // korrekt a = b // falsch. Das Semikolon fehlt 18 = c; // falsch. 18 ist kein gültiger Bezeichner. c = 18; wäre erlaubt (und sinnvoll) c = 18 + a; // korrekt d = 18 - c; // korrekt a,b = 18; // falsch. Man kann nur einer Variablen gleichzeitig einen Wert zuweisen
1.11.3 Zuweisungsbeispiel
Welche Belegung haben die Variablen x,y und z wenn alle Zuweisungen ausgeführt?
Hinweis: Es wurden nur geänderte Werte eingetragen. Ist ein Feld leer, so gilt der früherer Wert weiter oben
Prozessorschritte | x | y | z |
---|---|---|---|
x = 2; y = 3; z = 4; |
2 |
3 |
4 |
x = 5; |
5 |
||
x = 2 * x; |
10 | ||
y= z * x; |
|
40 |
|
z= 18 |
|
18 |
|
Endergebnis | 10 | 40 | 18 |
- 4953 views
1.12 Lernziele
1.12 Lernziele
Am Ende dieses Blocks können Sie:
|
Lernzielkontrolle
Sie sind in der Lage die Fragen zur Einführung zu beantworten.
Feedback
- 5118 views