56
Kurzeinführung in Java für C++-Programmierer U N I V E R S I T Ä T U L M · S C I E N D O · D O C E N D O · C U R A N D O · Johannes Mayer Universität Ulm Abteilung Angewandte Informationsverarbeitung c JOHANNES MAYER, SAI, UNIVERSITÄT ULM,JANUAR 2002 1

Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

Embed Size (px)

Citation preview

Page 1: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

Kurzeinführung in Javafür C++-Programmierer

UN

IVERS ITÄT ULM

· SC

IEN

DO

· DOCENDO · CU

RA

ND

O ·

Johannes MayerUniversität Ulm

Abteilung Angewandte Informationsverarbeitung

� � � ��� � � � �� � � �� � � � �� � � � ��c� JOHANNES MAYER, SAI, UNIVERSITÄT ULM, JANUAR 2002 1

Page 2: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

WAS IST EIGENTLICH JAVA?➜ Eine südostasiatische Insel

➜ Ein (US-amerikanischer) umgangssprachlicher Ausdruck für starken,heißen Kaffee

➜ Eine Programmiersprache von Sun Microsystems Inc.

WAS IST EIGENTLICH JAVA? 2

Page 3: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

LITERATUR

➀ David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly,2000.

(Viele Beispiele zu allen möglichen Bereichen – sehr zu emfehlen.)

➁ Patrick Niemeyer, Jonathan Knudsen: Learning Java, O’Reilly, 2000.

(Einführung in Java mit Beispielen gespickt)

➂ David Flanagan: Java in a Nutshell, dritte Augabe, O’Reilly, 1999.(Nur, um sich einen vollständigen Überblick über die Sprache Java zu

verschaffen bzw. nachzuschlagen.)

➃ David Flanagan: Java Foundation Classes in a Nutshell, O’Reilly, 1999.

(Analog zum vorigen Buch – nur jetzt für AWT, Swing und Java 2D.)

➄ Mario Jeckle: Skript zur Vorlesung Java, WS 2000/2001.(Auf der Seite � � � � ��� �� �� � � � erhältlich.)

LITERATUR 3

Page 4: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

WEBSEITEN / COMPILER

➜ Alles rund um Java gibt’s auf der Java-Homepage von SunMicrosystems: � � � � � � � ��� � � � � � �� � �

➜ Download des Java 2 SDK 1.3.1: � � � � � � � ��� � � � � � � � � � �� �� �� � � �

(Version 1.3.1 ist die momentan stabile Version; Version 1.4 steht alsRelease Candidate zur Verfügung)

➜ Online-Handbücher und Tutorials zu Java:

� � � � � � � ��� � � � � � �� � � � � � � �

➜ Online-Dokumentation der API des Java 2 SDK 1.3.1:

� � � � � � � ��� � � � � � �� � � � � � � � � �� �� � � � � � � � �� ��� �

➜ Java 2 SDK 1.3 von IBM:

� � � � � � � � � � �� � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � �

(schneller JIT – für Linux und Windows, nicht aber für Solaris)

➜ Sun’s Forte for Java: � � � � � � � � � � � � � �� � �� � � � � �� � � �

➜ Borland JBuilder 6 Personal: � � � � � � � � � � � � � � �� � � � � � � � � � � � � � �

➜ BlueJ: � � � � � � � � � � � � � � � �� � � �

WEBSEITEN / COMPILER 4

Page 5: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

GESCHICHTLICHES

1990➜ Mike Sheridan ist Initiator des Green Teams bei Sun Microsystems

1991➜ James Gosling beginnt seine Arbeit am Interpreter „Oak“ (später in

„Java“ umbenannt)

➜ Patrick Naughton arbeitet am „Aspen“ Grafik-System

1994➜ Van Hoff implementiert einen Java-Compiler in Java (Gosling

implementierte den Compiler in C)

1995➜ Sun kündigt Java auf der SunWorld an – Download im Internet

JDK’s: 1996 v 1.0, 1997 v 1.1, 1998 v 1.2, 2000 v 1.3, 2002 v 1.4

GESCHICHTLICHES 5

Page 6: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

ALLGEMEINES

➜ Java ist rein objektorientierte Programmiersprache und nicht hybrid wieetwa C++

➜ Entstanden (im Wesentlichen) aus C++ und Oberon

➜ Große Ähnlichkeit zu C/C++

➜ Überschaubare Anzahl von Sprachmitteln – im Gegensatz zu C++

➜ Plattformunabhängig (wegen Interpretation von Bytecode)

➜ Sauberes Modulkonzept (wie in Oberon)

➜ Keine „richtigen“ Zeiger (d. h. keine Zeigerumwandlungen und keineZeigerarithmetik – wie in Oberon)

➜ Automatische Speicherverwaltung

ALLGEMEINES 6

Page 7: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

ALLER ANFANG � � � IST LEICHT� �� � � � ��� �

�� � � � �� � � � � �� � � �

� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � �� � � � �� � � � �� � � � �� � �� � � � � � � � � � !

"

"

➜ Java kennt nur Klassen – eine rein objektorientierte Sprache

➜ Minimales Programm muss also in Klasse eingebettet sein

➜ Datei sollte so wie die enthaltene � � �� � -Klasse heißen

➜ Methode � � � #$ als Startpunkt für die Programmausführung – wie in

C/C++

➜ Methode � �� � � #$ wird von dem Standardausgabe-Stream

% & � � � � �� � aufgerufen (rein objektorientiert!)

ALLER ANFANG ' ' ' IST LEICHT 7

Page 8: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

VON DER QUELLE BIS ZUR AUSFÜHRUNG

Java−Quelle(Hello.java)

(java)Java−Virtual−MachineJava−Compiler

(javac)

Just−In−Time−Compiler(JIT)

Java−Bytecode(Hello.class)

➜ Java-Quellcode wird vom Compiler in maschinenunabhängigenJava-Bytecode übersetzt (Plattformunabhängigkeit)

