A
dvanced Java
S
ervices
Grundlagen 2
(objektorientiert, nicht graphisch)
Klassen und Objekte
Klassen als Datentypen
Konstruktoren
nichtstatische Methoden
Allgemeiner Aufbau einer Klasse
Die Bestandteile einer Klasse
Der Datenteil einer Klasse
set- und get-Methoden
Konstruktoren
Lokale und (klassen-)globale Variablen
Die Referenz this
Übungen
Vererbung 1
Der "hat ein" Ansatz (member objects)
Der "ist ein" Ansatz (inheriting)..
Überschreiben von Methoden, Polymorphie (method obverwriting)
Der super-Mechanismus für Methoden
Der super-Mechanismus für Konstruktoren
Typverwandtschaft durch Vererbung
Späte Bindung (late binding)
Vererbungshierarchien und Mehrfachvererbung
Vererbung verbieten mit final
Überschreiben verbieten mit final
Object als Rootklasse
Zusammenfassung
Übungen
Einige wichtige Standardklassen aus der API
String
StringBuilder und StringBuffer
Übungen
ArrayList und Vector
Typsichere ArrayList/Vector mit Hilfe von Generics
HashSet
HashSet als Menge
Aufnahme prüfen mit equals()
equals() ist nicht gleich equals()
Speichern mit Hilfe eines HashCodes
Aufnehmen neuer Objekte und Wiederauffinden der Objekte in einem HashSet
Aufnehmen selbst geschriebener Klassen in ein HashSet
Der HashCodealgorithmus der Klasse String
HashSet (Apiauszug)
Übungen
Random
Übungen
Date
Calendar
System
Übungen
Wrapperklassen
Übersicht über die Hüllklassen
"Datentypumwandlung" mit Hüllklasen
Zahlensystemumwandlungen mit Hilfe von Hüllklasen
MAX_VALUE / MIN_VALUE Konstanten
INFINITY und NaN Konstanten
Autoboxing und AutoUnboxing
Vererbung 2
this als Konstruktorname
Anonymer Konstruktor (anonymous initializer)
Statische Daten
Statischer Konstruktor (static initializer)
Statische Methoden und statische Daten
Zusammenfassung
Übungen
Abstrakte Klassen und Methoden
Abstrakte Klassen
Abstrakte Methoden
Übungen
Interfaces
Von der abstrakten Klasse zum Interface
Definition
Typverwandtschaft durch Implementierung
Verwendung von Interfaces
Das Interface Comparable
Das Interface java.lang.Comparable
Vererbung bei Interfaces
Übungen
Interfaces als Ersatz für Funktionspointer
Packages
Ein package liegt in einem Verzeichnis
Die package Anweisung
Der CLASSPATH für ein package
Der default-Accessmodifier
Der Accessmodifier protected
Unterpackages
Namenskonflikte
Java-Archive (Packages archivieren)
Ein ausführbares Archiv erzeugen (Create an executable jar file)
Übungen
Enumerationen (enum ab 1.5)
enum in C++
enum in Java
Konstruktoren in enum
enum als Variante des Singleton-Patterns
enum und switch
Übungen
Assertions (assert ab 1.5)
Wozu Assertions?
Das erweiterte Assertstatement
Ein- und Ausschalten von Assertions
Selektives Ein- und Ausschalten von Assertions
Wann Assertions und wann nicht
Generics und Collections (ab 1.5)
Warum Generics?
Einfache Beispiele
Primitive Datentypen und Autoboxing bzw. Unboxing
Keine Typverwandtschaft
Type Erasure
Generische Collections in Methodensignaturen
Generische Typen mit dem Fragezeichenplatzhalter
Lizenz zum Lesen mit der Syntax <? extends BaseClassOrInterface>
Lizenz zum Schreiben mit der Syntax <? super Child>
Kleine Ergänzungen
Generische Interfaces, Klassen und Methoden (ab 1.5)
Einleitung
Generische Interfaces
Generische Klassen
Zwei wichtige Einschränkungen
Beispiel 1: Eine generische Klasse mit einem generischen Datenfeld
Beispiel 2: Erweiterung von java.lang.Comparable<T>
Generische Methoden
Statische generische Methoden
Kovarianz, Kontravarianz und Invarianz
Kleine Wiederholung
Zuweisungskompatibilität von primitiven Datentypen
Zuweisungskompatibilität von Referenzen
Quasikompatibilität durch Autoboxing
Kovarianz, Kontravarianz und Invarianz
Kovarianz und Kontravarianz bei Arrays von Referenzen
Probleme durch Kontravarianz bei Arrays von Referenzen
Kovarianz und Kontravarianz bei generischen Typen
Generischen Typen ohne Platzhalter
Generischen Typen mit <? extends X>
Generischen Typen mit <? super X>
Schwache Referenzen
Starke Referenzen
Schwache Referenzen
SoftReference
WeakReference
ReferenceQueue
WeakHashMap