Galileo Computing <openbook>
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Buch: Java ist auch eine Insel - Zum Katalog  

Inhalt

Vorwort

Galileo Computing

1 Schon wieder eine neue Sprache?

1.1 Der erste Kontakt
1.2 Historischer Hintergrund
1.3 Eigenschaften von Java
  1.3.1 Die virtuelle Maschine
  1.3.2 Kein Präprozessor
  1.3.3 Überladene Operatoren
  1.3.4 Zeiger und Referenzen
  1.3.5 Garbage-Collector
  1.3.6 Ausnahmenbehandlung
  1.3.7 Objektorientierung in Java
  1.3.8 Java-Security-Model
1.4 Java im Vergleich zu anderen Sprachen
  1.4.1 Java und JavaScript
  1.4.2 Normierungsversuche
1.5 Die Rolle von Java im Web
1.6 Aufkommen von Stand-Alone-Applikationen
1.7 Entwicklungs- und Laufzeitumgebungen
  1.7.1 Aller Anfang mit dem Java SDK
  1.7.2 Kaffe von Transvirtual Technologies
  1.7.3 JBuilder
  1.7.4 Die Entwicklungsumgebung von Sun: Forté
  1.7.5 Umgebungen von IBM
  1.7.6 Visual Café von WebGain (ehemals Symantec)
  1.7.7 Ein Wort zu Microsoft, Java und zu J++
  1.7.8 Kawa
  1.7.9 Die Entwicklungsumgebung CodeGuide
1.8 Installationsanleitung für das Java 2 SDK unter Microsoft Windows
  1.8.1 Das Java 2 SDK beziehen
  1.8.2 Java SDK installieren
  1.8.3 Compiler und Interpreter nutzen
1.9 Erstes Programm compilieren und testen
  1.9.1 Häufige Compiler- und Interpreterprobleme
Galileo Computing

2 Sprachbeschreibung

2.1 Anweisungen und Programme
2.2 Programme
  2.2.1 Kommentare
  2.2.2 Funktionsaufrufe als Anweisungen
  2.2.3 Die leere Anweisung
  2.2.4 Der Block
2.3 Elemente einer Programmiersprache
  2.3.1 Textkodierung durch Unicode-Zeichen
  2.3.2 Bezeichner
  2.3.3 Reservierte Schlüsselwörter
  2.3.4 Token
  2.3.5 Semantik
2.4 Datentypen
  2.4.1 Primitive Datentypen
  2.4.2 Wahrheitswerte
  2.4.3 Variablendeklarationen
  2.4.4 Ganzzahlige Datentypen
  2.4.5 Die Fließkommazahlen
  2.4.6 Zeichen
  2.4.7 Die Typanpassung (Das Casting)
  2.4.8 Lokale Variablen, Blöcke und Sichtbarkeit
  2.4.9 Initialisierung von lokalen Variablen
2.5 Ausdrücke
  2.5.1 Zuweisungsoperator und Verbundoperator
  2.5.2 Präfix- oder Postfix-Inkrement und -Dekrement
  2.5.3 Unäres Minus und Plus
  2.5.4 Arithmetische Operatoren
  2.5.5 Die relationalen Operatoren
  2.5.6 Logische Operatoren
  2.5.7 Reihenfolge und Rang der Operatoren in der Auswertungsreihenfolge
  2.5.8 Was C(++)-Programmierer vermissen könnten
2.6 Bedingte Anweisungen oder Fallunterscheidungen
  2.6.1 Die if-Anweisung
  2.6.2 Die Alternative wählen mit einer if/else-Anweisung
  2.6.3 Die switch-Anweisung bietet die Alternative
2.7 Schleifen
  2.7.1 Die while-Schleife
  2.7.2 Schleifenbedingungen und Vergleiche mit ==
  2.7.3 Die do/while-Schleife
  2.7.4 Die for-Schleife
  2.7.5 Ausbruch planen mit break und Wiedereinstieg mit continue
  2.7.6 Break und Continue mit Sprungmarken