➜ Java-Bytecode wird von virtueller Maschine (JVM) interpretiert

➜ Evtl. übersetzt ein – in die JVM integrierter – Just-In-Time-Compiler(JIT) Methoden vor ihrer ersten Ausführung (� Performance

vergleichbar zu C/C++)

VON DER QUELLE BIS ZUR AUSFÜHRUNG 8

Page 9: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

COMPILATION UND AUSFÜHRUNG

�� � � � � � ��� � � � �� � � � �� �

➜ Compiler ��� � � � erzeugt aus � � � � � � � � � � die Klassendatei � � � � � � � �� � �

➜ � � � � � � � �� � � keine ausführbare Datei, sondern enthält Java-Bytecode

�� � � � � � ��� � � �� � �

� �� � � � � � � �

�� � � � � �

➜ JVM wird mittels ��� � � aufgerufen

➜ Klassenname angeben beim Aufruf der JVM und nicht den Namen derKlassendatei

COMPILATION UND AUSFÜHRUNG 9

Page 10: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

TYPISCHE ANFÄNGERFEHLER�� � � � � � ��� � � �� �

�� � � � � � � �� �� � �� � � � � �� �

��� � �� � � � �� �� � � � �� �� � �� � � � � � � � � � �� �

�� � � � � �

➜ Tippfehler bei der Eingabe des Klassennamens

➜ Exception � � �� � � � � � � �� � � � � signalisiert, dass es keine Klasse mitdem Namen � � � � gibt

�� � � � � � �� � � � � � � �� �

�� � � � �� � � � � � � � �

"�� � � � � � ��� � � � � � � � �� �

�� � � � � � ��� � � � � �

�� � � � � � � �� �� � �� � � � � �� �

��� � �� � � � �� � � � �� � �� � � � � � � � � � � ��

�� � � � � �

➜ JVM sucht in einer auszuführenden Klasse eine öffentliche statischeMethode � � � #$

TYPISCHE ANFÄNGERFEHLER 10

Page 11: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

PRIMITIVE DATENTYPEN

Name des Typs Art des Typs Speicherplatzbedarf

byte vorzeichenbehaftete ganze Zahl 1 Byte

short vorzeichenbehaftete ganze Zahl 2 Bytes

int vorzeichenbehaftete ganze Zahl 4 Bytes

long vorzeichenbehaftete ganze Zahl 8 Bytes

float reelle Zahl 4 Bytes

double reelle Zahl 8 Bytes

boolean boolescher Wert 1 Byte

char Unicode-Zeichen 2 Bytes

➜ Genau spezifizierte Größe aller primitiven Datentypen – auf allen

Plattformen (im Gegensatz zu� � in C/C++)

➜ � � � �� � kann nicht von/in andere Typen konvertiert werden

PRIMITIVE DATENTYPEN 11

Page 12: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

KOMMANDOZEILEN-ARGUMENTE� � �� � � � � � � �� �

�� � � � �� � � � � � �� � � � � � �

� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � �� � � � � ! � � � � � � �� � � � �� ! �� � �

� � �� � � � �� � � � �� � � � �� � � �� � � � � � � � � � � � � � � � � � � � � !

"

"�� � � � � � ��� � � � � �� � � � � � � ��� �

�� � � � � � ��� � � � �� � � � � � � � � � � � � �� � � �� � � ��

� � �� � � � � � � � � � � � � �� �

� � �� � � � � � � �� �

� � �� � � � � � � � ��

�� � � � � �

➜ Parameter� � � � von � � � #$ enthält die Kommandozeilen-Argumente(im Gegensatz zu C/C++ steht das erste Argument bei Index 0)

KOMMANDOZEILEN-ARGUMENTE 12

Page 13: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

➜ % � �� � � � ist der Array-Typ mit String-Elementen

➜ Im Gegensatz zu C/C++ kann man in Java die Länge eines Arraysbestimmen

➜ % � �� � ist eine Standard-Java-Klasse

➜ Mit dem Operator � kann man Strings konkatenieren

➜ Zahlen werden im String-Kontext automatisch in Strings konvertiert

KOMMANDOZEILEN-ARGUMENTE 13

Page 14: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

STRINGS� � � �� � � � �� �

�� � � � �� � � � � � � �� � � �

� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � � �� �� � � � � � �� � �� � � � � � �� ��� � � � � �

� � � �� � � � � � � � � � � � � � � � � � � � � � ! � � � �� �� � � � � � � � � �� � �� � � �� � !

� � �� � � � �� � � � �� � � � �� � � � � � � � � � �� � � � �� � � � !

� � �� � � � �� � � � �� � � � �� � � � � �� � � � � � � � �� � � � � � � � � !

� � �� � � � �� � � � �� � � � �� �� � �� � � �� � � � � � � � � �� � �� �� �� � � � � � � !

� � �� � � � �� � � � �� � � � �� �� � �� � � �� � � � � � � � �� � �� �� � �� �� �� � � � � � � !

� � �� � � � �� � � � �� � � � �� � � �� �� � �� � � � � � � �� �� � �� � � � � � � � !

� � �� � � � �� � � � �� � � � �� � � � � � � � � � � � � � � � � � � � �� � � � � � � � !

� � �� � � � �� � � � �� � � � �� � � � � � � � � � �� �� � � � � � � � �� �� � � � � � � � � � !

�� � � � � �� � � � �� � � � � � � � � � � � � � � � �

� � �� � � � �� � � � �� � � � �� � � � �� � � � �� � � � � � �� � � !

�� � �� � �� � � � �� � � � �� � � � �� � � � �� � � � �� � � � � � � � �� � � !

"

"

STRINGS 14

Page 15: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � ��� � � � � �� � �

� � � � � � � �

� � � � �� � � � �

�� � �� � � �� � � � �

�� � �� � � �� � � � � � �

