1. Einführung

1. Einführung

 Dieser Abschnitt gibt...

  • einen allgemeinen Überblick über Java. 
  • stellt die wichtigsten Programme des JDK vor
  • erklärt das Konzept von Variablen und Zuweisungen.
Stefan Schneider Sun, 06/20/2010 - 11:00

1.1 Buchreferenzen

1.1 Buchreferenzen
 

Duke reading a book

  • 
Grundkurs Programmieren in Java
    • D. Ratz, J. Scheffler, D. Seese & J. Wiesenberger 

    • 
ISBN 978-3446440739, 34.90€
    • 7. Auflage, Hanser 2014, URL Amazon
  • Java-Grundkurs für Wirtschaftsinformatiker: Die Grundlagen verstehen - Objektorientierte Programmierung - Fortgeschrittene Konzepte kennenlernen - Betriebswirtschaftlich orientierte Beispiele
    • Klaus-Georg Deck,
    • Herbert Neuendorf
    • ISBN:978-3-8348-1222-3
    • Broschiert, 456 Seiten
    • Zweite Auflage 26. März 2010
    • URL Amazon
  • Java als erste Programmiersprache: Vom Einsteiger zum Profi
    • Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll
    • ISBN: 978-3658121174
    • 1140 Seiten
    • 5.te Auflage 2007 URL Amazon
    • 6.te Auflage 2010 URL Amazon
    • 7.te Auflage 2013 URL Amazon
    • 8.te Auflage 2016 URL Amazon
  • UML 2.5: Das umfassende Handbuch.
    • Christoph Kecher
    • ISBN: 978-3836260183
    • 450 Seiten
    • Fünfte Auflage 2017, URL Amazon
  • Java Klassen API

Kostenlose E-Books

 

Stefan Schneider Sun, 06/20/2010 - 11:24

1.2 Algorithmen

1.2 Algorithmen
Vorgehen vom Problem zur AUsführung

Im Diagramm links wird das typische Vorgehensmodell gezeigt welches von einer Problemstellung zur einer ausführbaren Anwendung führt.

  1. Lösungsidee: Der erste Schritt zur Lösung der in der Vorlesung vorgestellten Probleme basiert auf einer Idee zur Lösung des Problems
  2. Algorithmus: Im nächsten Schritt wird die Lösungsidee zu einem Algorithmus verfeinert und ausgearbeitet
  3. Programm: Ein wesentlicher Teil der Vorlesung wird aus der Umsetzung eines Algorithmus in ein ausführbares Java-Programm bestehen

Ü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“
Definition
Algorithmus
  • Ein Algorithmus ist ein generelles, schrittweises, präzises, allgemeingültiges, endliches Lösungsverfahren für eine bestimmte Aufgabenart.
  • Er beruht auf elementaren Verarbeitungsschritten.
  • Alle Aufgaben einer bestimmten Art sind prinzipiell lösbar.

 

Stefan Schneider Wed, 08/21/2013 - 16:36

Beispiel

Beispiel

Das 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:

Screenshot der Kubikwurzelanwendung

Herunterladen der jar Datei mit Demoprogramm.

Starten:

  • Ihr JRE ist korrekt konfiguriert: Doppelklick auf der Datei Kubikwurzel.jar in Ihrem Download Ordner
  • oder: starten im Kommandozeilenfenster im Download Ordner mit dem Befehl java -jar Kubikwurzel.jar

Quellcode der Anwendung auf Github.

Problem

Bestimmen von Kubikwurzeln deren Ergebnis eine ganze Zahl zwischen Null und Hundert ist.

Das Demoprogramm links erlaubt Ihnen Ihre Fähigkeiten zu testen.

 

 

Stefan Schneider Fri, 08/23/2013 - 09:43

Lösungsidee

Lösungsidee

Lö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.

Stefan Schneider Wed, 08/28/2013 - 13:50

Algorithmus

Algorithmus

Vorbedingung

Die vorgebene Zahl k soll eine Kubikwurzel aus den natürlichen Zahlen kleiner, gleich 100 besitzen

Der Algorithmus

Verbale Beschreibung UML Diagramm
  1. Merke Dir Ergebnis e mit dem Wert 1
  2. Bestimme einen Primfaktor f der Zahl k
  3. Multipliziere e mit f und merke das Ergebnis als e
  4. Teile die Zahl k dreimal durch den Primfaktor f.
  5. Merke dieses Ergebnis als k
  6. Wiederhole Algorithmus ab Schritt 2 wenn k größer als 1 ist.
  7. Die Lösung des Problems ist e