2.8 Methoden einer Klasse
  2.8.1 Bestandteil einer Funktion
  2.8.2 Aufruf
  2.8.3 Methoden ohne Parameter
  2.8.4 Parameter und Wertübergabe
  2.8.5 Methoden vorzeitig mit return beenden
  2.8.6 Nicht erreichbarer Quellcode bei Funktionen
  2.8.7 Rückgabewerte
  2.8.8 Methoden überladen
  2.8.9 Vorinitialisierte Parameter bei Funktionen
  2.8.10 Finale lokale Variablen
  2.8.11 Finale Referenzen in Objekten und das fehlende const
  2.8.12 Rekursive Funktionen
  2.8.13 Die Ackermann-Funktion
  2.8.14 Die Türme von Hanoi
2.9 Noch mehr Operatoren
  2.9.1 Bit-Operationen
  2.9.2 Vorzeichenlose Bytes in ein Integer und Char konvertieren
  2.9.3 Variablen mit Xor vertauschen
  2.9.4 Die Verschiebe-Operatoren
  2.9.5 Setzen, Löschen, Umdrehen, Testen von Bits
  2.9.6 Der Bedingungsoperator
  2.9.7 Überladenes Plus für Strings
Galileo Computing

3 Klassen und Objekte

3.1 Objektorientierte Programmierung
  3.1.1 Warum überhaupt OOP?
  3.1.2 Modularität und Wiederverwertbarkeit
3.2 Klassen benutzen
  3.2.1 Die Klasse Point
  3.2.2 Etwas über die UML
  3.2.3 Anlegen eines Exemplars einer Klasse
  3.2.4 Zugriff auf Variablen und Methoden mit dem Punkt
  3.2.5 Konstruktoren
  3.2.6 Die null-Referenz
3.3 Mit Referenzen arbeiten
  3.3.1 Zuweisungen bei Referenzen
  3.3.2 Funktionen mit nicht-primitiven Parametern
  3.3.3 Gleichheit von Objekten und die Methode equals()
3.4 Arrays
  3.4.1 Deklaration von Arrays
  3.4.2 Arrays mit Inhalt
  3.4.3 Die Länge eines Arrays mit length
  3.4.4 Zugriff auf die Elemente
  3.4.5 Array-Objekte erzeugen
  3.4.6 Fehler bei Arrays
  3.4.7 Arrays mit nicht-primitiven Elementen
  3.4.8 Arrays und Objekte
  3.4.9 Initialisierte Array-Objekte
  3.4.10 Mehrdimensionale Arrays
  3.4.11 Die Wahrheit über die Array-Initialisierung
  3.4.12 Arrays kopieren und füllen
  3.4.13 Mehrere Rückgabeparameter
  3.4.14 Parameter per Referenz übergeben
  3.4.15 Der Einstiegspunkt für das Laufzeitsystem
  3.4.16 Der Rückgabewert von main()
Galileo Computing

4 Der Umgang mit Zeichenketten

4.1 Strings und deren Anwendung
  4.1.1 String-Objekte für konstante Zeichenketten
  4.1.2 String-Objekte verraten viel
  4.1.3 Gut, dass wir verglichen haben
  4.1.4 Stringteile extrahieren
  4.1.5 Veränderte Strings liefern
  4.1.6 Typen in Zeichenketten konvertieren
4.2 Veränderbare Zeichenketten mit der Klasse StringBuffer
  4.2.1 Anlegen von StringBuffer-Objekten
  4.2.2 Die Länge eines StringBuffer-Objekts lesen und setzen
  4.2.3 Daten anhängen
  4.2.4 Zeichen(folgen) setzen, erfragen, löschen
4.3 Vergleiche von Zeichenketten als String und StringBuffer
  4.3.1 Sollte es ein equals() und hash() bei StringBuffer geben?
4.4 Ein paar kleine Helfer
  4.4.1 Strings einer gegebenen Länge erzeugen und rechtsbündig ausgeben
  4.4.2 Teile im String ersetzen
4.5 Zeichenkodierungen umwandeln
4.6 Sprachabhängiges Vergleichen mit der Collator–Klasse
  4.6.1 Effiziente interne Speicherung für Sortierung