� � �� �� � �� � � � � � � � � � � � �

� � � � � � � � � � � � � � � � � � � �� � � �

� � � � � � � � � �� �� � � � � � � � � � � � � � � � � � �

� � � �� � � � �� � � � � � � � ��

�� � � � � �

➜ % � �� � ist eine Standard-Java-Klasse für Strings

➜ � � � � � � konstruiert bereits ein String-Objekt ( � � % � �� � # � � � � � � $ ist

also ineffizient, da zwei String-Objekte konstruiert werden!)

➜ Strings sind nicht veränderbar (� keine Kopie nötig!)

STRINGS 15

Page 16: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

ARRAYS� � � � � � � ��� �

�� � � � �� � � � � � �� � � �

� � � � �� � � � � �� � �� � � � � �� � � � � � �� � �� � �

�� � � � � � � � � �� � �� �� � � � �� � ! � � � � �� � � �� �� � � � � � � � � � � � � �

� � � � �� � � � � ! � � � �� � � � �� ! � � � �

� � � � � � � � � � � � � ! � � � � � � � � � � � � � � � �

� � � � � � � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

�� � � � � � � � � �� � � � � � � � � " ! � � �� �� � � � � � � � � � � � � �

�� � � � � � � � �� � � � � � � � � � � " !

�� � � � � � � � � �� � � !

"

"

➜ Wegen der Annahme � �� � � � � � � �� � � � ist dieses Programm nochsehr fehleranfällig

➜ Array-Typen, wie z. B.� � � � , sind Klassen

ARRAYS 16

Page 17: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

KLASSEN UND OBJEKTE

➜ Mit % � �� � und� � � � bzw. % � �� � � � haben wir schon spezielle Klassen

kennen gelernt

➜ Wir haben schon selbst Klassen geschrieben ( � � � � � � , % � �� � � , � � � )

➜ Von der Oberklasse � � � � � � sind alle Klassen (zumindest indirekt)

abgeleitet – entweder explizit oder implizit

➜ Bei Klassen gibt es „nur“ einfache Vererbung – somit ist die

Vererbungshierarchie in Java ein Baum für alle Klassen

➜ Alles was zur Klasse gehört, muss in der Klasse stehen (im Gegensatzzu Implementierungen und Initialisierungen außerhalb von Klassen wie

bei C++)

➜ Objekte, d. h. Instanzen einer Klasse werden mit dem � � -Operator

angewandt auf einen Konstruktor erzeugt

➜ Java besitzt eine automatische Speicherverwaltung, daher keinen

� � �� � � -Operator

KLASSEN UND OBJEKTE 17

Page 18: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

REFERENZEN

➜ Variablen vom Typ einer Klasse heißen Referenzen

➜ Referenzen sind ähnlich den Zeigern von OberonUnterschiede zu C/C++:➜ Keine Dereferenzierung notwendig und möglich➜ Kein allgemeiner Zeigertyp wie etwa � � � � in C/C++➜ Keine Typumwandlungen von Referenzen erlaubt➜ Keine Zeigerarithmetik möglich➜ Keine Referenzen auf primitive Datentypen

➜ Referenzen haben per Voreinstellung den Wert � �

➜ Implizit erfolgt kein Aufruf eines Konstruktors (wie bei den Variablen vom

Typ einer Klasse in C++)

REFERENZEN 18

Page 19: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

BEISPIEL: FIGUREN� � �� � � � ��� �

�� � � � � �� � � � � �� � � � � � �� � � �

� � � � � �� � � �� � �� � � � � �� � � !

"

➜ Klasse ist abstrakt, wenn sie mindestens eine abstrakte, d. h. mit demSchlüsselwort� � � � � � � � deklarierte und nicht implementierte Methodebesitzt

➜ Standardmäßig erfolgt dynamische Bindung bei allen(Objekt-)Methoden in Java (was bei C++ durch das Schlüsselwort

�� � � � � explizit gefordert werden muss) (� Schlüsselwort� � � � )

➜ Bei der Definition der Klasse �� � � � ist keine Oberklasse angegeben,also ist sie implizit von Object abgeleitet

➜ Fehlt ein Konstruktor, so wir ein � � �� � -Konstruktor ohne Parameterhinzugefügt, der als einzige Anweisung ebenfalls den parameterlosenKonstruktor der Oberklasse aufruft

BEISPIEL: FIGUREN 19

Page 20: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

� � � �� � � ��� �

�� � � � �� � � � � � � �� � �� � � � � � � � �� � � �

� � � � � � �� � � � !

� � � � � � � �� � � � �� � � � � �

�� � � � � � � !

"� � � � � �� � � � � �� � � �

� � � � � � � � � � � �� �� � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � �� � � � � � � � � � � �� � � � � � !

� � �� � � � �� � � � �� � � � �� � � � � �� � � � � � � �� � � � � � �� � �� � � � !

"

"�� � � � � � ��� � � � � �� �

� � � � �� � � � � � � �� � � � � � � � � � � � � � �

�� � � � � �

BEISPIEL: FIGUREN 20

Page 21: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

➜ � � � �� ist von �� � � � abgeleitet

➜ Konstruktor enthält als erste Zeile nicht den Aufruf � � � � # � � �$ einesKonstruktors der Oberklasse� � � � � #$ wird als erste Zeile eingefügt

➜ � �� � ist Referenz auf das Objekt selbst

➜ Sichtbarkeit eines jeden Klassenelements wird durch die Angabe von

� � �� � etc. getrennt voneinander festgelegt

➜ Polymorphie: Einer Referenz können auch Objekte einer abgeleiteten

Klasse zugewiesen werden

BEISPIEL: FIGUREN 21

Page 22: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

TYPENTEST UND TYPZUSICHERUNG� � � � � � � � � � �� �

�� � � � �� � � � � � �� � � � � � �� � � � � � � � �� � � �

� � � � � � �� � � � � !

