kurzeinführung in java für c++- · pdf fileliteratur david flanagan: java examples...
TRANSCRIPT
![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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/13.jpg)
➜ % � �� � � � 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/15.jpg)
�� � � � � � ��� � � � � �� � �
� � � � � � � �
� � � � �� � � � �
�� � �� � � �� � � � �
�� � �� � � �� � � � � � �
� � �� �� � �� � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � � � �� � � �
� � � � � � � � � �� �� � � � � � � � � � � � � � � � � � �
� � � �� � � � �� � � � � � � � ��
�� � � � � �
➜ % � �� � 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/20.jpg)
� � � �� � � ��� �
�� � � � �� � � � � � � �� � �� � � � � � � � �� � � �
� � � � � � �� � � � !
� � � � � � � �� � � � �� � � � � �
�� � � � � � � !
"� � � � � �� � � � � �� � � �
� � � � � � � � � � � �� �� � !
"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �
� � �� � � � � � � � � � � �� � � � � � !
� � �� � � � �� � � � �� � � � �� � � � � �� � � � � � � �� � � � � � �� � �� � � � !
"
"�� � � � � � ��� � � � � �� �
� � � � �� � � � � � � �� � � � � � � � � � � � � � �
�� � � � � �
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/21.jpg)
➜ � � � �� 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/23.jpg)
�� � � � � � ��� � � � �� � � � � �
� � � � �� � � � � � � �� � � � � � �
� � � � � � � � � � � �� � � � � � � � � �
�� � � � � �
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/27.jpg)
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/29.jpg)
� � � � � � � � �� �
�� � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � � � �� � � � � � � � !
� � � � � � � � �� � � � � � !
� � � � � � � � � � � �� � � �� � � � � � � �� � � � � � � � � �
�� � � �� � � � � � � � � !
�� � � � � � � � � � � � � � � � � !
"� � � � � � � �� � � � � � � � � � � �
� � � � � � � � � � !
"� � � � � � � � � � � � � � �� � � �� � � � � � � �
�� � � �� � � � � � � � � !
"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �
� � � � � � � � � � � � � � � � � � � �� � � � � � � � �� � � � � � � � � � � !
� � �� � � � �� � � � �� � � � �� � � � � � � � � � � � � � � � � � � � !
� � � � � � � � � �� � � �� � � � � �� � !
� � �� � � � �� � � � �� � � � �� � � � � � � � � � � � � � � � � � � � !
"
"
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/30.jpg)
�� � � � � � ��� � � � � � � � �
� � � � � � � � � � � � �� � � �
� � � � � � � �� � � � � �
�� � � � � �
➜ % � � � � 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/32.jpg)
�� � � � � � �� � � � ��� �
�� � � � �� � � � � �
� � � � �� � � � � � � � � � � � � � � �
� � �� � � � �� � � � �� � � � �� � �� � � � � � � �� � !
"
"�� � � � � � �� � � � �� � � � ��� �
� � � � � � � � �� !
�� � � � �� � � � � �
� � � � �� � � � � � � � � � � � � � � �
� � �� � � � �� � � � �� � � � �� � �� � � � � � � � � � !
"
"�� � � � � � �� � � � �� � � � �� � � � ��� �
� � � � � � � � �� �� � �� !
�� � � � �� � � � � �
� � � � �� � � � � � � � � � � � � � � �
� � �� � � � �� � � � �� � � � �� � �� � � � � � � � � � !
"
"�� � � � � �
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/33.jpg)
�� � � � � � ��� � � � � ��� �
�� � � � � � ��� � �
� �� � � � � � � �
� �� � � � � � � �
� �� � � � � � � �
�� � � � � �
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/35.jpg)
�� � � � � � ��� � � � � � � � � ��
� � � � � �� � � � �
� � � � � � �� � � � � �
�� � � � � �
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/37.jpg)
�� � � � � � ��� � � �� � �
� � � � � � � � �� � � � � � ��
�� � � � � �
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/38.jpg)
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/39.jpg)
� � � � � �� �
�� � � � �� � � � � � � � �
� � � � �� � � � � � � � � � � � �� � � � � � � � � � � � �
� � � � �� � � � � ! � � � �� � � � �� � � ! �� � �
� � � � �� � � � �� � ! � � � �� � � � �� ! � � � �
�� �� � � � � � � � � � �� � �� � � � � � � � �
� � � � � � � � � � � � � � � !
� � � � � � � � � !
� � � � � � � !
"
"� � � � �� � � � � � � � � � �� �� � � �� � �� � � � � � �
� � � � � � � � �� � � � � � � � � � � � � � � � �
� � � � � � � � � � � � �
� � � � � � � � � � � � �
� � � � � � � � � � �
" !
� � � � �� � !
� � � � �� � � � � ! � � � �� � � � �� ! � � � �
� � �� � � � �� � � � �� � � � �� � �� � � � � � � � � � �� � � � � � �� � � � � � � � � � � !
"
"
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/40.jpg)
�� � � � � � ��� � � � � �
� � � � � �
� � � � �
� � � � � �
�� � � � � �
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/42.jpg)
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/43.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/44.jpg)
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/45.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/46.jpg)
�� � � � � � ��� � � � � �� � �
� � � � � � � �
� � � � � �� � � � � �
� � � � � � �
�� � � � � �
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/47.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/48.jpg)
� � �� � � � � � � � � �� � � � �� � � � � � � � � � � !
� � � �� � � � � � � � � � � �
� � �� � � � � � � � � �� � � � �� � � � � � � � � � � �� � � �� � � � � � � � �� � � !
� � � �� � � � � !
� � �� � � � � � � � � �� � � � �� � � � � � � � � � �� � � �� � � � � � � � �� � � !
"� � �� � � � � � � � � �� � � � �� � � � � � � � � � !
"
" !� � � �� � � � � � !
� � � �� � � � � � !
"
"�� � � � � � ��� � � � � �� � � �
� � � � � � � �
� � � � � � � � � � �� � � �� � � � � � � � ��
� � � � � � � �
� � � � � � � � � �� � � �� � � � � � � � ��
� � � � � � �
� � � � � � � � � � �� � � �� � � � � � � � ��
� � � � � � � � � �� � � �� � � � � � � � ��
� � � � � � �
�� � � � � �
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/49.jpg)
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/50.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/51.jpg)
� � � � ��� � � � � �� � �
� � � � � � � � � � � � �
� � � � � �� � � � � � � � � �
�� � � � � � � � � �� � � � � � � � � �
�� � � � � �
➜ � � � � � � 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/52.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/53.jpg)
➜ 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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/54.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/55.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022030402/5a78bdb27f8b9a83238bc506/html5/thumbnails/56.jpg)
C++ Java
– „Reflection“
– automatische erzeugte HTML-Dokumentation (javadoc)
ZUSAMMENFASSUNG: C++ VS. JAVA 56