4.7 Die Klasse StringTokenizer
4.8 StreamTokenizer
4.9 Formatieren mit Format-Objekten
  4.9.1 Ausgaben formatieren
  4.9.2 Dezimalzahlformatierung
4.10 Reguläre Ausdrücke
  4.10.1 Splitten von Zeichenketten
  4.10.2 split() in String
  4.10.3 Das Paket gnu.regexp
4.11 Überprüfung der E-Mail-Adressen und Kreditkarteninformationen
  4.11.1 Gültige E-Mail-Adressen
  4.11.2 Kreditkartennummern testen
Galileo Computing

5 Mathematisches

5.1 Arithmetik in Java
  5.1.1 Soll eine Division durch Null zur Übersetzungszeit erkannt werden?
5.2 Die Funktionen der Math-Klasse
  5.2.1 Attribute
  5.2.2 Winkelfunktionen (trigonometrische Funktionen und Arkusfunktionen)
  5.2.3 Runden von Werten
  5.2.4 Exponentialfunktionen
  5.2.5 Division
  5.2.6 Absolutwerte und Maximum, Minimum
  5.2.7 Zufallszahlen
5.3 Mathe bitte strikt
  5.3.1 Strikt Fließkomma mit strictfp
  5.3.2 Die Klassen Math und StrictMath
5.4 Die Random-Klasse
5.5 Große Zahlen
  5.5.1 Die Klasse BigInteger
  5.5.2 Ganz lange Fakultäten
5.6 Probleme mit Java und der Mathematik
5.7 Das Java-Matrix-Paket Jama
Galileo Computing

6 Eigene Klassen schreiben

6.1 Eigene Klassen definieren
  6.1.1 Methodenaufrufe und Nebeneffekte
  6.1.2 Argumentübergabe mit Referenzen
  6.1.3 Die this-Referenz
6.2 Assoziationen zwischen Objekten
6.3 Privatsphäre und Sichtbarkeit
  6.3.1 Wieso nicht freie Methoden und Variablen für alle?
  6.3.2 Privat ist nicht ganz privat. Es kommt darauf an wer’s sieht
  6.3.3 Zugriffsmethoden für Attribute definieren
  6.3.4 Zusammenfassung zur Sichtbarkeit
6.4 Statische Methoden und Variablen
  6.4.1 Warum statische Eigenschaften sinnvoll sind
  6.4.2 Statische Eigenschaften mit static
  6.4.3 Statische Eigenschaften als Objekteigenschaften nutzen
  6.4.4 Statische Eigenschaften und Objekteigenschaften
  6.4.5 Statische Variablen zum Datenaustausch
  6.4.6 Warum die Groß- und Kleinschreibung wichtig ist
  6.4.7 Konstanten mit dem Schlüsselwort final bei Variablen
  6.4.8 Typsicherere Konstanten
  6.4.9 Statische Blöcke
6.5 Objekte anlegen und zerstören
  6.5.1 Konstruktoren schreiben
  6.5.2 Einen anderen Konstruktor der gleichen Klasse aufrufen
  6.5.3 Initialisierung der Objekt- und Klassenvariablen
  6.5.4 Finale Werte im Konstruktor setzen
  6.5.5 Exemplarinitialisierer (Instanzinitialisierer)
  6.5.6 Zerstörung eines Objekts durch den Müllaufsammler
  6.5.7 Implizit erzeugte Stringobjekte
  6.5.8 Zusammenfassung: Konstruktoren und Methoden
6.6 Vererbung
  6.6.1 Vererbung in Java
  6.6.2 Einfach- und Mehrfachvererbung
  6.6.3 Kleidungsstücke modelliert
  6.6.4 Sichtbarkeit
  6.6.5 Das Substitutionsprinzip
  6.6.6 Automatische und Explizite Typanpassung
  6.6.7 Finale Klassen
  6.6.8 Unterklassen prüfen mit dem Operator instanceof
6.7 Methoden überschreiben
  6.7.1 super: Aufrufen einer Methode aus der Oberklasse
  6.7.2 Nicht überschreibbare Funktionen
  6.7.3 Fehlende kovariante Rückgabewerte