� � � � � � � � � � � � � � � �� � � � � � �� � � � � �� � � �� � � ! �� � � � � ! "

� � � � � �� � � � � �� � � �

� � � � � � � � !

"� � � � � �� � � � � � � � � � � � � �

� � � � � � � � � � �� � � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � �� � � � � � � � � � � � � � � � � � � � � � � � � � !

� � �� � � � �� � � � �� � � � �� � � � � �� � � � � � � �� � � � � � �� � �� � � � !

�� �� �� �� � � � � �� � � � � � � � � � � �

� � � � � � � � � � � � � � �� � � � � � � � !

� � �� � � � �� � � � �� � � � �� � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � !

"

"

"

TYPENTEST UND TYPZUSICHERUNG 22

Page 23: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � ��� � � � �� � � � � �

� � � � �� � � � � � � �� � � � � � �

� � � � � � � � � � � �� � � � � � � � � �

�� � � � � �

➜ Mit dem Operator� � � � �� � � kann man überprüfen, ob ein Objekteinen bestimmten Typ besitzt

➜ Durch den (...)-Operator kann dann schließlich zugesichert werden,

dass es sich um ein Objekt vom angegebenen Typ handelt

➜ Typzusicherung schlägt fehl, falls das Objekt nicht vom angegebenen

Typ ist (� �� � � � � � � � �� � �� � )

➜ Typzusicherung ist keine Typumwandlung

TYPENTEST UND TYPZUSICHERUNG 23

Page 24: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

AUSNAHMEN � �� � � � � � � � ��� �

�� � � � �� � � � � �� � � � � � � �

� � � � � �� � � � � � � � � � � � � � �� � � �� � � � � � � � � �

� � � � �� � � � � ! � � � � � � � �� � � � �� ! �� � � � � � � � � � � � � � � � � � � ��

� � �� � � � �� � � � �� � � � �� � � �� � � � � � � � � � � � � � � � � � � � � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � � � �� � � � � !

"

"�� � � � � � ��� � � �� � � � � � �

�� � � � � � � �� �� � �� � � � � �� �

��� � �� � � � � � � � � � �� � �� �� � �� � �� � � � �� � � � � � � � �

� � � �� � � � � � � � � � � � � � � � �� � � � � � � � �� � � �

� � � �� � � � � � � � � � �� � � �� � � � � � � � �� � � � �

�� � � � � �

➜ Zugriff auf Array-Elemente außerhalb des erlaubten Bereichs führt in

AUSNAHMEN 24

Page 25: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

Java automatisch zu einer Ausnahme( � � � � &�� � � � � � �� � � � �� � �� � �� � )

➜ Ausnahmen sind in Java mit Objekten vom Typ � � � � � � � ��

parametrisiert

➜ Wird eine Ausnahme nicht abgefangen, so führt dies zu einem

„Stack-Trace“, also der Ausgabe aller zur Zeit aktiven Methoden, undi. A. zum Abbruch des Programms (� nützlich bei der Fehlersuche)

➜ Erzeugen einer Ausnahme geht wie folgt:

� � � � � � � � � �� � �� � �� � #�� � � �� $➜ Abfangen einer Ausnahme geht wie in C++:

� � & � � � � � �� � � � # � � �$ � � � � � � � � � � & � � � � �

AUSNAHMEN 25

Page 26: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

EIN-/AUSGABE – STREAMS, READER UND WRITER�� �� � � ��� �

� � � � � �� � � � � � � !

�� � � � �� � � � �� � � �

� � � � �� � � � � � � � � �� � � � �� � � � �� � �� � � � � � � �� � � � � � � �

�� � � � � � � � �� � � � � � � � � �� � � � � � � � �� � � � � �� � !

� � � �� � � �� � � � � � �� � �� � � � !

� � �� � � � �� � � � �� � � � �� � �� � � � � � �� � � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �� � � � � � � �� � � � � � � �

� �� � �� � � � �� � � �� � � � �� �� �� � � �� � � � � !

� �� � �� � � � � � �� � � �� � � � �� � � � � � �� � �� � � � � � �� � � � � �� � � � � � !

"

"�� � � � � � ��� � �� � �

� �� � � � � � � � ��� � � � � � � !

� �� � � � � � � � �� � ��

�� � � � � �

EIN-/AUSGABE – STREAMS, READER UND WRITER 26

Page 27: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

➜ Klassen zur Ein- und Ausgabe im Paket ��� � � �� �

➜ � � � � � � ist abstrakte Klasse zum zeichenweisen Lesen(� Unicode-Zeichen!)

➜ � � � � � � � � � � � � � führt Pufferung ein und ermöglicht somit das Lesen

von ganzen Zeilen

➜ �� �� � � � � � � konkrete Klasse zum Lesen aus einer Datei

➜ % � �� � � � � � � � konkrete Klasse zum Lesen aus einem String

➜ � � � % � � � � � ist abstrakte Klasse zum byteweisen Lesen

➜ % � � � � � � � � � � � � � für komplizierteres Parsen der Eingabe

➜ Analog dazu gibt es für die Ausgabe die abstrakten Klassen � �� � � � und

� � � � % � � � � � , sowie die konkreten Klassen � � � � � � � � �� � � � ,

�� �� � �� � � � , % � �� � � �� � � � etc.

➜ % & � � � � �� � , % & � � � � �� � � und % & � � � � �� sind Beispiele

➜ Geprüpfte Ausnahmen müssen entweder abgefangen oder bei derMethodendeklaration angegeben werden

EIN-/AUSGABE – STREAMS, READER UND WRITER 27

Page 28: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

SCHNITTSTELLEN� � � � � � � � �� �

�� � � � �� � � � � � � � � � � � � � � �

� � � � � � � �� � � � � � � � � � � !

� � � � � � � � � � � � � � �� � � �� � � � � � � !

"

➜ Eine Schnittstelle deklariert eine Menge von öffentlichen Methoden und