UML Flussdiagramm

 

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
  1. Setze f auf 1
  2. Erhöhe f um 1
  3. Ist k geteilt durch f (Ganzzahldivision) mal f = k ?
    1. Wenn ja: Gib f aus
    2. Wenn nein: Ist f kleiner als k ?
      1. Wenn ja: Springe zurück zum Erhöhen
      2. Wenn nein: Gib 1 aus (kein "echter" Primfaktor gefunden

Wie kann man diesen Algorithmus schneller machen?

 

Flussdiagramm Primfaktor

Stefan Schneider Wed, 08/28/2013 - 14:23

Implementierung in Java

Implementierung in Java

 Implementierung 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...

Stefan Schneider Fri, 09/06/2013 - 09:29

1.3 Grundlegende Konzepte

1.3 Grundlegende Konzepte

 Im 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.
Stefan Schneider Thu, 08/09/2012 - 14:37

1.3.1 Grundkonzepte von Programmiersprachen

1.3.1 Grundkonzepte von Programmiersprachen

 Programmiersprachen 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:

Komponenten von Programmiersprachen

Stefan Schneider Thu, 08/09/2012 - 14:57

Anonymous (not verified)

Sun, 10/13/2019 - 15:14

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

Stefan Schneider

Mon, 10/14/2019 - 08:25

In reply to by Anonymous (not verified)

Wurde verbessert. Danke!

1.3.2 Klassen und Objekte

1.3.2 Klassen und Objekte

Bevor 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.

UML Klassen, Objekte

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.

Einfache Klasse mit Erklärung der wichtigsten Syntax 

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
Stefan Schneider Sat, 07/16/2011 - 10:45

1.4 Java Abgrenzung, Begriffsbestimmung

1.4 Java Abgrenzung, Begriffsbestimmung

Java und andere Initiativen

Java ist:

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.
  • 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.
Stefan Schneider Sun, 10/17/2010 - 10:37

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.

 

Stefan Schneider Sun, 08/15/2010 - 13:35

Anonymous (not verified)

Sun, 11/16/2014 - 18:15

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

Stefan Schneider

Sun, 11/16/2014 - 19:14

In reply to by Anonymous (not verified)

Danke. Habe den Fehler korrigiert.

1.4.2 Java Enterprise Edition

1.4.2 Java Enterprise Edition

 Die 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.

Stefan Schneider Sun, 10/17/2010 - 15:03

1.5 Java Historie

1.5 Java Historie
  Freigabe 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!

Stefan Schneider Mon, 09/14/2020 - 16:16

1.6 Programme des Java JDK

1.6 Programme des Java JDK

 Java Standard Edition (SE) in seiner Distribution von Oracle kann in zwei Varianten benutzt werden:

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

JDK 8.0 Dokumentation 

Stefan Schneider Fri, 10/15/2010 - 15:24

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!
Stefan Schneider Thu, 08/26/2010 - 21:22

javac

javac

Die (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
Stefan Schneider Tue, 04/05/2011 - 08:10

1.6.2 Generieren von Schnittstelleninformation

1.6.2 Generieren von Schnittstelleninformation

Schnittstellengenerierung 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.

Stefan Schneider Fri, 10/15/2010 - 16:40

1.6.3 Generieren von Javadokumentation

1.6.3 Generieren von Javadokumentation

1. 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)

 

Stefan Schneider Fri, 10/15/2010 - 16:48

1.6.4 Javaprozess-Monitoring mit jconsole, jinfo, jps

1.6.4 Javaprozess-Monitoring mit jconsole, jinfo, jps

Monitoring 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:


Stefan Schneider Sat, 10/16/2010 - 09:13

1.7 Variablen und Zuweisungen

1.7 Variablen und Zuweisungen

Zur 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:

 Deklaration von Variablen

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:

Syntax Zuweisung
  • Das Gleichzeichen "=" ist in Java ein Operator. Es hat hier eine andere Bedeutung als in der Mathematik. Es handelt sich nicht um eine mathematische Gleichung!
  • Eine Zuweisung wird immer mit einem Semikolon beendet
  • Es ist optional möglich eine Variable in einem Schritt zu deklarieren und ihr gleichzeitig einen Wert zuzuweisen.

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
    1. Zuweisungsoperator =
    2. Semikolon
    3. Variable (links vom Zuweisungsoperator)
    4. 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;
Stefan Schneider Tue, 10/19/2010 - 13:52

1.8 Übungen

1.8 Übungen

Duke als Boxer

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

Duke auf Schaukel

  1. Kopieren Sie den Quellcode des folgenden grafischen Programms DemoFrame in eine Datei mit dem Namen DemoFrame.java.
  2. Übersetzen Sie das Programm in Bytecode
  3. führen Sie das Programm aus
  4.  Ändern Sie durch experimentieren das Programm wie folgt ab:
  • Ändern Sie die den konstanten Text "Input Text:" zu einem anderen Text
  • Ändern Sie die Standardbelegung des Eingabetexts "Input" zu einer anderen Vorbelegung
  • Legen Sie das Ausgabefeld im Fenster über die Eingabezeile mt dem "Button" 

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

Neues Projekt

Sie erhalten dann einen modalen Dialog. Wählen Sie "Java Application" dann den Button "next".

modaler Dialog zur Projekt Erzeugung

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"

Auswahl des Projektnamens

 

 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:

Anlegen eines neuen Pakets

Es erscheint der folgende modale Dialog:

Package erzeugen

 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

Auswahl eines Javapakets

Es erscheint ein modaler Dialog. Tragen Sie hier im Feld "Package Name" den Wert "Airline.Block1" ein.

Bennen des Pakets

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.

Anlegen einer Klasse

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"

Eintragen des Klassennamen

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:

leere Klasse Flugzeug

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.

Klasse mit main Methode in Netbeans Das grüne Dreick hat die Bedeutung der bekannten Starttaste. Diese Klasse kann man als Hauptprogramm ausführen!
Starten einer Klasse Diese Klasse können Sie ausführen indem Sie die Maus über das Symbol der Klasse bewegen
Konsolenausgabe 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:

Konsolenausgabe

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.
Drucke: *** Unser Flughafen ***

 

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
***********************

 

 

Stefan Schneider Sun, 06/20/2010 - 11:08

1.9 Lösungen

1.9 Lösungen

Running Duke

1.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("***********************");

}
}

 