6.8 Die Oberste aller Klassen: Object
  6.8.1 Klassenobjekte
  6.8.2 Hashcodes
  6.8.3 Objektidentifikation mit toString()
  6.8.4 Objektgleichheit mit equals() und Identität
  6.8.5 Klonen eines Objekts mit clone()
  6.8.6 Aufräumen mit finalize()
  6.8.7 Synchronisation
6.9 Die Oberklasse gibt Funktionalität vor
  6.9.1 Dynamisches Binden als Beispiel für Polymorphie
  6.9.2 Keine Polymorphie bei privaten, statischen und finalen Methoden
  6.9.3 Konstruktoren in der Vererbung
6.10 Abstrakte Klassen
  6.10.1 Abstrakte Klassen
  6.10.2 Abstrakte Methoden
  6.10.3 Über abstract final
6.11 Schnittstellen
  6.11.1 Die Mehrfachvererbung bei Schnittstellen
  6.11.2 Erweitern von Interfaces – Subinterfaces
  6.11.3 Vererbte Konstanten bei Schnittstellen
  6.11.4 Vordefinierte Methoden einer Schnittstelle
  6.11.5 CharSequence als Beispiel einer Schnittstelle
6.12 Innere Klassen
  6.12.1 Geschachtelte Top-Level Klassen und Schnittstellen
  6.12.2 Mitglieds- oder Elementklassen
  6.12.3 Lokale Klassen
  6.12.4 Anonyme innere Klassen
  6.12.5 Eine Sich-Selbst-Implementierung
  6.12.6 this und Vererbung
  6.12.7 Implementierung einer verketteten Liste
  6.12.8 Funktionszeiger
6.13 Gegenseitige Abhängigkeiten von Klassen
6.14 Pakete
Galileo Computing

7 Exceptions

7.1 Problembereiche einzäunen
  7.1.1 Exceptions in Java mit try und catch
  7.1.2 Ablauf einer Ausnahmesituation
  7.1.3 Wiederholung kritischer Bereiche
  7.1.4 throws im Methodenkopf angeben
  7.1.5 Abschließende Arbeiten mit finally
  7.1.6 Nicht erreichbare catch-Klauseln
7.2 Die Klassenhierarchie der Fehler
  7.2.1 Die Exception-Hierarchie
  7.2.2 Ober-Ausnahmen fangen
  7.2.3 Alles geht als Exception durch
  7.2.4 Ausnahmen, die nicht gefangen werden müssen: RuntimeException
7.3 Werfen eigener Exceptions
  7.3.1 Vorgefertigte Ausnahme-Objekte wieder verwenden
  7.3.2 Typecast auf ein null-Objekt für eine NullPointerException
  7.3.3 Neue Exception-Klassen definieren
7.4 Rückgabewerte bei ausgelösten Ausnahmen
7.5 Ein Assert in Java
7.6 Sicherheitsfragen mit dem SecurityManager klären
  7.6.1 Programm beenden
Galileo Computing

8 Die Funktionsbibliothek

8.1 Die Java-Klassenphilosophie
  8.1.1 Paketübersicht
8.2 Wrapper-Klassen
  8.2.1 Die Character-Klasse
  8.2.2 Die Boolean-Klasse
  8.2.3 Die Number-Klasse
  8.2.4 Die Klasse Integer
  8.2.5 Unterschiedliche Ausgabeformate
  8.2.6 Behandlung von Überlauf
8.3 Ausführung von externen Programmen
  8.3.1 DOS-Programme aufrufen
  8.3.2 Die Windows Registry verwenden
8.4 Compilieren von Klassen
  8.4.1 Der Sun-Compiler
Galileo Computing

9 Threads und nebenläufige Programmierung

9.1 Prozesse und Threads
  9.1.1 Wie parallele Programme die Geschwindigkeit heben können
9.2 Threads erzeugen
  9.2.1 Threads über die Schnittestelle Runnable implementieren
  9.2.2 Threads über Runnable starten
  9.2.3 Die Klasse Thread erweitern
  9.2.4 Erweitern von Thread oder implementieren von Runnable?