Variablen, die eine implementierende Klasse besitzen muss (vgl.Definitions-Modul in Oberon)

➜ Keine Implementierung einer Methode in der Schnittstelle möglich

➜ Mehrfachvererbung im Zusammenhang mit Schnittstellen möglich:➜ Schnittstelle kann von mehreren Schnittstellen erben➜ Klasse kann mehrere Schnittstellen implementieren

➜ Schnittstellen sind genauso Typen wie es Klassen sind

➜ Ideales „Information Hiding“

SCHNITTSTELLEN 28

Page 29: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

� � � � � � � � �� �

�� � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � �

� � � � � �� � � � � � � � !

� � � � � � � � �� � � � � � !

� � � � � � � � � � � �� � � �� � � � � � � �� � � � � � � � � �

�� � � �� � � � � � � � � !

�� � � � � � � � � � � � � � � � � !

"� � � � � � � �� � � � � � � � � � � �

� � � � � � � � � � !

"� � � � � � � � � � � � � � �� � � �� � � � � � � �

�� � � �� � � � � � � � � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � � � � � � � � � � � � � � � � �� � � � � � � � �� � � � � � � � � � � !

� � �� � � � �� � � � �� � � � �� � � � � � � � � � � � � � � � � � � � !

� � � � � � � � � �� � � �� � � � � �� � !

� � �� � � � �� � � � �� � � � �� � � � � � � � � � � � � � � � � � � � !

"

"

SCHNITTSTELLEN 29

Page 30: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � ��� � � � � � � � �

� � � � � � � � � � � � �� � � �

� � � � � � � �� � � � � �

�� � � � � �

➜ % � � � � besitzt implizit die Oberklasse � � ��� � �

➜ Außerdem implementiert % � � � � die Schnittstelle � � � � � � �

➜ Zusweisung eines Student-Objekts also an Referenzen vom Typ

% � � � � , � � ��� � � und � � � � � � � möglich

➜ Typmehrfachvererbung also möglich

SCHNITTSTELLEN 30

Page 31: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

MODULKONZEPT�� � � � � � � �

� � ��� � � � �� � � � ��

�� � � � � � � � � � �� �

� � ��� � � � ��

�� � � � � � � � � � �� � � � �� �

� � ��� �

�� � � � � �

�� � � � � � �� � � � ��� �

� � � � � � � �� �� ! � � � � � � � � � � � � � � � � �� � � � � � � � � � �

� � � � � � � �� �� � �� � � ! � � � � � � � � � � � � � � � � � � � � �� �� � �� � � � � � � � � � �

�� � � � �� � � � � �

� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � � � � � � !

� � � � � � � � � !

� � � � � � � � � !

"

"

MODULKONZEPT 31

Page 32: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � �� � � � ��� �

�� � � � �� � � � � �

� � � � �� � � � � � � � � � � � � � � �

� � �� � � � �� � � � �� � � � �� � �� � � � � � � �� � !

"

"�� � � � � � �� � � � �� � � � ��� �

� � � � � � � � �� !

�� � � � �� � � � � �

� � � � �� � � � � � � � � � � � � � � �

� � �� � � � �� � � � �� � � � �� � �� � � � � � � � � � !

"

"�� � � � � � �� � � � �� � � � �� � � � ��� �

� � � � � � � � �� �� � �� !

�� � � � �� � � � � �

� � � � �� � � � � � � � � � � � � � � �

� � �� � � � �� � � � �� � � � �� � �� � � � � � � � � � !

"

"�� � � � � �

MODULKONZEPT 32

Page 33: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � ��� � � � � ��� �

�� � � � � � ��� � �

� �� � � � � � � �

� �� � � � � � � �

� �� � � � � � � �

�� � � � � �

➜ Klassen und Schnittstellen sind die Module in Java

➜ Anordnung von Klassen und Schnittstellen in Unterverzeichnissenmöglich (Pakete)� Paketname am Anfang mit � � � � � � � � � � angeben

➜ Relativer Pfad vom jeweiligen Hauptverzeichnis entspricht (nachErsetzung von „/“ durch „.“) dem Paketnamen

➜ Alle Klassen, Schnittstellen, Methoden und Variablen ohne eines derSchlüsselworte � � �� � , � � � � � � � � � und � �� � � � � sind genau für alleKlassen und Schnittstellen aus dem selben Paket sichtbar(Paket-Sichtbarkeit)

➜ Import von Klassen und Schnittstellen aus anderen Paketen mittels

� � � � � � � � �

MODULKONZEPT 33

Page 34: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

PARAMETERÜBERGABE� � � � � � � �� � �� �

�� � � � �� � � � � � � � � � � �� �

� � � � � �� � � � � �� � � � � � � � � �� � �

� � � � �� � � � � � !

� � � � � � � � � �� � � �� � � � � � � �

�� � � � � � � � � � � � � !

"

"� � � � �� � � � � � � � � � � � � � � � � � � � �� � � � �

� � � � � � � � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � � �� � � � � � � � � � � � �� � � � � !

� � �� � � � �� � � � �� � � � �� � � � � � �� � � � � � � � � � � � � !

� � � � � � � � � !

� � �� � � � �� � � � �� � � � �� � � � � � � �� � � � � � � � � � � � � � !

"

"

PARAMETERÜBERGABE 34

Page 35: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � ��� � � � � � � � � ��

� � � � � �� � � � �

� � � � � � �� � � � � �

�� � � � � �

➜ Nur „Call by Value“ möglich in Java

➜ Objektzustand kann sich aber ändern, die Referenz nicht

➜ Simulation von „Call by Reference“: Variablen-Parameter in eine Klasse„verpacken“

➜ Wie in C++ gibt es in Java auch innere Klassen und zusätzlich auchinnere Schnittstellen (� direkt zu einer Klasse gehörig)

