›Java ist auch eine Insel‹ 8. Auflage
Vorwort
Vorwort zur 6. AuflageVorwort zur 7. Auflage
1 Java ist auch eine Sprache
1.1 Der erste Kontakt1.2 Historischer Hintergrund
1.3 Eigenschaften von Java
1.3.1 Bytecode und die virtuelle Maschine
1.3.2 Objektorientierung in Java
1.3.3 Java-Security-Modell
1.3.4 Zeiger und Referenzen
1.3.5 Bring den Müll raus, Garbage-Collector!
1.3.6 Ausnahmebehandlung
1.3.7 Kein Präprozessor für Textersetzungen
1.3.8 Keine überladenen Operatoren
1.3.9 Java als Sprache, Laufzeitumgebung und Bibliothek
1.3.10 Wofür sich Java nicht eignet
1.3.11 Java im Vergleich zu anderen Sprachen
1.3.12 Java ist Open Source
1.4 Die Rolle von Java im Web
1.4.1 Vollwertige Applikationen statt Applets
1.5 Die Java Platform Standard Edition (Java SE)
1.5.1 JDK und JRE
1.5.2 Java-Versionen
1.5.3 Java für die Kleinen
1.5.4 Java für die Großen
1.5.5 Installationsanleitung für Java SE
1.6 Das erste Programm compilieren und testen
1.6.1 Ein Quadratzahlen-Programm
1.6.2 Der Compilerlauf
1.6.3 Die Laufzeitumgebung
1.6.4 Häufige Compiler- und Interpreterprobleme
1.7 Entwicklungsumgebungen im Allgemeinen
1.7.1 Die Entwicklungsumgebung Eclipse
1.7.2 NetBeans von Sun
1.7.3 Ein Wort zu Microsoft, Java und zu J++
1.8 Eclipse im Speziellen
1.8.1 Eclipse starten
1.8.2 Das erste Projekt anlegen
1.8.3 Eine Klasse hinzufügen
1.8.4 Übersetzen und Ausführen
1.8.5 JDK statt JRE
1.8.6 Start eines Programms ohne Speicheraufforderung
1.8.7 Projekt einfügen oder Workspace für die Aufgaben wechseln
1.8.8 Plugins für Eclipse
1.8.9 Eclipse Web Tools Platform (WTP)
1.9 Zum Weiterlesen
2 Sprachbeschreibung
2.1 Elemente der Programmiersprache Java2.1.1 Textkodierung durch Unicode-Zeichen
2.1.2 Literale
2.1.3 Bezeichner
2.1.4 Reservierte Schlüsselwörter
2.1.5 Token
2.1.6 Kommentare
2.2 Anweisungen formen Programme
2.2.1 Anweisungen
2.2.2 Eine Klasse bildet den Rahmen
2.2.3 Die Reise beginnt am main()
2.2.4 Programme übersetzen und starten
2.2.5 Funktionsaufrufe als Ausdrücke und Anweisungen
2.2.6 print(), println() und printf() für Bildschirmausgaben
2.2.7 Modifizierer
2.2.8 Anweisungen und Blöcke
2.3 Datentypen
2.3.1 Primitive Datentypen im Überblick
2.3.2 Wahrheitswerte
2.3.3 Variablendeklarationen
2.3.4 Ganzzahlige Datentypen
2.3.5 Die Fließkommazahlen float und double
2.3.6 Alphanumerische Zeichen
2.4 Ausdrücke, Operanden und Operatoren
2.4.1 Zuweisungsoperator
2.4.2 Arithmetische Operatoren
2.4.3 Unäres Minus und Plus
2.4.4 Zuweisung mit Operation
2.4.5 Präfix- oder Postfix-Inkrement und -Dekrement
2.4.6 Die relationalen Operatoren und die Gleichheitsoperatoren
2.4.7 Logische Operatoren Und, Oder, Xor, Nicht
2.4.8 Rang der Operatoren in der Auswertungsreihenfolge
2.4.9 Die Typanpassung (das Casting)
2.4.10 Überladenes Plus für Strings
2.4.11 Was C(++)-Programmierer vermissen könnten
2.5 Bedingte Anweisungen oder Fallunterscheidungen
2.5.1 Die if-Anweisung
2.5.2 Die Alternative mit einer if/else-Anweisung wählen
2.5.3 Die switch-Anweisung bietet die Alternative
2.6 Schleifen
2.6.1 Die while-Schleife
2.6.2 Schleifenbedingungen und Vergleiche mit ==
2.6.3 Die do-while-Schleife
2.6.4 Die for-Schleife
2.6.5 Ausbruch planen mit break und Wiedereinstieg mit continue
2.6.6 break und continue mit Sprungmarken
2.7 Methoden einer Klasse
2.7.1 Bestandteil einer Funktion
2.7.2 Beschreibungen in der Java-API
2.7.3 Aufruf einer Methode
2.7.4 Methoden ohne Parameter
2.7.5 Statische Funktionen (Klassenmethoden)
2.7.6 Parameter, Argument und Wertübergabe
2.7.7 Methoden vorzeitig mit return beenden
2.7.8 Nicht erreichbarer Quellcode bei Funktionen
2.7.9 Rückgabewerte
2.7.10 Methoden überladen
2.7.11 Vorgegebener Wert für nicht aufgeführte Argumente
2.7.12 Finale lokale Variablen
2.7.13 Rekursive Funktionen
2.7.14 Die Türme von Hanoi
2.8 Weitere Operatoren
2.8.1 Bits und Bytes
2.8.2 Operationen auf Bit-Ebene
2.8.3 Die Verschiebeoperatoren
2.8.4 Ein Bit setzen, löschen, umdrehen und testen
2.8.5 Bit-Funktionen der Integer- und Long-Klasse
2.8.6 Der Bedingungsoperator
2.9 Einfache Benutzereingaben
2.10 Zum Weiterlesen
3 Klassen und Objekte
3.1 Objektorientierte Programmierung3.1.1 Warum überhaupt OOP?
3.1.2 Wiederverwertbarkeit
3.2 Eigenschaften einer Klasse
3.2.1 Die Klasse Point
3.3 Die UML (Unified Modeling Language)
3.3.1 Hintergrund und Geschichte zur UML
3.3.2 Wichtige Diagrammtypen der UML
3.4 Neue Objekte erzeugen
3.4.1 Anlegen eines Exemplars einer Klasse mit dem new-Operator
3.4.2 Deklarieren von Referenzvariablen
3.4.3 Zugriff auf Variablen und Methoden mit dem ».«
3.4.4 Konstruktoren nutzen
3.4.5 Die API-Dokumentation
3.5 Import und Pakete
3.6 Mit Referenzen arbeiten
3.6.1 Die null-Referenz
3.6.2 Zuweisungen bei Referenzen
3.6.3 Funktionen mit nicht-primitiven Parametern
3.7 Identität und Gleichheit
3.7.1 Identität von Objekten
3.7.2 Gleichheit und die Methode equals()
3.8 Wrapper-Klassen und Autoboxing
3.8.1 Die Basisklasse Number für numerische Wrapper-Objekte
3.8.2 Die Klasse Integer
3.8.3 Unterschiedliche Ausgabeformate
3.8.4 Autoboxing: Boxing und Unboxing
3.8.5 Die Boolean-Klasse
3.8.6 Die Klassen Double und Float für Fließkommazahlen
3.9 Arrays
3.9.1 Deklaration von Arrays
3.9.2 Arrays mit Inhalt
3.9.3 Die Länge eines Arrays über das Attribut length
3.9.4 Zugriff auf die Elemente über den Index
3.9.5 Array-Objekte erzeugen
3.9.6 Fehler bei Arrays
3.9.7 Vorinitialisierte Arrays
3.9.8 Die erweiterte for-Schleife
3.9.9 Arrays mit nicht-primitiven Elementen
3.9.10 Mehrdimensionale Arrays
3.9.11 Die Wahrheit über die Array-Initialisierung
3.9.12 Mehrere Rückgabewerte
3.9.13 Methode mit variabler Argumentanzahl (Vararg)
3.9.14 Klonen kann sich lohnen – Arrays vermehren
3.9.15 Feldinhalte kopieren
3.9.16 Die Klasse Arrays zum Vergleichen, Füllen und Suchen
3.10 Der Einstiegspunkt für das Laufzeitsystem main()
3.10.1 Kommandozeilen-Argumente verarbeiten
3.10.2 Der Rückgabewert von main() und System.exit()
3.11 Eigene Pakete schnüren
3.11.1 Die package-Anweisung
3.11.2 Importieren von Klassen mit import
3.11.3 Hierarchische Strukturen und das Default-Package
3.11.4 Paketnamen
3.11.5 Klassen mit gleichen Namen in unterschiedlichen Paketen
3.11.6 Statisches Import
3.11.7 Eine Verzeichnisstruktur für eigene Projekte
3.12 Zum Weiterlesen
4 Der Umgang mit Zeichenketten
4.1 Einzelne Zeichen mit der Character-Klasse behandeln4.2 Strings und deren Anwendung
4.2.1 String-Literale als String-Objekte für konstante Zeichenketten
4.2.2 String-Länge und Test auf Leerstring
4.2.3 Nach enthaltenen Zeichen und Zeichenfolgen suchen
4.2.4 Gut, dass wir verglichen haben
4.2.5 String-Teile extrahieren
4.2.6 Strings anhängen, Groß-/Kleinschreibung und Leerraum
4.2.7 Suchen und ersetzen
4.2.8 String-Objekte mit Konstruktoren neu anlegen
4.3 Konvertieren zwischen Primitiven und Strings
4.3.1 Unterschiedliche Typen in Zeichenketten konvertieren
4.3.2 String in primitives Element konvertieren
4.4 Veränderbare Zeichenketten mit StringBuffer/StringBuilder
4.4.1 Anlegen von StringBuffer/StringBuilder-Objekten
4.4.2 Die Länge eines StringBuffer/-Builder-Objekts
4.4.3 Daten anhängen
4.4.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen
4.4.5 Vergleichen von String/StringBuffer/StringBuilder
4.4.6 hashCode() bei StringBuffer/StringBuilder
4.5 Sprachabhängiges Vergleichen und Normalisierung
4.5.1 Die Klasse Collator
4.5.2 Effiziente interne Speicherung für die Sortierung
4.5.3 Normalisierung
4.6 Reguläre Ausdrücke
4.6.1 Die Klassen Pattern und Matcher
4.6.2 Mit MatchResult alle Ergebnisse einsammeln
4.7 Zerlegen von Zeichenketten
4.7.1 Splitten von Zeichenketten mit split()
4.7.2 split() in Pattern
4.7.3 Die Klasse Scanner
4.7.4 StringTokenizer
4.7.5 BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner
4.8 Zeichenkodierungen und Base64
4.8.1 Über die Klasse String Kodierungen vornehmen
4.8.2 Konvertieren mit OutputStreamWriter-Klassen
4.8.3 Das Paket java.nio.charset
4.8.4 Base64-Kodierung
4.9 Formatieren von Ausgaben
4.9.1 Formatieren mit format() aus String
4.9.2 Die Format-Klassen im Überblick
4.9.3 Zahlen, Prozente und Währungen mit NumberFormat und DecimalFormat formatieren
4.9.4 Ausgaben mit MessageFormat formatieren
4.10 Zum Weiterlesen
5 Mathematisches
5.1 Repräsentation ganzer Zahlen – das Zweierkomplement5.2 Fließkommaarithmetik in Java
5.2.1 Mantisse und Exponent
5.2.2 Spezialwerte Unendlich, Null, NaN
5.3 Wertebereich eines Typs und Überlaufkontrolle
5.3.1 Behandlung des Überlaufs
5.4 Die Eigenschaften der Klasse Math
5.4.1 Attribute
5.4.2 Absolutwerte und Maximum/Minimum
5.4.3 Winkelfunktionen
5.4.4 Runden von Werten
5.4.5 Wurzel und Exponentialfunktionen
5.4.6 Der Logarithmus
5.4.7 Rest der ganzzahligen Division
5.4.8 Zufallszahlen
5.5 Mathe bitte strikt
5.5.1 Strikt Fließkomma mit strictfp
5.5.2 Die Klassen Math und StrictMath
5.6 Die Random-Klasse
5.6.1 Objekte aufbauen und der Seed
5.6.2 Zufallszahlen erzeugen
5.6.3 Pseudo-Zufallszahlen in der Normalverteilung
5.7 Große Zahlen
5.7.1 Die Klasse BigInteger
5.7.2 Funktionen von BigInteger
5.7.3 Ganz lange Fakultäten
5.7.4 Große Fließkommazahlen mit BigDecimal
5.7.5 Mit MathContext komfortabel die Rechengenauigkeit setzen
5.8 Zum Weiterlesen
6 Eigene Klassen schreiben
6.1 Eigene Klassen mit Eigenschaften deklarieren6.1.1 Attribute deklarieren
6.1.2 Methoden deklarieren
6.1.3 Die this-Referenz
6.2 Privatsphäre und Sichtbarkeit
6.2.1 Für die Öffentlichkeit: public
6.2.2 Paketsichtbar
6.2.3 Kein Public Viewing – Passwörter sind privat
6.2.4 Wieso nicht freie Methoden und Variablen für alle?
6.2.5 Privat ist nicht ganz privat: Es kommt darauf an, wer’s sieht
6.2.6 Zugriffsmethoden für Attribute deklarieren
6.2.7 Setter und Getter nach der JavaBeans-Spezifikation
6.3 Statische Methoden und statische Attribute
6.3.1 Warum statische Eigenschaften sinnvoll sind
6.3.2 Statische Eigenschaften mit static
6.3.3 Statische Eigenschaften über Referenzen nutzen?
6.3.4 Warum die Groß- und Kleinschreibung wichtig ist
6.3.5 Statische Eigenschaften und Objekteigenschaften
6.3.6 Statische Variablen zum Datenaustausch
6.3.7 Statische Blöcke als Klasseninitialisierer
6.4 Konstanten und Aufzählungen
6.4.1 Konstanten über öffentliche statische finale Variablen
6.4.2 Eincompilierte Belegungen der Klassenvariablen
6.4.3 Typ(un)sicherere Aufzählungen
6.4.4 Aufzählungen mit enum
6.5 Objekte anlegen und zerstören
6.5.1 Konstruktoren schreiben
6.5.2 Der Standard-Konstruktor
6.5.3 Parametrisierte und überladene Konstruktoren
6.5.4 Konstruktor nimmt ein Objekt vom eigenen Typ an (Copy-Konstruktor)
6.5.5 Einen anderen Konstruktor der gleichen Klasse aufrufen
6.5.6 Initialisierung der Objekt- und Klassenvariablen
6.5.7 Finale Werte im Konstruktor und in statischen Blöcken setzen
6.5.8 Exemplarinitialisierer (Instanzinitialisierer)
6.5.9 Ihr fehlt uns nicht – der Garbage-Collector
6.5.10 Implizit erzeugte String-Objekte
6.5.11 Private Konstruktoren, Utility-Klassen, Singleton, Fabriken
6.6 Assoziationen zwischen Objekten
6.6.1 Unidirektionale 1:1-Beziehung
6.6.2 Bidirektionale 1:1-Beziehungen
6.6.3 Unidirektionale 1:n-Beziehung
6.7 Vererbung
6.7.1 Vererbung in Java
6.7.2 Spielobjekte modelliert
6.7.3 Einfach- und Mehrfachvererbung
6.7.4 Sichtbarkeit protected
6.7.5 Konstruktoren in der Vererbung und super
6.7.6 Automatische und explizite Typanpassung
6.7.7 Das Substitutionsprinzip
6.7.8 Typen mit dem binären Operator instanceof testen
6.7.9 Methoden überschreiben
6.7.10 Mit super an die Eltern
6.7.11 Kovariante Rückgabetypen
6.7.12 Array-Typen und Kovarianz
6.7.13 Zusammenfassung zur Sichtbarkeit
6.8 Dynamisches Binden
6.8.1 Unpolymorph bei privaten, statischen und finalen Methoden
6.8.2 Polymorphie bei Konstruktoraufrufen
6.8.3 Finale Klassen
6.8.4 Nicht überschreibbare (finale) Methoden
6.9 Abstrakte Klassen und abstrakte Methoden
6.9.1 Abstrakte Klassen
6.9.2 Abstrakte Methoden
6.10 Schnittstellen
6.10.1 Deklarieren von Schnittstellen
6.10.2 Implementieren von Schnittstellen
6.10.3 Markierungsschnittstellen
6.10.4 Ein Polymorphie-Beispiel mit Schnittstellen
6.10.5 Die Mehrfachvererbung bei Schnittstellen
6.10.6 Keine Kollisionsgefahr bei Mehrfachvererbung
6.10.7 Erweitern von Interfaces – Subinterfaces
6.10.8 Vererbte Konstanten bei Schnittstellen
6.10.9 Schnittstellenmethoden, die nicht implementiert werden müssen
6.10.10 Abstrakte Klassen und Schnittstellen im Vergleich
6.11 Geschachtelte (innere) Klassen, Schnittstellen, Aufzählungen
6.11.1 Statische innere Klassen und Schnittstellen
6.11.2 Mitglieds- oder Elementklassen
6.11.3 Lokale Klassen
6.11.4 Anonyme innere Klassen
6.11.5 this und Vererbung
6.12 Generische Datentypen
6.12.1 Einfache Klassenschablonen
6.12.2 Einfache Methodenschablonen
6.12.3 Umsetzen der Generics, Typlöschung und Raw-Types
6.12.4 Einschränken der Typen
6.12.5 Generics und Vererbung, Invarianz
6.12.6 Wildcards
6.13 Die Spezial-Oberklasse Enum
6.13.1 Methoden auf Enum-Objekten
6.13.2 enum mit eigenen Konstruktoren und Methoden
6.14 Dokumentationskommentare mit JavaDoc
6.14.1 Einen Dokumentationskommentar setzen
6.14.2 Mit javadoc eine Dokumentation erstellen
6.14.3 HTML-Tags in Dokumentationskommentaren
6.14.4 Generierte Dateien
6.14.5 Dokumentationskommentare im Überblick
6.14.6 JavaDoc und Doclets
6.14.7 Veraltete (deprecated) Klassen, Konstruktoren und Methoden
7 Angewandte Objektorientierung
7.1 Schnittstellen in der Anwendung7.1.1 CharSequence als Beispiel einer Schnittstelle
7.1.2 Die Schnittstelle Iterable
7.1.3 Funktionszeiger
7.1.4 Implementierung einer verketteten Liste
7.2 Design-Pattern (Entwurfsmuster)
7.2.1 Design-Pattern
7.2.2 Das Beobachter-Pattern (Observer/Observable)
7.2.3 Ereignisse über Listener
7.2.4 Multicast und Unicast
7.3 JavaBean
7.3.1 Properties (Eigenschaften)
7.3.2 Einfache Eigenschaften
7.3.3 Indizierte Eigenschaften
7.3.4 Gebundene Eigenschaften
7.3.5 Veto-Eigenschaften – dagegen!
8 Exceptions
8.1 Problembereiche einzäunen8.1.1 Exceptions in Java mit try und catch
8.1.2 Eine Datei mit RandomAccessFile auslesen
8.1.3 Ablauf einer Ausnahmesituation
8.1.4 Wiederholung abgebrochener Bereiche
8.1.5 throws im Methodenkopf angeben
8.1.6 Abschlussbehandlung mit finally
8.1.7 Nicht erreichbare catch-Klauseln
8.2 Die Klassenhierarchie der Fehler
8.2.1 Die Exception-Hierarchie
8.2.2 Oberausnahmen auffangen
8.2.3 Alles geht als Exception durch
8.2.4 RuntimeException muss nicht aufgefangen werden
8.2.5 Harte Fehler: Error
8.3 Auslösen eigener Exceptions
8.3.1 Mit throw Ausnahmen auslösen
8.3.2 Neue Exception-Klassen deklarieren
8.3.3 Abfangen und Weiterleiten
8.3.4 Geschachtelte Ausnahmen
8.3.5 Rückgabewerte bei ausgelösten Ausnahmen
8.4 Der Stack-Trace
8.4.1 Stack-Trace erfragen
8.5 Assertions
8.5.1 Assertions in eigenen Programmen nutzen
8.5.2 Assertions aktivieren
9 Die Funktionsbibliothek
9.1 Die Java-Klassenphilosophie9.1.1 Übersicht über die Pakete der Standardbibliothek
9.2 Object ist die Mutter aller Oberklassen
9.2.1 Klassenobjekte
9.2.2 Objektidentifikation mit toString()
9.2.3 Objektgleichheit mit equals() und Identität
9.2.4 Klonen eines Objekts mit clone()
9.2.5 Hashcodes über hashCode() liefern
9.2.6 Aufräumen mit finalize()
9.2.7 Synchronisation
9.3 Klassenlader (Class Loader)
9.3.1 Woher die kleinen Klassen kommen
9.3.2 Setzen des Klassenpfades
9.3.3 Die wichtigsten drei Typen von Klassenladern
9.3.4 Der java.lang.ClassLoader
9.3.5 Hot Deployment mit dem URL-ClassLoader
9.3.6 Das jre/lib/endorsed-Verzeichnis
9.3.7 getContextClassLoader() vom Thread
9.4 Die Utility-Klasse System und Properties
9.4.1 Systemeigenschaften der Java-Umgebung
9.4.2 line.separator
9.4.3 Browser-Version abfragen
9.4.4 Property von der Konsole aus setzen
9.4.5 Umgebungsvariablen des Betriebssystems
9.4.6 Einfache Zeitmessung und Profiling
9.5 Ausführen externer Programme und Skripte
9.5.1 ProcessBuilder und Prozesskontrolle mit Process
9.5.2 Einen Browser/E-Mail-Client/Editor aufrufen
9.5.3 Ausführen von Skripten
9.6 Benutzereinstellungen
9.6.1 Benutzereinstellungen in Windows-Registry oder XML-Dokumenten
9.6.2 Einträge einfügen, auslesen und löschen
9.6.3 Auslesen der Daten und Schreiben in anderem Format
9.6.4 Auf Ereignisse horchen
9.6.5 Zugriff auf die gesamte Windows-Registry
9.7 Musik abspielen
9.7.1 Die Arbeit mit AudioClip
9.7.2 Java Sound API
9.8 Annotationen
9.8.1 Annotationstypen
9.8.2 Common Annotations
9.8.3 Annotationen für Web-Services
9.8.4 Annotationen für XML-Mapping
9.9 Zum Weiterlesen
10 Threads und nebenläufige Programmierung
10.1 Nebenläufigkeit10.1.1 Threads und Prozesse
10.1.2 Wie parallele Programme die Geschwindigkeit steigern können
10.1.3 Was Java für Nebenläufigkeit alles bietet
10.2 Threads erzeugen
10.2.1 Threads über die Schnittstelle Runnable implementieren
10.2.2 Thread mit Runnable starten
10.2.3 Der Name eines Threads
10.2.4 Die Klasse Thread erweitern
10.2.5 Wer bin ich?
10.3 Die Zustände eines Threads
10.3.1 Threads schlafen
10.3.2 Mit yield() auf Rechenzeit verzichten
10.3.3 Das Ende eines Threads
10.3.4 UncaughtExceptionHandler für unbehandelte Ausnahmen
10.3.5 Einen Thread höflich mit Interrupt beenden
10.3.6 Der stop() von außen und die Rettung mit ThreadDeath
10.3.7 Ein Rendezvous mit join()
10.3.8 Barrier und Austausch mit Exchanger
10.3.9 Arbeit niederlegen und wieder aufnehmen
10.3.10 Priorität
10.3.11 Der Thread ist ein Dämon
10.4 Der Ausführer (Executor) kommt
10.4.1 Die Schnittstelle Executor
10.4.2 Die Thread-Pools
10.4.3 Threads mit Rückgabe über Callable
10.4.4 Mehrere Callable abarbeiten
10.4.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen
10.5 Synchronisation über kritische Abschnitte
10.5.1 Gemeinsam genutzte Daten
10.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
10.5.3 Punkte parallel initialisieren
10.5.4 i++ sieht atomar aus, ist es aber nicht
10.5.5 Kritische Abschnitte schützen
10.5.6 Schützen mit ReentrantLock
10.5.7 Synchronisieren mit synchronized
10.5.8 Synchronized-Methoden der Klasse StringBuffer
10.5.9 Mit synchronized synchronisierte Blöcke
10.5.10 Dann machen wir doch gleich alles synchronisiert!
10.5.11 Lock-Freigabe im Fall von Exceptions
10.5.12 Mit synchronized nachträglich synchronisieren
10.5.13 Monitore sind reentrant – gut für die Geschwindigkeit
10.5.14 Synchronisierte Methodenaufrufe zusammenfassen
10.5.15 Deadlocks
10.6 Synchronisation über Warten und Benachrichtigen
10.6.1 Die Schnittstelle Condition
10.6.2 Beispiel: Erzeuger-Verbraucher-Programm
10.6.3 Warten mit wait() und Aufwecken mit notify()
10.6.4 Falls der Lock fehlt: IllegalMonitorStateException
10.6.5 Semaphor
10.7 Atomare Operationen und frische Werte mit volatile
10.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
10.7.2 Das Paket java.util.concurrent.atomic
10.8 Mit dem Thread verbundene Variablen
10.8.1 ThreadLocal
10.8.2 InheritableThreadLocal
10.9 Gruppen von Threads in einer Thread-Gruppe
10.9.1 Aktive Threads in der Umgebung
10.9.2 Etwas über die aktuelle Thread-Gruppe herausfinden
10.9.3 Threads in einer Thread-Gruppe anlegen
10.9.4 Methoden von Thread und ThreadGroup im Vergleich
10.10 Zeitgesteuerte Abläufe
10.10.1 Die Klassen Timer und TimerTask
10.10.2 Job-Scheduler Quartz
10.11 Einen Abbruch der virtuellen Maschine erkennen
10.12 Zum Weiterlesen
11 Raum und Zeit
11.1 Weltzeit11.2 Wichtige Datum-Klassen im Überblick
11.3 Sprachen der Länder
11.3.1 Sprachen und Regionen über Locale-Objekte
11.4 Internationalisierung und Lokalisierung
11.4.1 ResourceBundle-Objekte und Ressource-Dateien
11.4.2 Ressource-Dateien zur Lokalisierung
11.4.3 Die Klasse ResourceBundle
11.4.4 Ladestrategie für ResourceBundle-Objekte
11.5 Zeitzonen
11.5.1 Zeitzonen durch die Klasse TimeZone repräsentieren
11.6 Die Klasse Date
11.6.1 Objekte erzeugen und Methoden nutzen
11.7 Calendar und GregorianCalendar
11.7.1 Die abstrakte Klasse Calendar
11.7.2 Der gregorianische Kalender
11.7.3 Ostertage
11.7.4 Abfragen und Setzen von Datumselementen
11.8 Formatieren und Parsen von Datumsangaben
11.8.1 Ausgaben mit printf()
11.8.2 Mit DateFormat und SimpleDateFormat formatieren
11.8.3 Parsen von Datumswerten
11.9 Zum Weiterlesen
12 Datenstrukturen und Algorithmen
12.1 Datenstrukturen und die Collection-API12.1.1 Designprinzip mit Schnittstellen, abstrakten Klassen, konkreten Klassen
12.1.2 Die Basis-Schnittstellen Collection und Map
12.1.3 Das erste Programm mit Container-Klassen
12.1.4 Die Schnittstelle Collection
12.1.5 Schnittstellen, die Collection erweitern, und Map
12.1.6 Konkrete Container-Klassen
12.1.7 Welche Klasse nehmen?
12.1.8 Generische Datentypen in der Collection-API
12.1.9 Die Schnittstelle Iterable und das erweiterte for
12.2 Mit einem Iterator durch die Daten wandern
12.2.1 Die Schnittstellen Enumeration und Iterator
12.2.2 Iteratoren von Sammlungen und das erweiterte for
12.2.3 Fail-Fast Iterator und die ConcurrentModificationException
12.3 Listen
12.3.1 ArrayList oder LinkedList? Speicherung im Feld oder in einer verketteten Liste
12.3.2 Die Schnittstelle List
12.3.3 ArrayList
12.3.4 LinkedList
12.3.5 Der Feld-Adapter Arrays.asList()
12.3.6 toArray() von Collection verstehen – die Gefahr einer Falle erkennen
12.3.7 Primitive Elemente in den Collection-Datenstrukturen
12.4 Vergleichen von Objekten
12.4.1 Die Schnittstellen Comparator und Comparable
12.4.2 Algorithmen mit Such- und Sortiermöglichkeiten
12.4.3 Den größten und kleinsten Wert einer Collection finden
12.4.4 Sortieren
12.5 Mengen (Sets)
12.5.1 HashSet
12.5.2 TreeSet – die Menge durch Bäume
12.5.3 LinkedHashSet
12.6 Stack (Kellerspeicher, Stapel)
12.6.1 Die Methoden von Stack
12.6.2 Ein Stack ist ein Vector – aha!
12.7 Queues (Schlangen) und Deques
12.7.1 Die Schnittstelle Queue
12.7.2 Blockierende Queues und Prioritätswarteschlangen
12.7.3 Deque-Klassen
12.8 Assoziative Speicher
12.8.1 Die Klassen HashMap und TreeMap
12.8.2 Einfügen und Abfragen der Datenstruktur
12.8.3 Die Bedeutung von equals(), hashCode() und IdentityHashMap
12.8.4 Elemente im Assoziativspeicher müssen unveränderbar bleiben
12.8.5 Aufzählungen und Sichten auf den Assoziativspeicher
12.8.6 Der Gleichheitstest, Hash-Wert und Klon einer Hash-Tabelle
12.8.7 Die Arbeitsweise einer Hash-Tabelle
12.8.8 Multi-Maps
12.9 Die Properties-Klasse
12.9.1 Properties setzen und lesen
12.9.2 Properties verketten
12.9.3 Eigenschaften ausgeben
12.9.4 Hierarchische Eigenschaften
12.9.5 Properties speichern
12.9.6 Klassenbeziehungen: Properties und Hashtable
12.10 Algorithmen in Collections
12.10.1 Listenoperationen: Ersetzen, Kopieren, Füllen, Umdrehen, Rotieren, Durchmischen
12.10.2 Mit der Halbierungssuche nach Elementen fahnden
12.10.3 Nicht-änderbare Datenstrukturen
12.10.4 Häufigkeit eines Elements
12.10.5 nCopies()
12.10.6 Singletons
12.11 Synchronisation der Datenstrukturen
12.11.1 Lock-Free-Algorithmen aus java.util.concurrent
12.11.2 Wrapper zur Synchronisation
12.11.3 CopyOnWriteArrayList und CopyOnWriteArraySet
12.12 Die Klasse BitSet für Bitmengen
12.12.1 Ein BitSet anlegen, füllen und erfragen
12.12.2 Mengenorientierte Operationen
12.12.3 Funktionsübersicht
12.12.4 Primzahlen in einem BitSet verwalten
13 Dateien und Datenströme
13.1 Datei und Verzeichnis13.1.1 Dateien und Verzeichnisse mit der Klasse File
13.1.2 Verzeichnis oder Datei? Existiert es?
13.1.3 Verzeichnis- und Dateieigenschaften/-attribute
13.1.4 Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher
13.1.5 Umbenennen und Verzeichnisse anlegen
13.1.6 Verzeichnisse listen und Dateien filtern
13.1.7 Dateien berühren, neue Dateien anlegen, temporäre Dateien
13.1.8 Dateien und Verzeichnisse löschen
13.1.9 Verzeichnisse nach Dateien iterativ durchsuchen
13.1.10 URL- und URI-Objekte aus einem File-Objekt ableiten
13.1.11 Mit Locking Dateien sperren
13.1.12 Sicherheitsprüfung
13.1.13 Mime-Typen mit dem JavaBeans Activation Framework (JAF)
13.1.14 Zugriff auf SMB-Server mit jCIFS
13.2 Dateien mit wahlfreiem Zugriff
13.2.1 Ein RandomAccessFile zum Lesen und Schreiben öffnen
13.2.2 Aus dem RandomAccessFile lesen
13.2.3 Schreiben mit RandomAccessFile
13.2.4 Die Länge des RandomAccessFile
13.2.5 Hin und her in der Datei
13.2.6 Wahlfreier Zugriff und Pufferung mit Unified I/O
13.3 Stream-Klassen und Reader/Writer am Beispiel von Dateien
13.3.1 Mit dem FileWriter Texte in Dateien schreiben
13.3.2 Zeichen mit der Klasse FileReader lesen
13.3.3 Kopieren mit FileOutputStream und FileInputStream
13.3.4 Das FileDescriptor-Objekt
13.4 Basisklassen für die Ein-/Ausgabe
13.4.1 Die abstrakten Basisklassen
13.4.2 Übersicht über Ein-/Ausgabeklassen
13.4.3 Die abstrakte Basisklasse OutputStream
13.4.4 Die Schnittstellen Closeable und Flushable
13.4.5 Ein Datenschlucker
13.4.6 Die abstrakte Basisklasse InputStream
13.4.7 Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar–Archiven laden
13.4.8 Ströme mit SequenceInputStream zusammensetzen
13.4.9 Die abstrakte Basisklasse Writer
13.4.10 Die Schnittstelle Appendable
13.4.11 Die abstrakte Basisklasse Reader
13.5 Formatierte Textausgaben
13.5.1 Die Klassen PrintWriter und PrintStream
13.5.2 System.out, System.err und System.in
13.5.3 Geschützte Passwort-Eingaben mit der Klasse Console
13.6 Schreiben und Lesen aus Strings und Byte-Feldern
13.6.1 Mit dem StringWriter ein String-Objekt füllen
13.6.2 CharArrayWriter
13.6.3 StringReader und CharArrayReader
13.6.4 Mit ByteArrayOutputStream in ein Byte-Feld schreiben
13.6.5 Mit ByteArrayInputStream aus einem Byte-Feld lesen
13.7 Datenströme filtern und verketten
13.7.1 Streams als Filter verketten
13.7.2 Gepufferte Ausgaben mit BufferedWriter und BufferedOutputStream
13.7.3 Gepufferte Eingaben mit BufferedReader und BufferedInputStream
13.7.4 LineNumberReader zählt automatisch Zeilen mit
13.7.5 Daten mit der Klasse PushbackReader zurücklegen
13.7.6 DataOutputStream/DataInputStream
13.7.7 Basisklassen für Filter
13.7.8 Die Basisklasse FilterWriter
13.7.9 Ein LowerCaseWriter
13.7.10 Eingaben mit der Klasse FilterReader filtern
13.8 Vermittler zwischen Byte-Streams und Unicode-Strömen
13.8.1 Datenkonvertierung durch den OutputStreamWriter
13.8.2 Automatische Konvertierungen mit dem InputStreamReader
13.9 Kommunikation zwischen Threads mit Pipes
13.9.1 PipedOutputStream und PipedInputStream
13.9.2 PipedWriter und PipedReader
13.10 Datenkompression
13.10.1 Java-Unterstützung beim Komprimieren und Zusammenpacken
13.10.2 Datenströme komprimieren
13.10.3 Zip-Archive
13.10.4 Jar-Archive
13.11 Prüfsummen
13.11.1 Die Schnittstelle Checksum
13.11.2 Die Klasse CRC32
13.11.3 Die Adler32-Klasse
13.12 Persistente Objekte und Serialisierung
13.12.1 Objekte mit der Standard-Serialisierung speichern und lesen
13.12.2 Zwei einfache Anwendungen der Serialisierung
13.12.3 Die Schnittstelle Serializable
13.12.4 Nicht serialisierbare Attribute aussparen
13.12.5 Das Abspeichern selbst in die Hand nehmen
13.12.6 Tiefe Objektkopien
13.12.7 Versionenverwaltung und die SUID
13.12.8 Wie die ArrayList serialisiert
13.12.9 Probleme mit der Serialisierung
13.12.10 Serialisieren in XML-Dateien
13.12.11 JavaBeans Persistence
13.12.12 XStream
13.13 Tokenizer
13.13.1 StreamTokenizer
13.13.2 CSV-(Comma Separated Values-)Dateien verarbeiten
13.14 Zum Weiterlesen
14 Die eXtensible Markup Language (XML)
14.1 Auszeichnungssprachen14.1.1 Die Standard Generalized Markup Language (SGML)
14.1.2 Extensible Markup Language (XML)
14.2 Eigenschaften von XML-Dokumenten
14.2.1 Elemente und Attribute
14.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten
14.2.3 Schema – eine Alternative zu DTD
14.2.4 Namensraum (Namespace)
14.2.5 XML-Applikationen
14.3 Die Java-APIs für XML
14.3.1 Das Document Object Model (DOM)
14.3.2 Simple API for XML Parsing (SAX)
14.3.3 Pull-API StAX
14.3.4 Java Document Object Model (JDOM)
14.3.5 JAXP als Java-Schnittstelle zu XML
14.3.6 DOM-Bäume einlesen mit JAXP
14.4 Serielle Verarbeitung mit StAX
14.4.1 Unterschiede der Verarbeitungsmodelle
14.4.2 XML-Dateien mit dem Cursor-Verfahren lesen
14.4.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten
14.4.4 Mit Filtern arbeiten
14.4.5 XML-Dokumente schreiben
14.5 Serielle Verarbeitung von XML mit SAX
14.5.1 Schnittstellen von SAX
14.5.2 SAX-Parser erzeugen
14.5.3 Die wichtigsten Methoden der Schnittstelle ContentHandler
14.5.4 ErrorHandler und EntityResolver
14.6 XML-Dateien mit JDOM verarbeiten
14.6.1 JDOM beziehen
14.6.2 Paketübersicht
14.6.3 Die Document-Klasse
14.6.4 Eingaben aus der Datei lesen
14.6.5 Das Dokument im XML-Format ausgeben
14.6.6 Der Dokumenttyp
14.6.7 Elemente
14.6.8 Zugriff auf Elementinhalte
14.6.9 Liste mit Unterelementen erzeugen
14.6.10 Neue Elemente einfügen und ändern
14.6.11 Attributinhalte lesen und ändern
14.6.12 XPath
14.7 Transformationen mit XSLT
14.7.1 Templates und XPath als Kernelemente von XSLT
14.7.2 Umwandlung von XML-Dateien mit JDOM und JAXP
14.8 Java Architecture for XML Binding (JAXB)
14.8.1 Beans für JAXB aufbauen
14.8.2 JAXBContext und die Marshaller/ Unmarshaller
14.9 HTML-Dokumente einlesen
14.10 Zum Weiterlesen
15 Grafische Oberflächen mit Swing
15.1 Das Abstract Window Toolkit und Swing15.1.1 Abstract Window Toolkit (AWT)
15.1.2 Java Foundation Classes
15.1.3 Was Swing von AWT unterscheidet
15.1.4 Die Klasse Toolkit
15.2 Fenster unter grafischen Oberflächen
15.2.1 Swing-Fenster darstellen
15.2.2 AWT-Fenster darstellen
15.2.3 Sichtbarkeit des Fensters
15.2.4 Größe und Position des Fensters verändern
15.2.5 Unterklassen der Fenster-Klassen bilden
15.2.6 Fenster- und Dialog-Dekoration
15.2.7 Dynamisches Layout während einer Größenänderung
15.3 Beschriftungen (JLabel)
15.3.1 Mehrzeiliger Text, HTML in der Darstellung
15.4 Icon und ImageIcon für Bilder auf Swing-Komponenten
15.4.1 Die Schnittstelle Icon
15.5 Es tut sich was – Ereignisse beim AWT
15.5.1 Die Klasse AWTEvent
15.5.2 Events auf verschiedenen Ebenen
15.5.3 Swings Ereignisquellen und Horcher (Listener)
15.5.4 Listener implementieren
15.5.5 Listener bei dem Ereignisauslöser anmelden/abmelden
15.5.6 Aufrufen der Listener im AWT-Event-Thread
15.5.7 Adapterklassen nutzen
15.5.8 Innere Mitgliedsklassen und innere anonyme Klassen
15.6 Schaltflächen
15.6.1 Normale Schaltflächen (JButton)
15.6.2 Der aufmerksame ActionListener
15.6.3 Basisklasse AbstractButton
15.6.4 Wechselknopf (JToggleButton)
15.7 Swing Action
15.7.1 javax.swing.Action
15.7.2 Eigenschaften der Action-Objekte
15.8 JComponent und Component als Basis aller Komponenten
15.8.1 Tooltips
15.8.2 Rahmen (Border)
15.8.3 Fokus und Navigation
15.8.4 Ereignisse jeder Komponente
15.8.5 Die Größe und Position einer Komponente
15.8.6 Komponenten-Ereignisse
15.8.7 Hinzufügen von Komponenten
15.8.8 UI-Delegate – der wahre Zeichner
15.8.9 Undurchsichtige (opak) Komponente
15.8.10 Properties und Listener für Änderungen
15.8.11 Swing-Beschriftungen eine andere Sprache geben
15.9 Container
15.9.1 Standardcontainer (JPanel)
15.9.2 Bereich mit automatischen Rollbalken (JScrollPane)
15.9.3 Reiter (JTabbedPane)
15.9.4 Teilung-Komponente (JSplitPane)
15.10 Alles Auslegungssache: die Layoutmanager
15.10.1 Übersicht über Layoutmanager
15.10.2 Zuweisen eines Layoutmanagers
15.10.3 Im Fluss mit FlowLayout
15.10.4 Mit BorderLayout in allen Himmelsrichtungen
15.10.5 Rasteranordnung mit GridLayout
15.10.6 Der GridBagLayout-Manager
15.10.7 Null-Layout
15.10.8 BoxLayout
15.10.9 Weitere Layoutmanager
15.11 Rollbalken und Schieberegler
15.11.1 Schieberegler (JSlider)
15.11.2 Rollbalken (JScrollBar)
15.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
15.12.1 Kontrollfelder (JCheckBox)
15.12.2 ItemSelectable, ItemListener und das ItemEvent
15.12.3 Sich gegenseitig ausschließende Optionen (JRadioButton)
15.13 Fortschritte bei Operationen überwachen
15.13.1 Fortschrittsbalken (JProgressBar)
15.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)
15.14 Menüs und Symbolleisten
15.14.1 Die Menüleisten und die Einträge
15.14.2 Menüeinträge definieren
15.14.3 Einträge durch Action-Objekte beschreiben
15.14.4 Mit der Tastatur: Mnemonics und Shortcut
15.14.5 Der Tastatur-Shortcut (Accelerator)
15.14.6 Tastenkürzel (Mnemonics)
15.14.7 Symbolleisten alias Toolbars
15.14.8 Popup-Menüs
15.14.9 System-Tray nutzen
15.15 Das Model-View-Controller-Konzept
15.16 Auswahlmenüs, Listen und Spinner
15.16.1 Auswahlmenü (JComboBox)
15.16.2 Zuordnung einer Taste mit einem Eintrag
15.16.3 Datumsauswahl
15.16.4 Listen (JList)
15.16.5 Drehfeld (JSpinner)
15.17 Texteingabefelder
15.17.1 Text in einer Eingabezeile
15.17.2 Die Oberklasse der Text-Komponenten (JTextComponent)
15.17.3 Geschützte Eingaben (JPasswordField)
15.17.4 Validierende Eingabefelder (JFormattedTextField)
15.17.5 Einfache mehrzeilige Textfelder (JTextArea)
15.17.6 Editor-Klasse (JEditorPane)
15.18 Tabellen (JTable)
15.18.1 Ein eigenes Tabellen-Model
15.18.2 Basisklasse für eigene Modelle (AbstractTableModel)
15.18.3 Vorgefertigtes Standard-Modell (DefaultTableModel)
15.18.4 Ein eigener Renderer für Tabellen
15.18.5 Zell-Editoren
15.18.6 Größe und Umrandung der Zellen
15.18.7 Spalteninformationen
15.18.8 Tabellenkopf von Swing-Tabellen
15.18.9 Selektionen einer Tabelle
15.18.10 Automatisches Sortieren und Filtern mit RowSorter
15.18.11 Ein professionelles Tabellenlayout mit JGrid
15.19 Bäume (JTree)
15.19.1 JTree und sein TreeModel und TreeNode
15.19.2 Selektionen bemerken
15.19.3 Das TreeModel von JTree
15.20 JRootPane, JLayeredPane und JDesktopPane
15.20.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane)
15.20.2 JLayeredPane
15.20.3 JDesktopPane und die Kinder JInternalFrame
15.21 Dialoge und Window-Objekte
15.21.1 JWindow und JDialog
15.21.2 Modal oder nicht-modal
15.21.3 Standarddialoge mit JOptionPane
15.21.4 Der Farbauswahldialog JColorChooser
15.21.5 Der Dateiauswahldialog
15.22 Flexibles Java-Look
15.22.1 L & F global setzen
15.22.2 UIManager
15.22.3 Verbessern des Aussehens unter Windows mit JGoodies Looks
15.23 Die Zwischenablage (Clipboard)
15.23.1 Clipboard-Objekte
15.23.2 Auf den Inhalt zugreifen mit Transferable
15.23.3 DataFlavor ist das Format der Daten in der Zwischenablage
15.23.4 Einfügungen in der Zwischenablage erkennen
15.23.5 Drag
15.24 Undo durchführen
15.25 AWT, Swing und die Threads
15.25.1 Ereignisschlange (EventQueue) und AWT-Event-Thread
15.25.2 Swing ist nicht Thread-sicher
15.25.3 Swing-Elemente mit invokeLater() und invokeAndWait() bedienen
15.25.4 SwingWorker
15.25.5 Eigene Ereignisse in die Queue setzen
15.25.6 Auf alle Ereignisse hören
15.26 Barrierefreiheit mit der Java Accessibility API
15.27 Benutzerinteraktionen automatisieren
15.27.1 Automatisch in die Tasten hauen
15.27.2 Mausoperationen
15.27.3 Methoden zur Zeitsteuerung
15.27.4 Screenshots
15.27.5 MouseInfo und PointerInfo
15.28 Zeitliches Ausführen mit dem javax.swing.Timer
15.29 Alternativen zu AWT und Swing
15.29.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor
15.29.2 SWT (Standard Widget Toolkit)
15.30 Zum Weiterlesen
16 Grafikprogrammierung
16.1 Grundlegendes zum Zeichnen16.1.1 Die paint()-Methode für das AWT-Frame
16.1.2 Zeichen von Inhalten mit JFrame
16.1.3 Auffordern zum Neuzeichnen mit repaint()
16.1.4 Grundbegriffe: Koordinaten, Punkte, Pixel
16.1.5 Die ereignisorientierte Programmierung ändert Fensterinhalte
16.1.6 Java 2D-API
16.2 Einfache Zeichenfunktionen
16.2.1 Linien
16.2.2 Rechtecke
16.2.3 Ovale und Kreisbögen
16.2.4 Polygone und Polylines
16.3 Zeichenketten schreiben und Fonts
16.3.1 Zeichenfolgen schreiben
16.3.2 Die Font-Klasse
16.3.3 Einen neuen Font aus einem gegebenen Font ableiten
16.3.4 Zeichensätze des Systems ermitteln
16.3.5 Neue TrueType-Fonts in Java nutzen
16.3.6 Font-Metadaten durch FontMetrics
16.4 Geometrische Objekte
16.4.1 Die Schnittstelle Shape
16.4.2 Kreisförmiges
16.4.3 Kurviges
16.4.4 Area und die konstruktive Flächengeometrie
16.4.5 Pfade
16.4.6 Punkt in Form, Schnitt von Linien, Abstand Punkt/Linie und Weiteres
16.5 Das Innere und Äußere einer Form
16.5.1 Farben und die Paint-Schnittstelle
16.5.2 Farben mit der Klasse Color
16.5.3 Die Farben des Systems über SystemColor
16.5.4 Composite und Xor
16.5.5 Dicke und Art der Linien von Formen bestimmen über Stroke
16.6 Bilder
16.6.1 Eine Übersicht über die Bilder-Bibliotheken
16.6.2 Bilder mit ImageIO lesen
16.6.3 Ein Bild zeichnen
16.6.4 Programm-Icon/Fenster-Icon setzen
16.6.5 Splash-Screen
16.6.6 Bilder im Speicher erzeugen
16.6.7 Pixel für Pixel auslesen und schreiben
16.6.8 Bilder skalieren
16.6.9 Schreiben mit ImageIO
16.6.10 Asynchrones Laden mit getImage() und dem MediaTracker
16.6.11 Selbst definierte Cursor
16.6.12 VolatileImage
16.7 Weitere Eigenschaften von Graphics
16.7.1 Eine Kopie von Graphics erstellen
16.7.2 Koordinatensystem verschieben
16.7.3 Beschnitt (Clipping)
16.8 Zeichenhinweise durch RenderingHints
16.9 Transformationen mit einem AffineTransform-Objekt
16.10 Drucken
16.10.1 Drucken der Inhalte
16.10.2 Bekannte Drucker
16.11 Grafikverarbeitung ohne grafische Oberfläche
16.11.1 Xvfb-Server
16.11.2 Pure Java AWT Toolkit (PJA)
16.12 Zum Weiterlesen
17 Netzwerkprogrammierung
17.1 Grundlegende Begriffe17.1.1 Internet-Standards und RFC
17.2 URI und URL
17.2.1 URI
17.2.2 Die Klasse URL
17.2.3 Informationen über eine URL
17.2.4 Der Zugriff auf die Daten über die Klasse URL
17.2.5 Verbindungen durch einen Proxy-Server
17.3 Die Klasse URLConnection
17.3.1 Methoden und Anwendung von URLConnection
17.3.2 Protokoll- und Content-Handler
17.3.3 Im Detail: vom URL zur URLConnection
17.3.4 Der Protokoll-Handler für Jar-Dateien
17.3.5 Passwort-geschützte Seiten mit Basic Authentication/ Proxy-Authentifizierung
17.4 Mit GET und POST Daten übergeben
17.4.1 Kodieren der Parameter für Serverprogramme
17.4.2 Eine Suchmaschine ansprechen
17.5 Host- und IP-Adressen
17.5.1 Lebt der Rechner?
17.5.2 Das Netz ist Klasse ...
17.5.3 IP-Adresse des lokalen Hosts
17.6 NetworkInterface
17.7 Mit dem Socket zum Server
17.7.1 Das Netzwerk ist der Computer
17.7.2 Sockets
17.7.3 Eine Verbindung zum Server aufbauen
17.7.4 Server unter Spannung: die Ströme
17.7.5 Die Verbindung wieder abbauen
17.7.6 Informationen über den Socket
17.7.7 Reine Verbindungsdaten über SocketAddress
17.8 Client/Server-Kommunikation
17.8.1 Warten auf Verbindungen
17.8.2 Ein Multiplikationsserver
17.8.3 Blockierendes Lesen
17.8.4 Von außen erreichbar sein
17.9 Apache Jakarta Commons HttpClient und Net
17.9.1 Jakarta Commons HttpClient
17.9.2 Jakarta Commons Net
17.10 Arbeitsweise eines Webservers
17.10.1 Das Hypertext Transfer Protocol (HTTP)
17.10.2 Anfragen an den Server
17.10.3 Die Antworten vom Server
17.10.4 Webserver mit com.sun.net.httpserver.HttpServer
17.11 Datagram-Sockets
17.11.1 Die Klasse DatagramSocket
17.11.2 Datagramme und die Klasse DatagramPacket
17.11.3 Auf ein hereinkommendes Paket warten
17.11.4 Ein Paket zum Senden vorbereiten
17.11.5 Methoden der Klasse DatagramPacket
17.11.6 Das Paket senden
17.12 E-Mail
17.12.1 Wie eine E-Mail um die Welt geht
17.12.2 Das Simple Mail Transfer Protocol und RFC 822
17.12.3 POP (Post Office Protocol)
17.12.4 Die JavaMail API
17.12.5 E-Mails mittels POP3 abrufen
17.12.6 E-Mails versenden
17.12.7 Ereignisse und Suchen
17.13 Tiefer liegende Netzwerkeigenschaften
17.13.1 Internet Control Message Protocol (ICMP)
17.13.2 MAC-Adresse
17.14 Zum Weiterlesen
18 Verteilte Programmierung mit RMI und Web-Services
18.1 Entfernte Objekte und Methoden18.1.1 Stellvertreter helfen bei entfernten Methodenaufrufen
18.1.2 Standards für entfernte Objekte
18.2 Java Remote Method Invocation
18.2.1 Zusammenspiel von Server, Registry und Client
18.2.2 Wie die Stellvertreter die Daten übertragen
18.2.3 Probleme mit entfernten Methoden
18.2.4 Nutzen von RMI bei Middleware-Lösungen
18.2.5 Zentrale Klassen und Schnittstellen
18.2.6 Entfernte und lokale Objekte im Vergleich
18.3 Auf der Serverseite
18.3.1 Entfernte Schnittstelle deklarieren
18.3.2 Remote-Objekt-Implementierung
18.3.3 Stellvertreterobjekte
18.3.4 Der Namensdienst (Registry)
18.3.5 Remote-Objekt-Implementierung exportieren und beim Namensdienst anmelden
18.3.6 Einfaches Logging
18.3.7 Aufräumen mit dem DGC
18.4 Auf der Clientseite
18.5 Entfernte Objekte übergeben und laden
18.5.1 Klassen vom RMI-Klassenlader nachladen
18.6 Weitere Eigenschaften von RMI
18.6.1 RMI und CORBA
18.6.2 RMI über HTTP getunnelt
18.6.3 Automatische Remote-Objekt-Aktivierung
18.7 Daily Soap
18.7.1 SOAP-Protokoll
18.7.2 Die technische Realisierung
18.7.3 SOAP-Implementierungen
18.7.4 @WebService in Java 6
18.7.5 Einen Web-Service definieren
18.7.6 Web-Services veröffentlichen
18.7.7 Einen JAX-WS-Client implementieren
18.8 Java Message Service (JMS)
18.9 Zum Weiterlesen
19 JavaServer Pages und Servlets
19.1 Dynamisch generierte Webseiten19.1.1 Was sind Servlets?
19.1.2 Was sind JavaServer Pages?
19.2 Servlets und JSPs mit Tomcat entwickeln
19.2.1 Servlet-Container
19.2.2 Entwicklung der Servlet/JSP-Spezifikationen
19.2.3 Webserver mit Servlet-Funktionalität
19.2.4 Tomcat
19.2.5 Ablageort für eigene JSP-Seiten
19.2.6 Web-Applikationen
19.2.7 Zuordnung von Web-Applikationen zu physikalischen Verzeichnissen
19.2.8 Mit dem WTP ein Web-Projekt entwickeln
19.3 Statisches und Dynamisches
19.3.1 Statischer Template-Code
19.3.2 Dynamische Inhalte
19.3.3 Kommentare
19.4 Die Expression Language (EL)
19.4.1 Operatoren der EL
19.4.2 Literale
19.4.3 Implizite EL-Objekte
19.5 Formulardaten
19.6 Auf Beans zurückgreifen
19.6.1 Beans in JSP-Seiten anlegen
19.6.2 Properties einer Bean im EL-Ausdruck erfragen
19.6.3 Properties mit <jsp:setProperty> setzen
19.6.4 Bean-Klasse zum Testen von E-Mail-Adressen
19.6.5 Parameterwerte in Bean übertragen
19.7 JSP Tag-Libraries
19.7.1 Standard Tag Library (JSTL)
19.7.2 Jakarta Taglibs Project
19.8 Einbinden und Weiterleiten
19.8.1 Einbinden von Inhalten
19.8.2 Forward und Redirect
19.8.3 Applets einbinden
19.9 Skripten von JSPs
19.9.1 Scriptlets
19.9.2 JSP-Ausdrücke
19.9.3 JSP-Deklarationen
19.9.4 Quoting
19.9.5 Entsprechende XML-Tags
19.9.6 Implizite Objekte für Scriptlets und JSP-Ausdrücke
19.10 JSP-Direktiven
19.10.1 page-Direktiven im Überblick
19.10.2 Mit JSPs Bilder generieren
19.11 Sitzungsverfolgung (Session Tracking)
19.11.1 Lösungen für Sitzungsverfolgung
19.11.2 Auf Session-Dateien zurückgreifen
19.12 Servlets
19.12.1 Servlets compilieren
19.12.2 Servlet-Mapping
19.12.3 Der Lebenszyklus eines Servlets
19.12.4 Mehrere Anfragen beim Servlet und die Thread-Sicherheit
19.12.5 Servlets und Sessions
19.12.6 Weiterleiten und Einbinden von Servlet-Inhalten
19.13 Internationalisierung
19.13.1 Die Länderkennung des Anfragers auslesen
19.13.2 Länderkennung für die Ausgabe setzen
19.13.3 Westeuropäische Texte senden
19.14 Zum Weiterlesen
20 Applets
20.1 Applets in der Wiege von Java20.1.1 (J)Applet und Applikationen
20.1.2 Das erste Hallo-Applet
20.1.3 Die Zyklen eines Applets
20.1.4 Parameter an das Applet übergeben
20.1.5 Wie das Applet den Browser-Inhalt ändern kann
20.1.6 Den Ursprung des Applets erfragen
20.1.7 Datenaustausch zwischen Applets
20.1.8 Was ein Applet alles darf
20.2 Fehler in Applets finden
20.2.1 Ist Java im Browser aktiviert?
20.2.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
20.2.3 Datenaustausch zwischen Applets und Java-Skripten
20.3 Webstart
21 Midlets und die Java ME
21.1 Java Platform, Micro Edition (Java ME)21.2 Konfigurationen
21.2.1 Connected Limited Device Configuration (CLDC)
21.2.2 Connected Device Configuration (CDC)
21.3 Profile
21.3.1 Mobile Information Device Profile (MIDP)
21.3.2 Weitere Profile
21.4 Wireless Toolkits
21.4.1 Sun Java Wireless Toolkit for CLDC
21.4.2 Eclipse-Plugin
21.5 Die Midlet-API
21.5.1 Paketstruktur Mobile Information Device Profile (2.0)
21.6 Zum Weiterlesen
22 Datenbankmanagement mit JDBC
22.1 Das relationale Modell22.2 Datenbanken und Tools
22.2.1 HSQLDB
22.2.2 Weitere Datenbanken
22.2.3 Eclipse-Plugins zum Durchschauen von Datenbanken
22.3 JDBC und Datenbanktreiber
22.3.1 Treibertypen
22.3.2 JDBC-Versionen
22.4 Eine Beispielabfrage
22.4.1 Schritte zur Datenbankabfrage
22.4.2 Client für HSQLDB-Datenbank
22.5 Mit Java an eine Datenbank andocken
22.5.1 Der Treiber-Manager
22.5.2 Den Treiber laden
22.5.3 Eine Aufzählung aller Treiber
22.5.4 Log-Informationen
22.5.5 Verbindung zur Datenbank auf- und abbauen
22.5.6 DataSource
22.5.7 Gepoolte Verbindungen
22.6 Datenbankabfragen
22.6.1 Abfragen über das Statement-Objekt
22.6.2 Ergebnisse einer Abfrage in ResultSet
22.6.3 Java und SQL-Datentypen
22.6.4 Unicode in der Spalte korrekt auslesen
22.6.5 Eine SQL-NULL und wasNull() bei ResultSet
22.6.6 Wie viele Zeilen hat ein ResultSet?
22.7 Die Ausnahmen bei JDBC
22.8 Elemente einer Datenbank hinzufügen und aktualisieren
22.8.1 Batch-Updates
22.9 ResultSets in Bohnen durch RowSet
22.9.1 Die Schnittstelle RowSet
22.9.2 Implementierungen von RowSet
22.9.3 Der Typ CachedRowSet
22.9.4 Der Typ WebRowSet
22.10 Vorbereitete Anweisungen (Prepared Statements)
22.10.1 PreparedStatement-Objekte vorbereiten
22.10.2 Werte für die Platzhalter eines PreparedStatement
22.11 Transaktionen
22.12 Metadaten
22.12.1 Metadaten über die Tabelle
22.12.2 Informationen über die Datenbank
22.13 Einführung in SQL
22.13.1 Ein Rundgang durch SQL-Anfragen
22.13.2 Datenabfrage mit der Data Query Language (DQL)
22.13.3 Tabellen mit der Data Definition Language (DDL) anlegen
22.14 Zum Weiterlesen
23 Reflection und Annotationen
23.1 Metadaten23.1.1 Metadaten durch Java-Doc Tags
23.1.2 XDoclet
23.2 Metadaten der Klassen mit dem Class-Objekt
23.2.1 An ein Class-Objekt kommen
23.2.2 Was das Class-Objekt beschreibt
23.2.3 Der Name der Klasse
23.2.4 instanceof mit Class-Objekten
23.2.5 Oberklassen finden
23.2.6 Implementierte Interfaces einer Klasse oder eines Interfaces
23.2.7 Modifizierer und die Klasse Modifier
23.2.8 Die Arbeit auf dem Feld
23.3 Attribute, Methoden und Konstruktoren
23.3.1 Reflections Gespür für Attribute einer Klasse
23.3.2 Methoden einer Klasse erfragen
23.3.3 Properties einer Bean erfragen
23.3.4 Konstruktoren einer Klasse
23.3.5 Annotationen
23.4 Objekte erzeugen und manipulieren
23.4.1 Objekte erzeugen
23.4.2 Die Belegung der Variablen erfragen
23.4.3 Eine generische toString()-Funktion
23.4.4 Variablen setzen
23.4.5 Private Attribute ändern
23.5 Methoden aufrufen
23.5.1 Statische Methoden aufrufen
23.5.2 Dynamische Methodenaufrufe bei festen Methoden beschleunigen
23.6 Informationen und Identifizierung von Paketen
23.6.1 Geladene Pakete
23.7 Annotationen
23.7.1 Neue Annotationen definieren
23.7.2 Annotationen mit genau einem Element
23.7.3 Beliebige Schlüssel-Werte-Paare
23.7.4 Vorbelegte Elemente
23.7.5 Annotieren von Annotationstypen
23.7.6 Annotationen zur Laufzeit ausgelesen
23.7.7 Mögliche Nachteile von Annotationen
24 Logging und Monitoring
24.1 Die Logging-API24.1.1 Einfaches Logging
24.1.2 Log-Level
24.1.3 Logging in eine Datei
24.2 Überwachen von Systemzuständen
24.3 MBean-Typen, MBean-Server und weitere Begriffe
24.3.1 MXBeans des Systems
24.4 Geschwätzige Programme und JConsole
24.4.1 JConsole
24.5 Der MBeanServer
24.6 Eine eigene Standard-MBean
24.6.1 Management-Schnittstelle
24.6.2 Implementierung der managed Ressource
24.6.3 Anmeldung beim Server
24.6.4 Eigene Bean in JConsole
24.6.5 JMX mit RMI-Adaptor
24.7 Zum Weiterlesen
25 Sicherheitskonzepte
25.1 Zentrale Elemente der Java-Sicherheit25.1.1 Security-API der Java SE
25.1.2 Cryptographic Service Providers
25.2 Der Sandkasten (Sandbox)
25.3 Sicherheitsmanager (Security Manager)
25.3.1 Der Sicherheitsmanager bei Applets
25.3.2 Sicherheitsmanager aktivieren
25.3.3 Wie nutzen die Java-Bibliotheken den Sicherheitsmanager?
25.3.4 Rechte durch Policy-Dateien vergeben
25.3.5 Erstellen von Rechtedateien mit dem grafischen Policy-Tool
25.3.6 Kritik an den Policies
25.4 Signierung
25.4.1 Warum signieren?
25.4.2 Digitale Ausweise und die Zertifizierungsstelle
25.4.3 Mit keytool Schlüssel erzeugen
25.4.4 Signieren mit jarsigner
25.5 Digitale Unterschriften
25.5.1 Die MDx-Reihe
25.5.2 Secure Hash Algorithm (SHA)
25.5.3 Mit der Security-API einen Fingerabdruck berechnen
25.5.4 Die Klasse MessageDigest
25.5.5 Unix-Crypt
25.6 Verschlüsseln von Daten(-strömen)
25.6.1 Den Schlüssel bitte
25.6.2 Verschlüsseln mit Cipher
25.6.3 Verschlüsseln von Datenströmen
25.7 Zum Weiterlesen
26 Java Native Interface (JNI)
26.1 Java Native Interface und Invocation-API26.2 Einbinden einer C-Funktion in ein Java-Programm
26.2.1 Schreiben des Java-Codes
26.2.2 Compilieren des Java-Programms
26.2.3 Erzeugen der Header-Datei
26.2.4 Implementierung der Methode in C
26.2.5 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek
26.2.6 Suchort der dynamischen Bibliothek
26.3 Nativ die Stringlänge ermitteln
26.4 Erweiterte JNI-Eigenschaften
26.4.1 Klassendefinitionen
26.4.2 Zugriff auf Attribute
26.5 Einfache Anbindung von existierenden Bibliotheken
26.5.1 C++ Klassen ansprechen
26.5.2 COM-Schnittstellen anzapfen
26.6 Zum Weiterlesen
27 Dienstprogramme für die Java-Umgebung
27.1 Die Werkzeuge im Überblick27.2 Java-Compiler
27.2.1 Bytecode Compiler javac
27.2.2 Native Compiler
27.2.3 Java-Programme in ein natives ausführbares Programm einpacken
27.3 Der Java-Interpreter java
27.3.1 Der Unterschied zwischen java.exe und javaw.exe
27.4 Das Archivformat Jar
27.4.1 Das Dienstprogramm Jar benutzen
27.4.2 Das Manifest
27.4.3 Applikationen in Jar-Archiven starten
27.4.4 Applets in Jar-Archiven
27.5 Monitoringprogramme
27.5.1 jps
27.5.2 jstat
27.5.3 jmap
27.5.4 jstack
27.6 Ant
27.6.1 Bezug und Installation von Ant
27.6.2 Properties
27.6.3 Externe und vordefinierte Properties
27.6.4 Weitere Ant-Tasks
27.7 Decompiler und Obfuscatoren
27.7.1 Der Decompiler Jad
27.7.2 Das Obfuscator-Programm ProGuard
27.8 Weitere Dienstprogramme
27.8.1 Sourcecode Beautifier
27.8.2 Java-Programme als Systemdienst ausführen
27.9 Zum Weiterlesen