9.3 Threads schlafen
  9.3.1 Eine Zeituhr
9.4 Die Klassen Timer und TimerTask
9.5 Die Zustände eines Threads
  9.5.1 Das Ende eines Threads
  9.5.2 Einen Thread höflich mit Interrupt beenden
  9.5.3 Der stop() von außen
  9.5.4 Das ThreadDeath-Objekt
  9.5.5 Auf das Ende warten mit join()
9.6 Arbeit niederlegen und wieder aufnehmen
9.7 Priorität
  9.7.1 Threads hoher Priorität und das AWT
  9.7.2 Granularität und Vorrang
9.8 Dämonen (engl. Daemon)
9.9 Kooperative und nicht-kooperative Threads
9.10 Synchronisation über kritische Abschnitte
  9.10.1 Gemeinsam genutzte Daten
  9.10.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
  9.10.3 Punkte parallel initialisieren
  9.10.4 i++ sieht atomar aus, ist es aber nicht
  9.10.5 Abschnitte mit synchronized schützen
  9.10.6 Monitore
  9.10.7 Synchronized-Methode am Beispiel der Klasse StringBuffer
  9.10.8 Synchronisierte Blöcke
  9.10.9 Vor- und Nachteile von synchronisierten Blöcken und Methoden
  9.10.10 Nachträglich synchronisieren
  9.10.11 PMonitore sind reentrant, gut für die Geschwindigkeit
  9.10.12 Deadlocks
9.11 Variablen mit volatile kennzeichnen
9.12 Synchronisation über Warten und Benachrichtigen
  9.12.1 Warten mit wait() und Aufwecken mit notify()
  9.12.2 Mehrere Wartende und notifyAll()
  9.12.3 wait() mit einer Zeitspanne
  9.12.4 Beispiel Erzeuger-Verbraucher-Programm
  9.12.5 Semaphoren
9.13 Grenzen von Threads
9.14 Aktive Threads in der Umgebung
9.15 Gruppen von Threads in einer Thread-Gruppe
  9.15.1 Etwas über die aktuelle Thread-Gruppe herausfinden
  9.15.2 Threads in einer Thread-Gruppe anlegen
  9.15.3 Methoden von Thread und ThreadGroup im Vergleich
9.16 Einen Abbruch der virtuellen Maschine erkennen
Galileo Computing

10 Raum und Zeit

10.1 Greenwich Mean Time (GMT)
10.2 Wichtige Datum-Klassen im Überblick
  10.2.1 Zeitzonen durch die Klasse TimeZone repräsentiert
10.3 Sprachen der Länder
  10.3.1 Sprachen in Java über Locale-Objekte
10.4 Einfache Übersetzung durch ResourceBundle-Objekte
10.5 Die Klasse Date
  10.5.1 Die Date-Klasse
  10.5.2 Zeitmessung und Profiling
10.6 Die abstrakte Klasse Calendar
10.7 Der gregorianische Kalender
10.8 Formatieren der Datumsangaben
  10.8.1 Mit DateFormat und SimpleDateFormat formatieren
  10.8.2 Parsen von Datumswerten
  10.8.3 Parsen und Formatieren ab bestimmten Positionen
Galileo Computing

11 Datenstrukturen und Algorithmen

11.1 Mit einem Iterator durch die Daten wandern
  11.1.1 Bauernregeln aufzählen
11.2 Dynamische Datenstrukturen
11.3 Die Klasse Vector
  11.3.1 Vektoren erzeugen
  11.3.2 Funktionen
  11.3.3 Arbeitsweise des internen Arrays
  11.3.4 Die Größe eines Felds
  11.3.5 Eine Aufzählung und gleichzeitiges Verändern
  11.3.6 Die Funktionalität eines Vektors erweitern
11.4 Stack, der Stapel
  11.4.1 Die Methoden vom Stack
  11.4.2 Das oberste Stack-Element duplizieren
  11.4.3 Ein Stack ist ein Vektor – Aha!