➜ Innere Klassen können � � � �� � oder auch nicht � � � �� � sein

➜ Bruch der Kapselung durch innere Klassen

PARAMETERÜBERGABE 35

Page 36: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

VERGLEICH VON OBJEKTEN� �� � � � ��� �

�� � � � �� � � � � �� � � �

� � � � � �� � � � � � !

� � � � � �� � � � �� � � � � � � � �� � � � � � � � � � � � � ! "

� � � � � �� �� � � �� � � � � � � � � � � � �

�� � � �� �� � � � � �� � �� � � �

� � � � � � � � � � � � � � � �� � � � � � � � � � � !

�� � �� � � � � � � � � � � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� �� � � � � � � � � � �� � � � � !

� �� � � � � � � � � � �� � � � � !

�� � � � � � � � � � � � � � � � � � �� � � � � �� � � � � � � �

� � �� � � � �� � � � �� � � � �� � �� � � � � � � � � � � � � � � � �� � � � � � �� � � !

�� � � � � � �� � � � � � � � �

� � �� � � � �� � � � �� � � � �� � � � � � � � � �� � � � � � �� � � !

"

"

VERGLEICH VON OBJEKTEN 36

Page 37: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � ��� � � �� � �

� � � � � � � � �� � � � � � ��

�� � � � � �

➜ Mit dem Operator � � werden nur die Referenzen verglichen� bei

Referenzen auf verschiedene Objekte immer ungleich

➜ � � und� referenzieren unterschiedliche Objekte, also liefert der erste

Vergleich� � � ��

➜ � � � � � # � � �$ ist eine von � � � � � � definierte Methode, die

standardmäßig (wenn keine eigene Implementierung vorhanden ist) dieReferenzen vergleicht

➜ Weil� � � � � # � � �$ für alle Objekte funktionieren soll, ist der Parameter

vom Typ � � ��� � � (� Typentest und Typzusicherung)

VERGLEICH VON OBJEKTEN 37

Page 38: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

➜ Im Paket ��� � � � �� � (vom dem alle Klassen und Schnittstellen ohneexpliziten� � � � � � verfügbar sind) gibt es die Schnittstelle � � � � � � � �� ,

die nur folgende Methodendeklaration enthält:

� � �� � � � �� � � � � � � � # � � � � � � � $

� � � � � � � �� �

�� � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � �

� � � � �� � � � � � !

� � � � � � � � � � � �� � � � � � � � �� � � � � � � � � � � � � ! "

� � � � �� � � � � � � �� � � � � � �� � � �

� � � � � � � � �� � � � � � � � !

� � � � � � � � � � � � � � � � � !

"

"

➜ Evtl. �� � � � � � � � �� � �� � bei unvergleichbarem Objekt

➜ Sonst: � � kleiner,� � gleich und � � größer

VERGLEICH VON OBJEKTEN 38

Page 39: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

� � � � � �� �

�� � � � �� � � � � � � � �

� � � � �� � � � � � � � � � � � �� � � � � � � � � � � � �

� � � � �� � � � � ! � � � �� � � � �� � � ! �� � �

� � � � �� � � � �� � ! � � � �� � � � �� ! � � � �

�� �� � � � � � � � � � �� � �� � � � � � � � �

� � � � � � � � � � � � � � � !

� � � � � � � � � !

� � � � � � � !

"

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � � � � � �� � � � � � � � � � � � � � � � �

� � � � � � � � � � � � �

� � � � � � � � � � � � �

� � � � � � � � � � �

" !

� � � � �� � !

� � � � �� � � � � ! � � � �� � � � �� ! � � � �

� � �� � � � �� � � � �� � � � �� � �� � � � � � � � � � �� � � � � � �� � � � � � � � � � � !

"

"

VERGLEICH VON OBJEKTEN 39

Page 40: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � ��� � � � � �

� � � � � �

� � � � �

� � � � � �

�� � � � � �

➜ generische Sortieralgorithmen sind auf diese Art möglich (Java kennt

momentan noch keine Templates – im Gegensatz zu C++)

➜ Bei Zuweisungen von Referenzen wird nicht das Objekt, sondern nurdie Referenz (also der „Zeiger“) kopiert

➜ Ein Array ist ein Objekt – daher ist die Vertauschung der Elemente trotz„Call by Value“ möglich

VERGLEICH VON OBJEKTEN 40

Page 41: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

KOPIEN VON OBJEKTEN ERZEUGEN� � � � � � ��� �

�� � � � �� � � � � � � � � � � � � � � � � � � � � � �� � � �

� � � � � �� � � !

� � � � � �� � �� � !

� � � � � � � � � � �� � � � �� � � � � � � �� � � � � � � ! �� � � �� � � ! "

� � � � � � � �� �� � � � � � �

� � � �� � � � � � � �� � � � � � �� � � � �� � � � � � ! � � � � �� � �� � � � �� �� � � � �

� �� � � �� � �� � � � �� � � � � � !

� � � � � � � !

"�� � �� �� � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � ! "

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � � � � � � � � � � � � � � � � � �� � � � � � � � " � !

� � � � � � � � � ! � � � �� � � � � � � � � � � �� � � � � � � � �� � � � � � �

� � � �� � � � � � � � �� � � � � � ! � � � � � �� � � � � � � � � � � �� � � � � �

"

"

KOPIEN VON OBJEKTEN ERZEUGEN 41

Page 42: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

➜ Zuweisung von Referenzen erzeugt noch keine Kopie

➜ Methode � � � � # $ von � � � � � � erzeugt eine byteweise Kopie mit

demselben dynamischen Typ (� keinen Konstruktor verwenden)