Stefan Schneider Sun, 10/17/2010 - 18:26

1.10 Fragen

1.10 Fragen

Duke grübelt

1.10.1 Javakommandos des JDK

  • Mit welchem Befehl übersetzt man ein Javaquellprogramm in eine Javabinärdatei?
    • Welche Datei ensteht beim Übersetzen einer Datei mit dem Namen Fahrzeug.java die eine Klasse Fahrzeug enhält?
  • Mit welchem Befehl kann man Javabinärdateien ausführen?
  • 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?
  • Nennen Sie mindestens drei Javabefehle die nur das JDK enthält nicht aber das JRE
  • Welcher Typ von Dateien wird vom Befehl javadoc erzeugt?

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;
x = 5;
x = 2 * x;
y= z * x;
z= 18;

2

 

3

 

4

Endergebnis ? ? ?
Stefan Schneider Sun, 09/25/2011 - 10:50

Anonymous (not verified)

Fri, 10/11/2019 - 15:01

Es fehlt das Semikolon. In der Lösung ist das Semikolon wieder vorhanden.

Anonymous (not verified)

Fri, 10/15/2021 - 20:45

Werden hier in der Frage das Wort Zuweisungen und Anweisungen als Synonym verwendet? Denn im Kapitel 1.7 ist nur von Zuweisungen die Rede.

Die Ergebnisse von Anweisungen werden auf Variablen zugewiesen.

1.11 Antworten

1.11 Antworten

1.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?
    1. Variable
    2. Zuweisungsoperator =
    3. Term
    4. 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

 

 

Stefan Schneider Sun, 09/25/2011 - 13:30

1.12 Lernziele

1.12 Lernziele

Am Ende dieses Blocks können Sie:

  • ... die wichigsten Eigenschaften eines Algorithmus erklären
  • ... die wichtigsten Programme des JRE und JDKs benutzen
    • Sie können erklären welche Typen von Dateien von den Programmen des JDKs gelesen und erzeugt werden.
  • ... ein einfaches Javaprogramm editieren, übersetzen und ausführen lassen.
  • ... die Unterschiede zwischen den Javaeditionen JME, JSE, JEE nennen.
  • ... das Konzept einer Variablen erklären und anwenden.
  • ... die Syntax zur Zuweisung eines Wertes auf eine Variable erklären.
  • ... bei nacheinander erfolgenden Zuweisungen zu verstehen welche Variable welchen Wert zu einem bestimmten Zeitpunkt hat.
  • ... zwischen Klassen und Objekten unterscheiden und deren Beziehung erklären.

Lernzielkontrolle

Sie sind in der Lage die Fragen zur Einführung zu beantworten.

Feedback

Zur Umfrage

QR Code für Umfrage

Stefan Schneider Thu, 08/09/2012 - 15:55