11.5 Die Klasse BitSet für Bitmengen
  11.5.1 BitSet anlegen und füllen
  11.5.2 Mengenorientierte Operationen
  11.5.3 Funktionsübersicht
  11.5.4 Primzahlen in einem BitSet verwalten
11.6 Die Klasse Hashtable und assoziative Speicher
  11.6.1 Ein Objekt der Klasse Hashtable erzeugen
  11.6.2 Einfügen und Abfragen der Datenstruktur
  11.6.3 Die Arbeitsweise einer Hashtabelle
  11.6.4 Aufzählen der Elemente
  11.6.5 Ausgabe der Hashtabelle und Gleichheitstest
  11.6.6 Klonen
11.7 Die abstrakte Klasse Dictionary
  11.7.1 Zugriff und Abfrage
  11.7.2 Metainformationen
  11.7.3 Iterationen über die Elemente
11.8 Die Properties-Klasse
  11.8.1 Über die Klasse Properties
  11.8.2 put(), get() und getProperties()
  11.8.3 Eigenschaften ausgeben
  11.8.4 Systemeigenschaften der Java-Umgebung
  11.8.5 Browser-Version abfragen
  11.8.6 Properties von der Konsole setzen
11.9 Queue, die Schlange
11.10 Die Collection API
  11.10.1 Die Schnittstelle Collection
  11.10.2 Schnittstellen, die Collection erweitern
  11.10.3 Abstrakte Basisklassen für Container
  11.10.4 Konkrete Container-Klassen
  11.10.5 Unterschiede zu den älteren Datenstrukturen und Synchronisation
  11.10.6 Das erste Programm mit Container-Klassen
  11.10.7 Iteratoren
  11.10.8 Der Comparator
  11.10.9 toArray() von Collection verstehen – Chance für eine Falle erkennen
11.11 Listen
  11.11.1 AbstractList
  11.11.2 Optionale Methoden
  11.11.3 ArrayList
  11.11.4 LinkedList
11.12 Algorithmen
  11.12.1 Datenmanipulation
  11.12.2 Größten und kleinsten Wert einer Collection finden
  11.12.3 Sortieren
  11.12.4 Elemente in der Collection suchen
11.13 Typsichere Datenstrukturen
11.14 Ein Design-Pattern durch Beobachten von Änderungen
  11.14.1 Design-Pattern
  11.14.2 Das Beobachter-Pattern (Observer/Observable)
Galileo Computing

12 Datenströme und Dateien

12.1 Dateien und Verzeichnisse
  12.1.1 Dateien und Verzeichnisse mit der Klasse File
  12.1.2 Dateieigenschaften und -attribute
  12.1.3 Umbenennen, Verzeichnisse anlegen und Datei löschen
  12.1.4 Die Wurzel aller Verzeichnisse
  12.1.5 Verzeichnisse listen und Dateien filtern
  12.1.6 Implementierungsmöglichkeiten für die Klasse File
  12.1.7 Verzeichnisse nach Dateien rekursiv durchsuchen
12.2 Dateien mit wahlfreiem Zugriff
  12.2.1 Eine RandomAccessFile öffnen
  12.2.2 Aus dem RandomAccessFile lesen
  12.2.3 Hin und her in der Datei
  12.2.4 Die Länge des RandomAccessFile
12.3 Übersicht über wichtige Stream- und Writer/Reader
  12.3.1 Die abstrakten Basisklassen
12.4 Eingabe- und Ausgabe-Klassen: InputStream und OutputStream
  12.4.1 Die Klasse OutputStream
  12.4.2 Ein Datenschlucker
  12.4.3 Die Eingabeklasse InputStream
  12.4.4 Anwenden der Klasse FileInputStream
  12.4.5 Anwendung der Klasse FileOutputStream
  12.4.6 Kopieren von Dateien
  12.4.7 Daten filtern durch FilterInputStream und FilterOutputStream
  12.4.8 Der besondere Filter PrintStream
  12.4.9 System Standard-Ein- und Ausgabe und Input- bzw. PrintStreams
  12.4.10 Bytes in den Strom mit ByteArrayOutputStream
  12.4.11 Ströme zusammensetzen mit SequenceInputStream