➜ Bei Aggregation werden nur die Referenzen und nicht die Objekte beieiner byteweisen Kopie dupliziert (� � � � � #$ überschreiben)

➜ � � � � #$ ist aber � � � � � � � � � und löst eine

� � � � � � % � � � � � � � � � �� � �� � aus, wenn die Schnittstelle � � � � � ��

nicht implementiert wird

➜ Die Schnittstelle � � � � � �� aus dem – automatisch importierten –Paket ��� � � � �� � enthält keine Methodendeklaration („Marker Interface“)

KOPIEN VON OBJEKTEN ERZEUGEN 42

Page 43: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

STRINGREPRÄSENTATION� � � � �� � �� �

�� � � � �� � � � � � � � �� �

� � � � � � �� � � � � � � � !

� � � � � � � � �� � � �� � � � � � � �� � � � � � �

�� � � � � � � � � !

�� � � � � � � � � !

"� � � � � � � �� � � � � � � �� � � � �

� � � � � � � � � � � � � � � � � � � !

"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � �� � � � � � � � � � �� � � � � � � � � !

� � �� � � � �� � � � �� � � � � � � !

"

"�� � � � � � ��� � � � � � ��

� � � � � � �

�� � � � � �

STRINGREPRÄSENTATION 43

Page 44: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

➜ Von � � ��� � � wird die Methode � � % � �� � #$ geerbt

➜ Referenz im Stringkontext führt zur Anwendung der Methode

� � % � �� � #$

➜ Überschreiben der Methode � � % � �� � #$ , um die Form der Ausgabe zubestimmen

➜ Interessant für Fehlersuche

STRINGREPRÄSENTATION 44

Page 45: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

THREADS� � � �� � � � �� �

�� � � � �� � � � � � � �� � � �

� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � �� � � � � � � � � � � �� � � � �

�� � � � � � � �� � � � �

� � �� � � � � � � � � �� � � � �� � � � � � � � � � � !

� � � � � � � �� � � �� � � � � � � � ! "

�� � �� � �� � � � �� � � � �� � � � � � � � � � "

� � �� � � � � � � � � �� � � � �� � � � � � � � � � !

"

" !� � � �� � � � � � � � � � � �� � � � �

�� � � � � � � �� � � � �

� � � � � � � �� � � �� � � � � � � ! "

�� � �� � �� � � � �� � � � �� � � � � � � � � � "

� � �� � � � � � � � � �� � � � �� � � � � � �� � � � � �� � !

"

" !� � � �� � � � � � ! � � � �� � � � � � !

"

"

THREADS 45

Page 46: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

�� � � � � � ��� � � � � �� � �

� � � � � � � �

� � � � � �� � � � � �

� � � � � � �

�� � � � � �

➜ Threads sind leichtgewichtige Prozesse, d. h.➜ Threads teilen sich den Adressraum➜ Laufen „parallel“ (keine explizite Kooperation wie etwa bei

Koroutinen in Oberon)

➜ Thread-Ausführung wird mit der Methode � � � � � #$ gestartet

� Ausführung der Methode � # $ des Threads

➜ Mittels � � � � � � � � �� � � # � � �$ schlafender Thread kann durch eine

� � � � � � � � �� � �� � �� � unterbrochen werden

➜ Beide Threads sind Beispiele für Objekte anonymer Klassen

THREADS 46

Page 47: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

SYNCHRONISATION VON THREADS� � � �� � � � � ��� �

�� � � � �� � � � � � � �� � � � �

� � � � �� � � �� � � � � ! � � � � � � �� �� � � � �� �� � � �

� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� �� � � � � � �� � � � � � � � � � � � �� � � � � � ! � � � � � �� � � � � � � � �� � � �

� � � �� � � � � � � � � � � �� � � � �

�� � � � � � � �� � � � �

� � �� � � � � � � � � �� � � � �� � � � � � � � � � � !

� � � �� � � � � � � � � � � �

� � �� � � � � � � � � �� � � � �� � � � � � � � � � � �� � � �� � � � � � � � �� � � !

� � � �� � � � � !

� � � � � � � �� � � �� � � � � � � � � ! "

�� � �� � �� � � � �� � � � �� � � � � � � � � � "

� � �� � � � � � � � � �� � � � �� � � � � � � � � � �� � � �� � � � � � � � �� � � !

"� � �� � � � � � � � � �� � � � �� � � � � � � � � � !

"

" !� � � �� � � � � � � � � � � �� � � � �

�� � � � � � � �� � � � �

SYNCHRONISATION VON THREADS 47

Page 48: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

� � �� � � � � � � � � �� � � � �� � � � � � � � � � � !

� � � �� � � � � � � � � � � �

� � �� � � � � � � � � �� � � � �� � � � � � � � � � � �� � � �� � � � � � � � �� � � !

� � � �� � � � � !

� � �� � � � � � � � � �� � � � �� � � � � � � � � � �� � � �� � � � � � � � �� � � !

"� � �� � � � � � � � � �� � � � �� � � � � � � � � � !

"

" !� � � �� � � � � � !

� � � �� � � � � � !

"

"�� � � � � � ��� � � � � �� � � �

� � � � � � � �

� � � � � � � � � � �� � � �� � � � � � � � ��

� � � � � � � �

� � � � � � � � � �� � � �� � � � � � � � ��

� � � � � � �

� � � � � � � � � � �� � � �� � � � � � � � ��

� � � � � � � � � �� � � �� � � � � � � � ��

� � � � � � �

�� � � � � �

SYNCHRONISATION VON THREADS 48

Page 49: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

➜ Java stellt Sprachmittel zur Synchronisation von Threads bereit

➜ Zwei � & � � � � � � � � -Anweisungsblöcke, bei denen dasselbe zu

synchronisierende Objekt angegeben ist, können nie gleichzeitig aktivsein (gegenseitiger Ausschluss bzw. „Mutual Exclusion“)

➜ Zusätzlich zu � & � � � � � � � � -Anweisungsblöcken kann auch eineMethode mit dem Schlüsselwort synchronized deklariert werden

� implizites Einschließen aller Aufrufe dieser Methode in einen

� & � � � � � � � � -Block parametrisiert mit dem Objekt, auf dem die

Methode ausgeführt werden soll

➜ Bei mehr als einer zu synchronisierenden Resource kann es zuVerklemmungen kommen („Deadlocks“)

➜ Alle in anonymen Klassen von außerhalb verwendeten Variablenmüssen mit Hilfe des Schlüsselwortes final als konstant deklariert

werden (Referenz ist konstant, Objektzustand, d. h. die Werte seinerVariablen, nicht)

SYNCHRONISATION VON THREADS 49

Page 50: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

CONTAINER-KLASSEN DES JAVA-API � � � � � � � � ��� �

� � � � � �� � �� � �� � � !

�� � � � �� � � � � � � �� � � �

� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � �� � � � � � � � � � � � � � � ! � � � � � � � � �� � � � � � � � � � � �

� �� �� � � � ! � � � � � � � � � � � � � � � � � � � � �

�� � � �� � � � � � � � � � � � ! � � � � � � � � � � � � � � � � �

�� � � �� � �� � � � � � � � � � � � !

� � � � � � � � � �� � �� �� � � � � � � � � � � � � � � � � � �� � � � �� � �

� � � � �� � � � � ! � � � � � � � � � ! � � � �

� � �� � � � �� � � � �� � � � �� � � � � � � �� � � �� � � � � � � � � � � !

� � � � � � � � � ! � � � � � � � � � � � � � � � � � �

� � � � � � � � � � � � � � �� � � �� � � � � � � � � � �� � � � �� � � �� � � � � �

� � � � �� � � � � � � � � � �� � � � � � � � � ! � �� � � � �� � � � ! �

� � �� � � � �� � � � �� � � � �� �� � � � � � � � � � �� � � �� � � � �� �� � � � � !

"

"

CONTAINER-KLASSEN DES JAVA-API 50

Page 51: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

� � � � ��� � � � � �� � �

� � � � � � � � � � � � �

� � � � � �� � � � � � � � � �

�� � � � � � � � � �� � � � � � � � � �

�� � � � � �

➜ � � � � � � ist eine Container-Klasse aus der Java Bibliothek, die

dynamisch wachsende Arrays implementiert

➜ Verwendung auch als Liste möglich (z. B. Methode� � � #$ )

➜ Elemente von � � � � � � besitzen den Typ � � ��� � � , da Java keine

Templates kennt

➜ Queues bzw. doppelt verkettete Listen: �� � � � �� � �

➜ Stacks: % � � � � �

➜ Assoziative Arrays: � � � �� � �

➜ Mengen: � � � � %� �

CONTAINER-KLASSEN DES JAVA-API 51

Page 52: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

GUI-PROGRAMMIERUNG MIT JAVA-SWING� � � � ��� �

� � � � � �� � � � � � �� � � � !

� � � � � �� � �� � � � � !

� � � � � �� � �� � � � � � � � � � !

�� � � � �� � � � � � � �

� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �

� � � � � � � � � � � � � � � � � � � � � �� � � � �� � � � �� ��� � � � � � � !

� � � � � �� � � � �� � � � � �� � � � � �� � � � �� � � � � � � � � � � � �

�� � � � � � � � �� � � � � � � � �� � � � �� � � � � � � � � � �

� � �� � � � �� �� � � � !

"

" � !

� � � � � � � � � � � � � � � � � � � � � � �� � � �� � � � � �� �� � �� � � � � � � � � � � !

� � � � � � � � � � � � � � � � � � � � ! � � � � � � � � � � � � � � � � � � � � � � � !

� � � � � � � � � � � � � � � �� �� � � !

"

"

GUI-PROGRAMMIERUNG MIT JAVA-SWING 52

Page 53: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

➜ Java-GUI-Programme auf Turing ausführen (wegen der installierten

JDK-Version)

➜ Swing und AWT sind die GUI-Bibliotheken der Java Foundation Classes(Swing ist aktueller!)

➜ � � � � � � ist ein Fenster

➜ Reaktion auf Schließen des Fensters durch Installation eines eigenen

�� � � � � � � � � � � ’s

➜ Hinzufügen eines Textfeldes ( � � � � � � ) mittels� � � # � � �$

➜ Entweder Größe mittels �� � %� � � # $ setzen oder benötigte Größeermitteln lassen ( � � � � #$ )

➜ Schließlich Fenster mittels �� � �� �� � �� # � � �$ anzeigen

GUI-PROGRAMMIERUNG MIT JAVA-SWING 53

Page 54: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

ZUSAMMENFASSUNG: C++ VS. JAVA

C++ Java

übersetzt interpretiert (evtl. JIT)

plattformabhängig plattformunabhängig

hybrid objektorientiert echt objektorientiert

schnelle Ausführung mit gutem JIT nur etwa ein Drit-tel langsamer (anwendungsab-hängig)

Präprozessor echtes Modulkonzept

Templates noch nicht – für Java SDK 1.5geplant

Mehrfachvererbung bei Klas-sen

ZUSAMMENFASSUNG: C++ VS. JAVA 54

Page 55: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

C++ Java

– Schnittstellen und dadurchvolles „Information Hiding“ undTyp-Mehrfachvererbung

unsichere Zeiger typsichere Zeiger

leicht Speicherlecks möglich automatische Speicherverwal-tung

Überladen von Operatoren –

– anonyme Klassen

– große Standardbibliothek

– Persistenz integriert

– Threads mit Synchronisation

ZUSAMMENFASSUNG: C++ VS. JAVA 55

Page 56: Kurzeinführung in Java für C++- · PDF fileLITERATUR David Flanagan: Java Examples in a Nutshell, zweite Ausgabe, O’Reilly, 2000. (Viele Beispiele zu allen möglichen Bereichen

C++ Java

– „Reflection“

– automatische erzeugte HTML-Dokumentation (javadoc)

ZUSAMMENFASSUNG: C++ VS. JAVA 56