Inhalt
Vorwort
1 Schon wieder eine neue Sprache?
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Exceptions
8 Die Funktionsbibliothek
9 Threads und nebenläufige Programmierung
10 Raum und Zeit
11 Datenstrukturen und Algorithmen
12 Datenströme und Dateien
13 Die eXtensible Markup Language (XML)
14 Grafikprogrammierung mit dem AWT
15 Komponenten, Ereignisse und Container
16 Let’s Swing
17 Netzwerkprogrammierung
18 Servlets und Java Server Pages
19 RMI
20 Applets
21 Datenbankmanagement mit JDBC
22 Reflection
23 Komponenten durch Bohnen
24 Java Native Interface (JNI)
25 Sicherheitskonzepte
26 Dienstprogramme für die Java-Umgebung
27 Style-Guide
A Die Java-Grammatik
B Quellenverzeichnis
Index
Download (ca. 6,2 MB)
Galileo Computing /
<openbook> /
JavaInsel
vor >>
Java ist auch eine Insel
von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Inhalt
Vorwort
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
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
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()
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
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
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
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
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
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
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
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)
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
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
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)
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