12.5 Die Unterklassen von Writer
  12.5.1 Die abstrakte Klasse Writer
  12.5.2 Datenkonvertierung durch den OutputStreamWriter
  12.5.3 In Dateien schreiben mit der Klasse FileWriter
  12.5.4 StringWriter und CharArrayWriter
  12.5.5 Gepufferte Ausgabe durch BufferedWriter
  12.5.6 Ausgabemöglichkeiten durch PrintWriter erweitern
  12.5.7 Daten mit FilterWriter filtern
  12.5.8 Die abstrakte Basisklasse Reader
  12.5.9 Automatische Konvertierungen mit dem InputStreamReader
  12.5.10 Dateien lesen mit der Klasse FileReader
  12.5.11 StringReader und CharArrayReader
  12.5.12 Schachteln von Eingabe-Streams
  12.5.13 Gepufferte Eingaben mit der Klasse BufferedReader
  12.5.14 LineNumberReader zählt automatisch Zeilen mit
  12.5.15 Eingaben filtern mit der Klasse FilterReader
  12.5.16 Daten zurücklegen mit der Klasse PushbackReader
12.6 Kommunikation zwischen Threads mit Pipes
  12.6.1 PipedOutputStream und PipedInputStream
  12.6.2 PipedWriter und PipedReader
  12.6.3 Datenströme komprimieren
  12.6.4 Zip-Archive
12.7 Prüfsummen
  12.7.1 Die Schnittstelle Checksum
  12.7.2 Die Klasse CRC32
  12.7.3 Die Adler32-Klasse
12.8 Persistente Objekte und Serialisierung
  12.8.1 Objekte speichern
  12.8.2 Objekte lesen
  12.8.3 Die Schnittstelle Serializable
  12.8.4 Ian Wilmut und tiefe Objektkopien
  12.8.5 Felder sind implizit Serializable
  12.8.6 Versionenverwaltung und die SUID
  12.8.7 Beispiele aus den Standard-Klassen
  12.8.8 Serialisieren in XML-Dateien
  12.8.9 JSX (Java Serialization to XML)
  12.8.10 XML-API von Sun
12.9 Die Logging-API
Galileo Computing

13 Die eXtensible Markup Language (XML)

13.1 Auszeichnungssprachen
  13.1.1 Die Standard Generalized Markup Language (SGML)
  13.1.2 Extensible Markup Language (XML)
13.2 Eigenschaften von XML-Dokumenten
  13.2.1 Elemente und Attribute
  13.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten
  13.2.3 Schema, eine Alternative zu DTD
  13.2.4 Namensraum (Namespace)
  13.2.5 XML-Applikationen
13.3 Die Java APIs für XML
  13.3.1 Das Document Object Model (DOM)
  13.3.2 Simple API for XML Parsing (SAX)
  13.3.3 Java Document Object Model (JDOM)
13.4 XML-Dateien mit JDOM verarbeiten
  13.4.1 JDOM beziehen
  13.4.2 Paketübersicht
  13.4.3 Die Document-Klasse
  13.4.4 Eingaben aus der Datei lesen
  13.4.5 Das Dokument als XML-Datei ausgeben
  13.4.6 Der Dokumententyp
  13.4.7 Elemente
  13.4.8 Zugriff auf Elementinhalte
  13.4.9 Liste mit Unterelementen erzeugen
  13.4.10 Neue Elemente einfügen und ändern
  13.4.11 Attributinhalte lesen und ändern
13.5 JAXP als Java-Schnittstelle zu XML
  13.5.1 Einführung in XSLT
  13.5.2 Umwandlung von XML-Dateien mit JDOM und JAXP
Galileo Computing

14 Grafikprogrammierung mit dem AWT

14.1 Das abstrakte Window-Toolkit
  14.1.1 Java Foundation Classes
14.2 Fenster unter grafischen Oberflächen
  14.2.1 Fenster öffnen
  14.2.2 Größe und Position des Fensters verändern
  14.2.3 Fenster und Dialog-Dekoration
14.3 Das Toolkit
  14.3.1 Einen Hinweis beepen
14.4 Grundlegendes zum Zeichnen
  14.4.1 Die paint()-Methode
  14.4.2 Auffordern zum Neuzeichnen mit repaint()
14.5 Punkte, Linien und Rechtecke aller Art
  14.5.1 Linien
  14.5.2 Rechtecke
14.6 Alles was rund ist
14.7 Polygone und Polylines
  14.7.1 Die Polygon-Klasse
  14.7.2 N-Ecke zeichnen
  14.7.3 Vollschlanke Linien zeichnen
14.8 Zeichenketten schreiben
  14.8.1 Einen neuen Zeichensatz bestimmen
  14.8.2 Zeichensätze des Systems ermitteln
  14.8.3 Die Klasse FontMetrics
  14.8.4 True Type Fonts
14.9 Clipping-Operationen
14.10 Farben
  14.10.1 Zufällige Farbblöcke zeichnen
  14.10.2 Farbanteile zurückgeben
  14.10.3 Vordefinierte Farben
  14.10.4 Farben aus Hexadezimalzahlen erzeugen
  14.10.5 Einen helleren oder dunkleren Farbton wählen
  14.10.6 Farbmodelle HSB und RGB
  14.10.7 Die Farben des Systems
14.11 Bilder anzeigen und Grafiken verwalten
  14.11.1 Eine Grafik zeichnen
  14.11.2 Grafiken zentrieren
  14.11.3 Laden von Bildern mit dem MediaTracker beobachten
  14.11.4 Kein Flackern durch Double-Buffering
  14.11.5 Bilder skalieren
14.12 Programmicon setzen
  14.12.1 VolatileImage
14.13 Grafiken speichern
  14.13.1 Bilder im GIF-Format speichern
  14.13.2 Gif speichern mit dem ACME-Paket
  14.13.3 JPEG-Dateien mit dem Sun-Paket schreiben
  14.13.4 Java Image Management Interface (JIMI)
14.14 Von Produzenten, Konsumenten und Beobachtern
  14.14.1 Producer und Consumer für Bilder
  14.14.2 Beispiel für die Übermittlung von Daten
  14.14.3 Bilder selbst erstellen
  14.14.4 Die Bildinformationen wieder auslesen
14.15 Filter
  14.15.1 Grundlegende Eigenschaft von Filtern
  14.15.2 Konkrete Filterklassen
  14.15.3 Mit CropImageFilter Teile ausschneiden
  14.15.4 Transparenz
14.16 Alles wird bunt mit Farbmodellen
  14.16.1 Die abstrakte Klasse ColorModel
  14.16.2 Farbwerte im Pixel mit der Klasse DirectColorModel
  14.16.3 Die Klasse IndexColorModel
14.17 Drucken
  14.17.1 Drucken mit dem einfachen Ansatz
  14.17.2 Ein PrintJob
  14.17.3 Drucken der Inhalte
  14.17.4 Komponenten drucken
  14.17.5 Den Drucker am Parallelport ansprechen
14.18 Java 2D API
  14.18.1 Grafische Objekte zeichnen
  14.18.2 Geometrische Objekte durch Shape gekennzeichnet
  14.18.3 Eigenschaften geometrischer Objekte
  14.18.4 Transformationen mit einem AffineTransform-Objekt
14.19 Graphic Layers Framework
14.20 Grafikverarbeitung ohne grafische Oberfläche
  14.20.1 Xvfb-Server
  14.20.2 Pure Java AWT Toolkit (PJA)
Galileo Computing

15 Komponenten, Ereignisse und Container

15.1 Peer-Klassen und Lightweight-Komponenten
15.2 Es tut sich was – Ereignisse beim AWT
  15.2.1 Was ist ein Ereignis?
  15.2.2 Die Klasse AWTEvent
  15.2.3 Events auf verschiedenen Ebenen
  15.2.4 Ereignisquellen, -senken und Horcher (Listener)
  15.2.5 Listener implementieren
  15.2.6 Listener bei Ereignisauslöser anmelden
15.3 Varianten, das Fenster zu schließen