›Java ist auch eine Insel‹ 8. Auflage
Vorwort
Vorwort zur 8. 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 Mll raus, Garbage-Collector!
1.3.6 Ausnahmebehandlung
1.3.7 Kein Prprozessor fr Textersetzungen
1.3.8 Keine benutzerdefinierten berladenen Operatoren
1.3.9 Java als Sprache, Laufzeitumgebung und Bibliothek
1.3.10 Wofr sich Java weniger 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 Java-Plattformen: Java SE, Java EE und Java ME
1.5.1 Java SE-Plattform
1.5.2 Java fr die Kleinen
1.5.3 Java fr die Groen
1.6 Installation von Suns Java Platform Standard Edition (Java SE)
1.6.1 Das Java SE von Sun
1.6.2 Download vom JDK
1.6.3 Java SE unter Windows installieren
1.7 Das erste Programm compilieren und testen
1.7.1 Ein Quadratzahlen-Programm
1.7.2 Der Compilerlauf
1.7.3 Die Laufzeitumgebung
1.7.4 Hufige Compiler- und Interpreterprobleme
1.8 Entwicklungsumgebungen im Allgemeinen
1.8.1 Die Entwicklungsumgebung Eclipse
1.8.2 NetBeans von Sun
1.8.3 Ein Wort zu Microsoft, Java und zu J++
1.9 Eclipse im Speziellen
1.9.1 Eclipse starten
1.9.2 Das erste Projekt anlegen
1.9.3 Eine Klasse hinzufgen
1.9.4 bersetzen und Ausfhren
1.9.5 JDK statt JRE
1.9.6 Start eines Programms ohne Speicheraufforderung
1.9.7 Projekt einfgen, Workspace fr die Programme wechseln
1.9.8 Plugins fr Eclipse
1.10 Zum Weiterlesen
2 Sprachbeschreibung
2.1 Elemente der Programmiersprache Java2.1.1 Token
2.1.2 Textkodierung durch Unicode-Zeichen
2.1.3 Literale
2.1.4 Bezeichner
2.1.5 Reservierte Schlsselwrter
2.1.6 Kommentare
2.1.7 Die API-Dokumentation
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 Funktionsaufrufe als Anweisungen
2.2.5 print(), println() und printf() fr Bildschirmausgaben
2.2.6 Ausdrucksanweisung
2.2.7 Erste Idee der Objektorientierung
2.2.8 Modifizierer
2.2.9 Anweisungen und Blcke
2.3 Datentypen, Typisierung, Variablen und Zuweisungen
2.3.1 Primitive Datentypen im berblick
2.3.2 Variablendeklarationen
2.3.3 Zuweisungsoperator
2.3.4 Variablendeklaration mit Wertinitialisierung
2.3.5 Wahrheitswerte
2.3.6 Ganzzahlige Datentypen
2.3.7 Die Fliekommazahlen float und double
2.3.8 Alphanumerische Zeichen
2.3.9 Gute Namen, schlechte Namen
2.4 Blcke, Initialisierung und Sichtbarkeit
2.4.1 Blcke und Anweisungen
2.4.2 Initialisierung von lokalen Variablen
2.4.3 Sichtbarkeit und Gltigkeitsbereich
2.5 Ausdrcke, Operanden und Operatoren
2.5.1 Arithmetische Operatoren
2.5.2 Unres Minus und Plus
2.5.3 Zuweisung mit Operation
2.5.4 Prfix- oder Postfix-Inkrement und -Dekrement
2.5.5 Die relationalen Operatoren und die Gleichheitsoperatoren
2.5.6 Logische Operatoren Und, Oder, Xor, Nicht
2.5.7 Rang der Operatoren in der Auswertungsreihenfolge
2.5.8 Die Typanpassung (das Casting)
2.5.9 berladenes Plus fr Strings
2.6 Bedingte Anweisungen oder Fallunterscheidungen
2.6.1 Die if-Anweisung
2.6.2 Die Alternative mit einer if/else-Anweisung whlen
2.6.3 Die switch-Anweisung bietet die Alternative
2.7 Schleifen
2.7.1 Die while-Schleife
2.7.2 Die do-while-Schleife
2.7.3 Die for-Schleife
2.7.4 Schleifenbedingungen und Vergleiche mit ==
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 Signatur-Beschreibung in der Java-API
2.8.3 Aufruf einer Methode
2.8.4 Methoden ohne Parameter deklarieren
2.8.5 Statische Methoden (Klassenmethoden)
2.8.6 Parameter, Argument und Wertbergabe
2.8.7 Methoden vorzeitig mit return beenden
2.8.8 Nicht erreichbarer Quellcode bei Funktionen
2.8.9 Rckgabewerte
2.8.10 Methoden berladen
2.8.11 Vorgegebener Wert fr nicht aufgefhrte Argumente
2.8.12 Finale lokale Variablen
2.8.13 Rekursive Methoden
2.9 Weitere Operatoren
2.9.1 Bits und Bytes
2.9.2 Operationen auf Bit-Ebene
2.9.3 Die Verschiebeoperatoren
2.9.4 Ein Bit setzen, lschen, umdrehen und testen
2.9.5 Bit-Funktionen der Integer- und Long-Klasse
2.9.6 Der Bedingungsoperator
2.9.7 Operator vermisst
2.10 Einfache Benutzereingaben
2.11 Zum Weiterlesen
3 Klassen und Objekte
3.1 Objektorientierte Programmierung3.1.1 Warum berhaupt OOP?
3.1.2 Denk ich an Java, denk ich an Wiederverwendbarkeit
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.3.3 UML-Werkzeuge
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.5 Pakete und import-Deklarationen nutzen
3.5.1 Volle Qualifizierung und import-Deklaration
3.5.2 import *
3.6 Mit Referenzen arbeiten
3.6.1 Zuweisungen bei Referenzen
3.6.2 Methoden mit nicht-primitiven Parametern
3.7 Identitt und Gleichheit
3.7.1 Identitt von Objekten
3.7.2 Gleichheit und die Methode equals()
3.7.3 Die null-Referenz
3.8 Wrapper-Klassen und Autoboxing
3.8.1 Erzeugen von Wrapper-Objekten
3.8.2 Konvertierungen in eine String-Reprsentation
3.8.3 Die Klasse Integer
3.8.4 Die Klassen Double und Float fr Fliekommazahlen
3.8.5 Die Basisklasse Number fr numerische Wrapper-Objekte
3.8.6 Die Boolean-Klasse
3.8.7 Autoboxing: Boxing und Unboxing
3.9 Compilationseinheiten und eigene Pakete schnren
3.9.1 Die package-Anweisung
3.9.2 Importieren von Klassen mit import
3.9.3 Hierarchische Strukturen und das Default-Package
3.9.4 Paketnamen
3.9.5 Klassen mit gleichen Namen in unterschiedlichen Paketen
3.9.6 Compilationseinheit (Compilation Unit)
3.9.7 Statischer Import
3.9.8 Eine Verzeichnisstruktur fr eigene Projekte
3.10 Arrays
3.10.1 Deklaration von Arrays
3.10.2 Arrays mit Inhalt
3.10.3 Die Lnge eines Arrays ber das Attribut length
3.10.4 Zugriff auf die Elemente ber den Index
3.10.5 Array-Objekte mit new erzeugen
3.10.6 Fehler bei Arrays
3.10.7 Die erweiterte for-Schleife
3.10.8 Arrays mit nicht-primitiven Elementen
3.10.9 Mehrdimensionale Arrays
3.10.10 Vorinitialisierte Arrays
3.10.11 Mehrere Rckgabewerte
3.10.12 Methode mit variabler Argumentanzahl (Vararg)
3.10.13 Klonen kann sich lohnen Arrays vermehren
3.10.14 Feldinhalte kopieren
3.10.15 Die Klasse Arrays zum Vergleichen, Fllen und Suchen
3.11 Der Einstiegspunkt fr das Laufzeitsystem: main()
3.11.1 Kommandozeilen-Argumente verarbeiten
3.11.2 Der Rckgabewert von main() und System.exit()
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 fr konstante Zeichenketten
4.2.2 String-Lnge 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 anhngen, 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 String-Reprsentationen konvertieren
4.3.2 String in primitives Element konvertieren
4.4 Vernderbare Zeichenketten mit StringBuilder/StringBuffer
4.4.1 Anlegen von StringBuilder-/StringBuffer-Objekten
4.4.2 Die Lnge eines StringBuilder-/StringBuffer-Objekts
4.4.3 Daten anhngen
4.4.4 Zeichen(folgen) setzen, erfragen, lschen und umdrehen
4.4.5 Vergleichen von String/StringBuilder/StringBuffer
4.4.6 hashCode() bei StringBuffer/StringBuilder
4.5 Sprachabhngiges Vergleichen und Normalisierung
4.5.1 Die Klasse Collator
4.5.2 Effiziente interne Speicherung fr die Sortierung
4.5.3 Normalisierung
4.6 Regulre Ausdrcke
4.6.1 Arbeiten mit der Fassade: String.matches()
4.6.2 Die Klassen Pattern und Matcher
4.6.3 Quantifizierer und Wiederholungen
4.6.4 Finden und nicht matchen
4.6.5 Gierige und nicht gierige Operatoren
4.6.6 Mit MatchResult alle Ergebnisse einsammeln
4.7 Zerlegen von Zeichenketten
4.7.1 Splitten von Zeichenketten mit split()
4.7.2 Die Klasse Scanner
4.7.3 StringTokenizer
4.7.4 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 Whrungen mit NumberFormat und DecimalFormat formatieren
4.10 Zum Weiterlesen
5 Mathematisches
5.1 Reprsentation ganzer Zahlen das Zweierkomplement5.2 Fliekommaarithmetik 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 Fliekomma 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 Groe Zahlen
5.7.1 Die Klasse BigInteger
5.7.2 Methoden von BigInteger
5.7.3 Ganz lange Fakultten
5.7.4 Groe Fliekommazahlen 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 Privatsphre und Sichtbarkeit
6.2.1 Fr die ffentlichkeit: public
6.2.2 Kein Public Viewing Passwrter sind privat
6.2.3 Wieso nicht freie Methoden und Variablen fr alle?
6.2.4 Privat ist nicht ganz privat: Es kommt darauf an, wers sieht
6.2.5 Zugriffsmethoden fr Attribute deklarieren
6.2.6 Setter und Getter nach der JavaBeans-Spezifikation
6.2.7 Paketsichtbar
6.2.8 Zusammenfassung zur Sichtbarkeit
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 Variablen zum Datenaustausch
6.3.6 Statische Eigenschaften und Objekteigenschaften
6.4 Konstanten und Aufzhlungen
6.4.1 Konstanten ber ffentliche statische finale Variablen
6.4.2 Eincompilierte Belegungen der Klassenvariablen
6.4.3 Typ(un)sichere Aufzhlungen
6.4.4 Aufzhlungen mit enum
6.5 Objekte anlegen und zerstren
6.5.1 Konstruktoren schreiben
6.5.2 Der Default-Konstruktor
6.5.3 Parametrisierte und berladene Konstruktoren
6.5.4 Copy-Konstruktor
6.5.5 Einen anderen Konstruktor der gleichen Klasse aufrufen
6.5.6 Ihr fehlt uns nicht der Garbage-Collector
6.5.7 Private Konstruktoren, Utility-Klassen, Singleton, Fabriken
6.6 Klassen- und Objektinitialisierung
6.6.1 Initialisierung von Objektvariablen
6.6.2 Statische Blcke als Klasseninitialisierer
6.6.3 Initialisierung von Klassenvariablen
6.6.4 Exemplarinitialisierer (Instanzinitialisierer)
6.6.5 Finale Werte im Konstruktor und in statischen Blcken setzen
6.7 Assoziationen zwischen Objekten
6.7.1 Unidirektionale 1:1-Beziehung
6.7.2 Bidirektionale 1:1-Beziehungen
6.7.3 Unidirektionale 1:n-Beziehung
6.8 Vererbung
6.8.1 Vererbung in Java
6.8.2 Spielobjekte modelliert
6.8.3 Implizite Basisklasse java.lang.Object
6.8.4 Einfach- und Mehrfachvererbung
6.8.5 Sichtbarkeit protected
6.8.6 Konstruktoren in der Vererbung und super
6.9 Typen in Hierarchien
6.9.1 Automatische und explizite Typanpassung
6.9.2 Das Substitutionsprinzip
6.9.3 Typen mit dem binren Operator instanceof testen
6.10 Methoden berschreiben
6.10.1 Methoden in Unterklassen mit neuem Verhalten ausstatten
6.10.2 Mit super an die Eltern
6.10.3 Finale Klassen und finale Methoden
6.10.4 Kovariante Rckgabetypen
6.10.5 Array-Typen und Kovarianz
6.11 Dynamisches Binden/Polymorphie
6.11.1 Unpolymorph bei privaten, statischen und finalen Methoden
6.11.2 Polymorphie bei Konstruktoraufrufen
6.12 Abstrakte Klassen und abstrakte Methoden
6.12.1 Abstrakte Klassen
6.12.2 Abstrakte Methoden
6.13 Schnittstellen
6.13.1 Deklarieren von Schnittstellen
6.13.2 Implementieren von Schnittstellen
6.13.3 Markierungsschnittstellen
6.13.4 Ein Polymorphie-Beispiel mit Schnittstellen
6.13.5 Die Mehrfachvererbung bei Schnittstellen
6.13.6 Keine Kollisionsgefahr bei Mehrfachvererbung
6.13.7 Erweitern von Interfaces Subinterfaces
6.13.8 Vererbte Konstanten bei Schnittstellen
6.13.9 Abstrakte Klassen und Schnittstellen im Vergleich
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) Typen und Eigenschaften
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.2 Design-Pattern (Entwurfsmuster)
7.2.1 Motivation fr Design-Pattern
7.2.2 Das Beobachter-Pattern (Observer/Observable)
7.2.3 Ereignisse ber Listener
7.3 Service-Factory
7.3.1 Arbeiten mit dem ServiceLoader
7.3.2 Utility-Klasse Lookup als ServiceLoader-Fassade
7.4 JavaBean
7.4.1 Properties (Eigenschaften)
7.4.2 Einfache Eigenschaften
7.4.3 Indizierte Eigenschaften
7.4.4 Gebundene Eigenschaften
7.4.5 Veto-Eigenschaften dagegen!
8 Exceptions
8.1 Problembereiche einzunen8.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 Auslsen eigener Exceptions
8.3.1 Mit throw Ausnahmen auslsen
8.3.2 Neue Exception-Klassen deklarieren
8.3.3 Abfangen und Weiterleiten
8.3.4 Geschachtelte Ausnahmen
8.4 Rckgabewerte bei ausgelsten Ausnahmen
8.5 Der Stack-Trace
8.5.1 Stack-Trace erfragen
8.6 Assertions
8.6.1 Assertions in eigenen Programmen nutzen
8.6.2 Assertions aktivieren
9 Generics, innere Klassen
9.1 Generische Datentypen9.1.1 Einfache Klassenschablonen
9.1.2 Einfache Methodenschablonen
9.1.3 Umsetzen der Generics, Typlschung und Raw-Types
9.1.4 Generics und Arrays
9.1.5 Einschrnken der Typen
9.1.6 Generics und Vererbung, Invarianz
9.1.7 Wildcards
9.2 Geschachtelte (innere) Klassen, Schnittstellen, Aufzhlungen
9.2.1 Statische innere Klassen und Schnittstellen
9.2.2 Mitglieds- oder Elementklassen
9.2.3 Lokale Klassen
9.2.4 Anonyme innere Klassen
9.2.5 this und Vererbung
10 Die Klassenbibliothek
10.1 Die Java-Klassenphilosophie10.1.1 bersicht ber die Pakete der Standardbibliothek
10.2 Object ist die Mutter aller Klassen
10.2.1 Klassenobjekte
10.2.2 Objektidentifikation mit toString()
10.2.3 Objektgleichheit mit equals() und Identitt
10.2.4 Klonen eines Objekts mit clone()
10.2.5 Hashcodes ber hashCode() liefern
10.2.6 Aufrumen mit finalize()
10.2.7 Synchronisation
10.3 Die Spezial-Oberklasse Enum
10.3.1 Methoden auf Enum-Objekten
10.3.2 enum mit eigenen Konstruktoren und Methoden
10.4 Klassenlader (Class Loader)
10.4.1 Woher die kleinen Klassen kommen
10.4.2 Setzen des Klassenpfades
10.4.3 Die wichtigsten drei Typen von Klassenladern
10.4.4 Der java.lang.ClassLoader
10.4.5 Hot Deployment mit dem URL-Classloader
10.4.6 Das jre/lib/endorsed-Verzeichnis
10.5 Die Utility-Klasse System und Properties
10.5.1 Systemeigenschaften der Java-Umgebung
10.5.2 line.separator
10.5.3 Property von der Konsole aus setzen
10.5.4 Umgebungsvariablen des Betriebssystems
10.5.5 Einfache Zeitmessung und Profiling
10.6 Ausfhren externer Programme und Skripte
10.6.1 ProcessBuilder und Prozesskontrolle mit Process
10.6.2 Einen Browser/E-Mail-Client/Editor aufrufen
10.6.3 Ausfhren von Skripten
10.7 Benutzereinstellungen
10.7.1 Benutzereinstellungen speichern
10.7.2 Eintrge einfgen, auslesen und lschen
10.7.3 Auslesen der Daten und Schreiben in anderem Format
10.7.4 Auf Ereignisse horchen
10.7.5 Zugriff auf die gesamte Windows-Registry
10.8 Musik abspielen
10.8.1 Die Arbeit mit AudioClip
10.8.2 Java Sound API
10.9 Annotationen
10.9.1 Annotationstypen @Override, @Deprecated, @SuppressWarnings
10.9.2 Annotationen fr Web-Services
10.10 Zum Weiterlesen
11 Threads und nebenlufige Programmierung
11.1 Nebenlufigkeit11.1.1 Threads und Prozesse
11.1.2 Wie parallele Programme die Geschwindigkeit steigern knnen
11.1.3 Was Java fr Nebenlufigkeit alles bietet
11.2 Threads erzeugen
11.2.1 Threads ber die Schnittstelle Runnable implementieren
11.2.2 Thread mit Runnable starten
11.2.3 Der Name eines Threads
11.2.4 Die Klasse Thread erweitern
11.2.5 Wer bin ich?
11.3 Die Zustnde eines Threads
11.3.1 Threads schlafen
11.3.2 Mit yield() auf Rechenzeit verzichten
11.3.3 Das Ende eines Threads
11.3.4 UncaughtExceptionHandler fr unbehandelte Ausnahmen
11.3.5 Einen Thread hflich mit Interrupt beenden
11.3.6 Der stop() von auen und die Rettung mit ThreadDeath
11.3.7 Ein Rendezvous mit join()
11.3.8 Barrier und Austausch mit Exchanger
11.3.9 Arbeit niederlegen und wieder aufnehmen
11.3.10 Prioritt
11.3.11 Der Thread als Dmon
11.4 Der Ausfhrer (Executor) kommt
11.4.1 Die Schnittstelle Executor
11.4.2 Die Thread-Pools
11.4.3 Threads mit Rckgabe ber Callable
11.4.4 Mehrere Callable abarbeiten
11.4.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen
11.5 Synchronisation ber kritische Abschnitte
11.5.1 Gemeinsam genutzte Daten
11.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
11.5.3 Punkte parallel initialisieren
11.5.4 i++ sieht atomar aus, ist es aber nicht
11.5.5 Kritische Abschnitte schtzen
11.5.6 Schtzen mit ReentrantLock
11.5.7 Synchronisieren mit synchronized
11.5.8 Synchronized-Methoden der Klasse StringBuffer
11.5.9 Mit synchronized synchronisierte Blcke
11.5.10 Dann machen wir doch gleich alles synchronisiert!
11.5.11 Lock-Freigabe im Fall von Exceptions
11.5.12 Mit synchronized nachtrglich synchronisieren
11.5.13 Monitore sind reentrant gut fr die Geschwindigkeit
11.5.14 Synchronisierte Methodenaufrufe zusammenfassen
11.5.15 Deadlocks
11.6 Synchronisation ber Warten und Benachrichtigen
11.6.1 Die Schnittstelle Condition
11.6.2 Its Disco-Time
11.6.3 Warten mit wait() und Aufwecken mit notify()
11.6.4 Falls der Lock fehlt: IllegalMonitorStateException
11.6.5 Semaphor
11.7 Atomare Operationen und frische Werte mit volatile
11.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
11.7.2 Das Paket java.util.concurrent.atomic
11.8 Mit dem Thread verbundene Variablen
11.8.1 ThreadLocal
11.8.2 InheritableThreadLocal
11.9 Gruppen von Threads in einer Thread-Gruppe
11.9.1 Aktive Threads in der Umgebung
11.9.2 Etwas ber die aktuelle Thread-Gruppe herausfinden
11.9.3 Threads in einer Thread-Gruppe anlegen
11.9.4 Methoden von Thread und ThreadGroup im Vergleich
11.10 Zeitgesteuerte Ablufe
11.10.1 Die Klassen Timer und TimerTask
11.10.2 Job-Scheduler Quartz
11.11 Einen Abbruch der virtuellen Maschine erkennen
11.12 Zum Weiterlesen
12 Datenstrukturen und Algorithmen
12.1 Datenstrukturen und die Collection-API12.1.1 Designprinzip mit Schnittstellen, abstrakten und 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 Auswahlkriterium ArrayList oder LinkedList
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 Sortiermglichkeiten
12.4.3 Den grten 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 Bume
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 Priorittswarteschlangen
12.7.3 Deque-Klassen
12.8 Assoziative Speicher
12.8.1 Die Klassen HashMap und TreeMap
12.8.2 Einfgen und Abfragen der Datenstruktur
12.8.3 equals(), hashCode() und IdentityHashMap
12.8.4 Das Problem von vernderbaren Elementen
12.8.5 Aufzhlungen 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 Ersetzen, Kopieren, Fllen, Umdrehen, Rotieren, Durchmischen
12.10.2 Mit der Halbierungssuche nach Elementen fahnden
12.10.3 Nicht-nderbare Datenstrukturen
12.10.4 Hufigkeit 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 fr Bitmengen
12.12.1 Ein BitSet anlegen, fllen und erfragen
12.12.2 Mengenorientierte Operationen
12.12.3 Methodenbersicht
12.12.4 Primzahlen in einem BitSet verwalten
13 Raum und Zeit
13.1 Weltzeit13.2 Wichtige Datum-Klassen im berblick
13.3 Sprachen der Lnder
13.3.1 Sprachen und Regionen ber Locale-Objekte
13.4 Internationalisierung und Lokalisierung
13.4.1 ResourceBundle-Objekte und Ressource-Dateien
13.4.2 Ressource-Dateien zur Lokalisierung
13.4.3 Die Klasse ResourceBundle
13.4.4 Ladestrategie fr ResourceBundle-Objekte
13.5 Die Klasse Date
13.5.1 Objekte erzeugen und Methoden nutzen
13.5.2 Date-Objekte nicht immutable
13.6 Calendar und GregorianCalendar
13.6.1 Die abstrakte Klasse Calendar
13.6.2 Der gregorianische Kalender
13.6.3 Ostertage
13.6.4 Abfragen und Setzen von Datumselementen
13.7 Formatieren und Parsen von Datumsangaben
13.7.1 Ausgaben mit printf()
13.7.2 Mit DateFormat und SimpleDateFormat formatieren
13.7.3 Parsen von Datumswerten
13.8 Zum Weiterlesen
14 Dateien und Datenstrme
14.1 Datei und Verzeichnis14.1.1 Dateien und Verzeichnisse mit der Klasse File
14.1.2 Verzeichnis oder Datei? Existiert es?
14.1.3 Verzeichnis- und Dateieigenschaften/-attribute
14.1.4 Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher
14.1.5 Umbenennen und Verzeichnisse anlegen
14.1.6 Verzeichnisse listen und Dateien filtern
14.1.7 Dateien berhren, neue Dateien anlegen, temporre Dateien
14.1.8 Dateien und Verzeichnisse lschen
14.1.9 Verzeichnisse nach Dateien iterativ durchsuchen
14.1.10 URL- und URI-Objekte aus einem File-Objekt ableiten
14.1.11 Mit Locking Dateien sperren
14.1.12 Sicherheitsprfung
14.2 Dateien mit wahlfreiem Zugriff
14.2.1 Ein RandomAccessFile zum Lesen und Schreiben ffnen
14.2.2 Aus dem RandomAccessFile lesen
14.2.3 Schreiben mit RandomAccessFile
14.2.4 Die Lnge des RandomAccessFile
14.2.5 Hin und her in der Datei
14.3 Stream-Klassen und Reader/Writer am Beispiel von Dateien
14.3.1 Mit dem FileWriter Texte in Dateien schreiben
14.3.2 Zeichen mit der Klasse FileReader lesen
14.3.3 Kopieren mit FileOutputStream und FileInputStream
14.3.4 Das FileDescriptor-Objekt
14.4 Basisklassen fr die Ein-/Ausgabe
14.4.1 Die abstrakten Basisklassen
14.4.2 bersicht ber Ein-/Ausgabeklassen
14.4.3 Die abstrakte Basisklasse OutputStream
14.4.4 Die Schnittstellen Closeable und Flushable
14.4.5 Ein Datenschlucker
14.4.6 Die abstrakte Basisklasse InputStream
14.4.7 Ressourcen aus dem Klassenpfad und aus JarArchiven laden
14.4.8 Strme mit SequenceInputStream zusammensetzen
14.4.9 Die abstrakte Basisklasse Writer
14.4.10 Die Schnittstelle Appendable
14.4.11 Die abstrakte Basisklasse Reader
14.5 Formatierte Textausgaben
14.5.1 Die Klassen PrintWriter und PrintStream
14.5.2 System.out, System.err und System.in
14.5.3 Geschtzte Passwort-Eingaben mit der Klasse Console
14.6 Schreiben und Lesen aus Strings und Byte-Feldern
14.6.1 Mit dem StringWriter ein String-Objekt fllen
14.6.2 CharArrayWriter
14.6.3 StringReader und CharArrayReader
14.6.4 Mit ByteArrayOutputStream in ein Byte-Feld schreiben
14.6.5 Mit ByteArrayInputStream aus einem Byte-Feld lesen
14.7 Datenstrme filtern und verketten
14.7.1 Streams als Filter verketten
14.7.2 Gepufferte Ausgaben mit BufferedWriter/BufferedOutputStream
14.7.3 Gepufferte Eingaben mit BufferedReader/BufferedInputStream
14.7.4 LineNumberReader zhlt automatisch Zeilen mit
14.7.5 Daten mit der Klasse PushbackReader zurcklegen
14.7.6 DataOutputStream/DataInputStream
14.7.7 Basisklassen fr Filter
14.7.8 Die Basisklasse FilterWriter
14.7.9 Ein LowerCaseWriter
14.7.10 Eingaben mit der Klasse FilterReader filtern
14.8 Vermittler zwischen Byte-Streams und Unicode-Strmen
14.8.1 Datenkonvertierung durch den OutputStreamWriter
14.8.2 Automatische Konvertierungen mit dem InputStreamReader
14.9 Kommunikation zwischen Threads mit Pipes
14.9.1 PipedOutputStream und PipedInputStream
14.9.2 PipedWriter und PipedReader
14.10 Datenkompression
14.10.1 Java-Untersttzung beim Komprimieren
14.10.2 Datenstrme komprimieren
14.10.3 Zip-Archive
14.10.4 Jar-Archive
14.11 Prfsummen
14.11.1 Die Schnittstelle Checksum
14.11.2 Die Klasse CRC32
14.11.3 Die Adler32-Klasse
14.12 Persistente Objekte und Serialisierung
14.12.1 Objekte mit der Standard-Serialisierung speichern und lesen
14.12.2 Zwei einfache Anwendungen der Serialisierung
14.12.3 Die Schnittstelle Serializable
14.12.4 Nicht serialisierbare Attribute aussparen
14.12.5 Das Abspeichern selbst in die Hand nehmen
14.12.6 Tiefe Objektkopien
14.12.7 Versionenverwaltung und die SUID
14.12.8 Wie die ArrayList serialisiert
14.12.9 Probleme mit der Serialisierung
14.12.10 Serialisieren in XML-Dateien
14.12.11 JavaBeans Persistence
14.12.12 XStream
14.13 Tokenizer
14.13.1 StreamTokenizer
14.13.2 CSV-Dateien verarbeiten
14.14 Zum Weiterlesen
15 Die eXtensible Markup Language (XML)
15.1 Auszeichnungssprachen15.1.1 Die Standard Generalized Markup Language (SGML)
15.1.2 Extensible Markup Language (XML)
15.2 Eigenschaften von XML-Dokumenten
15.2.1 Elemente und Attribute
15.2.2 Beschreibungssprache fr den Aufbau von XML-Dokumenten
15.2.3 Schema eine Alternative zu DTD
15.2.4 Namensraum (Namespace)
15.2.5 XML-Applikationen
15.3 Die Java-APIs fr XML
15.3.1 Das Document Object Model (DOM)
15.3.2 Simple API for XML Parsing (SAX)
15.3.3 Pull-API StAX
15.3.4 Java Document Object Model (JDOM)
15.3.5 JAXP als Java-Schnittstelle zu XML
15.3.6 DOM-Bume einlesen mit JAXP
15.4 Serielle Verarbeitung mit StAX
15.4.1 Unterschiede der Verarbeitungsmodelle
15.4.2 XML-Dateien mit dem Cursor-Verfahren lesen
15.4.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten
15.4.4 Mit Filtern arbeiten
15.4.5 XML-Dokumente schreiben
15.5 Serielle Verarbeitung von XML mit SAX
15.5.1 Schnittstellen von SAX
15.5.2 SAX-Parser erzeugen
15.5.3 Operationen der Schnittstelle ContentHandler
15.5.4 ErrorHandler und EntityResolver
15.6 XML-Dateien mit JDOM verarbeiten
15.6.1 JDOM beziehen
15.6.2 Paketbersicht
15.6.3 Die Document-Klasse
15.6.4 Eingaben aus der Datei lesen
15.6.5 Das Dokument im XML-Format ausgeben
15.6.6 Der Dokumenttyp
15.6.7 Elemente
15.6.8 Zugriff auf Elementinhalte
15.6.9 Liste mit Unterelementen erzeugen
15.6.10 Neue Elemente einfgen und ndern
15.6.11 Attributinhalte lesen und ndern
15.6.12 XPath
15.7 Transformationen mit XSLT
15.7.1 Templates und XPath als Kernelemente von XSLT
15.7.2 Umwandlung von XML-Dateien mit JDOM und JAXP
15.8 Java Architecture for XML Binding (JAXB)
15.8.1 Beans fr JAXB aufbauen
15.8.2 JAXBContext und die Marshaller/Unmarshaller
15.8.3 Weitere JAXB-Annotationen
15.9 HTML-Dokumente einlesen
15.10 Zum Weiterlesen
16 Grafische Oberflchen mit Swing
16.1 Das Abstract Window Toolkit und Swing16.1.1 SwingSet-Demos
16.1.2 Abstract Window Toolkit (AWT)
16.1.3 Java Foundation Classes
16.1.4 Was Swing von AWT unterscheidet
16.1.5 Die Klasse Toolkit
16.2 Fenster unter grafischen Oberflchen
16.2.1 Swing-Fenster darstellen
16.2.2 Fenster schliebar machen setDefaultCloseOperation()
16.2.3 AWT-Fenster darstellen
16.2.4 Sichtbarkeit des Fensters
16.2.5 Gre und Position des Fensters verndern
16.2.6 Unterklassen der Fenster-Klassen bilden
16.2.7 Fenster- und Dialog-Dekoration, Transparenz
16.2.8 Dynamisches Layout whrend einer Grennderung
16.3 Beschriftungen (JLabel)
16.3.1 Mehrzeiliger Text, HTML in der Darstellung
16.4 Icon und ImageIcon fr Bilder auf Swing-Komponenten
16.5 Es tut sich was Ereignisse beim AWT
16.5.1 Die Klasse AWTEvent
16.5.2 Events auf verschiedenen Ebenen
16.5.3 Swings Ereignisquellen und Horcher (Listener)
16.5.4 Listener implementieren
16.5.5 Listener bei dem Ereignisauslser anmelden/abmelden
16.5.6 Aufrufen der Listener im AWT-Event-Thread
16.5.7 Adapterklassen nutzen
16.5.8 Innere Mitgliedsklassen und innere anonyme Klassen
16.6 Schaltflchen
16.6.1 Normale Schaltflchen (JButton)
16.6.2 Der aufmerksame ActionListener
16.6.3 Basisklasse AbstractButton
16.6.4 Wechselknopf (JToggleButton)
16.7 Swing Action
16.8 JComponent und Component als Basis aller Komponenten
16.8.1 Tooltips
16.8.2 Rahmen (Border)
16.8.3 Fokus und Navigation
16.8.4 Ereignisse jeder Komponente
16.8.5 Die Gre und Position einer Komponente
16.8.6 Komponenten-Ereignisse
16.8.7 Hinzufgen von Komponenten
16.8.8 UI-Delegate der wahre Zeichner
16.8.9 Undurchsichtige (opake) Komponente
16.8.10 Properties und Listener fr nderungen
16.9 Container
16.9.1 Standardcontainer (JPanel)
16.9.2 Bereich mit automatischen Rollbalken (JScrollPane)
16.9.3 Reiter (JTabbedPane)
16.9.4 Teilungs-Komponente (JSplitPane)
16.10 Alles Auslegungssache: die Layoutmanager
16.10.1 bersicht ber Layoutmanager
16.10.2 Zuweisen eines Layoutmanagers
16.10.3 Im Fluss mit FlowLayout
16.10.4 Mit BorderLayout in allen Himmelsrichtungen
16.10.5 Rasteranordnung mit GridLayout
16.10.6 Der GridBagLayout-Manager
16.10.7 Null-Layout
16.10.8 BoxLayout
16.10.9 Weitere Layoutmanager
16.11 Rollbalken und Schieberegler
16.11.1 Schieberegler (JSlider)
16.11.2 Rollbalken (JScrollBar)
16.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
16.12.1 Kontrollfelder (JCheckBox)
16.12.2 ItemSelectable, ItemListener und das ItemEvent
16.12.3 Sich gegenseitig ausschlieende Optionen (JRadioButton)
16.13 Fortschritte bei Operationen berwachen
16.13.1 Fortschrittsbalken (JProgressBar)
16.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)
16.14 Mens und Symbolleisten
16.14.1 Die Menleisten und die Eintrge
16.14.2 Meneintrge definieren
16.14.3 Eintrge durch Action-Objekte beschreiben
16.14.4 Mit der Tastatur: Mnemonics und Shortcut
16.14.5 Der Tastatur-Shortcut (Accelerator)
16.14.6 Tastenkrzel (Mnemonics)
16.14.7 Symbolleisten alias Toolbars
16.14.8 Popup-Mens
16.14.9 System-Tray nutzen
16.15 Das Model-View-Controller-Konzept
16.16 Auswahlmens, Listen und Spinner
16.16.1 Auswahlmen (JComboBox)
16.16.2 Zuordnung einer Taste mit einem Eintrag
16.16.3 Datumsauswahl
16.16.4 Listen (JList)
16.16.5 Drehfeld (JSpinner)
16.17 Texteingabefelder
16.17.1 Text in einer Eingabezeile
16.17.2 Die Oberklasse der Text-Komponenten (JTextComponent)
16.17.3 Geschtzte Eingaben (JPasswordField)
16.17.4 Validierende Eingabefelder (JFormattedTextField)
16.17.5 Einfache mehrzeilige Textfelder (JTextArea)
16.17.6 Editor-Klasse (JEditorPane)
16.18 Tabellen (JTable)
16.18.1 Ein eigenes Tabellen-Model
16.18.2 Basisklasse fr eigene Modelle (AbstractTableModel)
16.18.3 Vorgefertigtes Standard-Modell (DefaultTableModel)
16.18.4 Ein eigener Renderer fr Tabellen
16.18.5 Zell-Editoren
16.18.6 Gre und Umrandung der Zellen
16.18.7 Spalteninformationen
16.18.8 Tabellenkopf von Swing-Tabellen
16.18.9 Selektionen einer Tabelle
16.18.10 Automatisches Sortieren und Filtern mit RowSorter
16.19 Bume (JTree)
16.19.1 JTree und sein TreeModel und TreeNode
16.19.2 Selektionen bemerken
16.19.3 Das TreeModel von JTree
16.20 JRootPane und JDesktopPane
16.20.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane)
16.20.2 JDesktopPane und die Kinder JInternalFrame
16.21 Dialoge und Window-Objekte
16.21.1 JWindow und JDialog
16.21.2 Modal oder nicht-modal
16.21.3 Standarddialoge mit JOptionPane
16.21.4 Der Dateiauswahldialog
16.22 Flexibles Java-Look-and-Feel
16.22.1 Look and Feel global setzen
16.22.2 UIManager
16.22.3 Windowsoptik mit JGoodies Looks verbessern
16.23 Die Zwischenablage (Clipboard)
16.23.1 Clipboard-Objekte
16.23.2 Auf den Inhalt zugreifen mit Transferable
16.23.3 DataFlavor ist das Format der Daten in der Zwischenablage
16.23.4 Einfgungen in der Zwischenablage erkennen
16.23.5 Drag
16.24 Undo durchfhren
16.25 AWT, Swing und die Threads
16.25.1 Ereignisschlange (EventQueue) und AWT-Event-Thread
16.25.2 Swing ist nicht Thread-sicher
16.25.3 invokeLater() und invokeAndWait()
16.25.4 SwingWorker
16.25.5 Eigene Ereignisse in die Queue setzen
16.25.6 Auf alle Ereignisse hren
16.26 Barrierefreiheit mit der Java Accessibility API
16.27 Zeitliches Ausfhren mit dem javax.swing.Timer
16.28 Alternativen zu AWT und Swing
16.28.1 XML-Beschreibungen der Oberflche: Swixml, XUL/Luxor
16.28.2 SWT (Standard Widget Toolkit)
16.29 Zum Weiterlesen
17 Grafikprogrammierung
17.1 Grundlegendes zum Zeichnen17.1.1 Die paint()-Methode fr das AWT-Frame
17.1.2 Zeichnen von Inhalten mit JFrame
17.1.3 Auffordern zum Neuzeichnen mit repaint()
17.1.4 Grundbegriffe: Koordinaten, Punkte, Pixel
17.1.5 Die ereignisorientierte Programmierung ndert Fensterinhalte
17.1.6 Java 2D-API
17.2 Einfache Zeichenmethoden
17.2.1 Linien
17.2.2 Rechtecke
17.2.3 Ovale und Kreisbgen
17.2.4 Polygone und Polylines
17.3 Zeichenketten schreiben und Fonts
17.3.1 Zeichenfolgen schreiben
17.3.2 Die Font-Klasse
17.3.3 Einen neuen Font aus einem gegebenen Font ableiten
17.3.4 Zeichenstze des Systems ermitteln
17.3.5 Neue TrueType-Fonts in Java nutzen
17.3.6 Font-Metadaten durch FontMetrics
17.4 Geometrische Objekte
17.4.1 Die Schnittstelle Shape
17.4.2 Kreisfrmiges
17.4.3 Kurviges
17.4.4 Area und die konstruktive Flchengeometrie
17.4.5 Pfade
17.4.6 Punkt in einer Form, Schnitt von Linien, Abstand Punkt/Linie
17.5 Das Innere und uere einer Form
17.5.1 Farben und die Paint-Schnittstelle
17.5.2 Farben mit der Klasse Color
17.5.3 Die Farben des Systems ber SystemColor
17.5.4 Composite und Xor
17.5.5 Dicke und Art der Linien von Formen bestimmen ber Stroke
17.6 Bilder
17.6.1 Eine bersicht ber die Bilder-Bibliotheken
17.6.2 Bilder mit ImageIO lesen
17.6.3 Ein Bild zeichnen
17.6.4 Programm-Icon/Fenster-Icon setzen
17.6.5 Splash-Screen
17.6.6 Bilder im Speicher erzeugen
17.6.7 Pixel fr Pixel auslesen und schreiben
17.6.8 Bilder skalieren
17.6.9 Schreiben mit ImageIO
17.6.10 Asynchrones Laden mit getImage() und dem MediaTracker
17.7 Weitere Eigenschaften von Graphics
17.7.1 Eine Kopie von Graphics erstellen
17.7.2 Koordinatensystem verschieben
17.7.3 Beschnitt (Clipping)
17.7.4 Zeichenhinweise durch RenderingHints
17.7.5 Transformationen mit einem AffineTransform-Objekt
17.8 Drucken
17.8.1 Drucken der Inhalte
17.8.2 Bekannte Drucker
17.9 Zum Weiterlesen
18 Netzwerkprogrammierung
18.1 Grundlegende Begriffe18.1.1 Internet-Standards und RFC
18.2 URI und URL
18.2.1 URI
18.2.2 Die Klasse URL
18.2.3 Informationen ber eine URL
18.2.4 Der Zugriff auf die Daten ber die Klasse URL
18.2.5 Verbindungen durch einen Proxy-Server
18.3 Die Klasse URLConnection
18.3.1 Methoden und Anwendung von URLConnection
18.3.2 Protokoll- und Content-Handler
18.3.3 Im Detail: vom URL zur URLConnection
18.3.4 Der Protokoll-Handler fr Jar-Dateien
18.3.5 Basic Authentication/Proxy-Authentifizierung
18.4 Mit GET und POST Daten bergeben
18.4.1 Kodieren der Parameter fr Serverprogramme
18.4.2 Eine Suchmaschine ansprechen
18.5 Host- und IP-Adressen
18.5.1 Lebt der Rechner?
18.5.2 IP-Adresse des lokalen Hosts
18.5.3 Das Netz ist Klasse ...
18.6 NetworkInterface
18.7 Mit dem Socket zum Server
18.7.1 Das Netzwerk ist der Computer
18.7.2 Sockets
18.7.3 Eine Verbindung zum Server aufbauen
18.7.4 Server unter Spannung: die Strme
18.7.5 Die Verbindung wieder abbauen
18.7.6 Informationen ber den Socket
18.7.7 Reine Verbindungsdaten ber SocketAddress
18.8 Client-Server-Kommunikation
18.8.1 Warten auf Verbindungen
18.8.2 Ein Multiplikationsserver
18.8.3 Blockierendes Lesen
18.8.4 Von auen erreichbar sein
18.9 Apache Jakarta Commons HttpClient und Net
18.9.1 Jakarta Commons HttpClient
18.9.2 Jakarta Commons Net
18.10 Arbeitsweise eines Webservers
18.10.1 Das Hypertext Transfer Protocol (HTTP)
18.10.2 Anfragen an den Server
18.10.3 Die Antworten vom Server
18.10.4 Webserver mit com.sun.net.httpserver.HttpServer
18.11 Datagram-Sockets
18.11.1 Die Klasse DatagramSocket
18.11.2 Datagramme und die Klasse DatagramPacket
18.11.3 Auf ein hereinkommendes Paket warten
18.11.4 Ein Paket zum Senden vorbereiten
18.11.5 Methoden der Klasse DatagramPacket
18.11.6 Das Paket senden
18.12 E-Mail
18.12.1 Wie eine E-Mail um die Welt geht
18.12.2 Das Simple Mail Transfer Protocol und RFC 822
18.12.3 POP (Post Office Protocol)
18.12.4 Die JavaMail API
18.12.5 E-Mails mittels POP3 abrufen
18.12.6 E-Mails versenden
18.12.7 Ereignisse und Suchen
18.13 Tiefer liegende Netzwerkeigenschaften
18.13.1 Internet Control Message Protocol (ICMP)
18.13.2 MAC-Adresse
18.14 Zum Weiterlesen
19 Verteilte Programmierung mit RMI und WebServices
19.1 Entfernte Objekte und Methoden19.1.1 Stellvertreter helfen bei entfernten Methodenaufrufen
19.1.2 Standards fr entfernte Objekte
19.2 Java Remote Method Invocation
19.2.1 Zusammenspiel von Server, Registry und Client
19.2.2 Wie die Stellvertreter die Daten bertragen
19.2.3 Probleme mit entfernten Methoden
19.2.4 Nutzen von RMI bei Middleware-Lsungen
19.2.5 Zentrale Klassen und Schnittstellen
19.2.6 Entfernte und lokale Objekte im Vergleich
19.3 Auf der Serverseite
19.3.1 Entfernte Schnittstelle deklarieren
19.3.2 Remote-Objekt-Implementierung
19.3.3 Stellvertreterobjekte
19.3.4 Der Namensdienst (RegistryRegistry)
19.3.5 Remote-Objekt-Implementierung exportieren und beim Namensdienst anmelden
19.3.6 Einfaches Logging
19.3.7 Aufrumen mit dem DGC
19.4 Auf der Clientseite
19.5 Entfernte Objekte bergeben und laden
19.5.1 Klassen vom RMI-Klassenlader nachladen
19.6 Weitere Eigenschaften von RMI
19.6.1 RMI und CORBA
19.6.2 RMI ber HTTP getunnelt
19.6.3 Automatische Remote-Objekt-Aktivierung
19.7 Daily Soap
19.7.1 SOAP-Protokoll
19.7.2 Die technische Realisierung
19.7.3 SOAP-Implementierungen
19.7.4 @WebService in Java 6
19.7.5 Einen Web-Service definieren
19.7.6 Web-Services verffentlichen
19.7.7 Einen JAX-WS-Client implementieren
19.8 Java Message Service (JMSJMS)
19.9 Zum Weiterlesen
20 JavaServer Pages und Servlets
20.1 Dynamisch generierte Webseiten20.1.1 Was sind Servlets?
20.1.2 Was sind JavaServer Pages?
20.2 Servlets und JSPs mit Tomcat entwickeln
20.2.1 Servlet-Container
20.2.2 Entwicklung der Servlet-/JSP-Spezifikationen
20.2.3 Webserver mit Servlet-Funktionalitt
20.2.4 Tomcat installieren
20.2.5 Ablageort fr eigene JSPs
20.2.6 Web-Applikationen
20.2.7 Zuordnung von Web-Applikationen zu physikalischen Verzeichnissen
20.2.8 Web-Projekt mit Eclipse IDE for Java EE Developers entwickeln
20.3 Statisches und Dynamisches
20.3.1 Statischer Template-Code
20.3.2 Dynamische Inhalte
20.3.3 Kommentare
20.4 Die Expression Language (EL)
20.4.1 Operatoren der EL
20.4.2 Literale
20.4.3 Implizite EL-Objekte
20.5 Formulardaten
20.5.1 Einen Parameter auslesen
20.5.2 HTML-Formulare
20.6 Auf Beans zurckgreifen
20.6.1 Beans in JSPs anlegen
20.6.2 Properties einer Bean im EL-Ausdruck erfragen
20.6.3 Properties mit <jsp:setProperty> setzen
20.6.4 Bean-Klasse zum Testen von E-Mail-Adressen
20.6.5 Parameterwerte in Bean bertragen
20.7 JSP-Tag-Libraries
20.7.1 Standard Tag Library (JSTL)
20.8 Einbinden und Weiterleiten
20.8.1 Einbinden von Inhalten
20.8.2 Forward und Redirect
20.8.3 Applets einbinden
20.9 Scripting-Elemente in JSPs
20.9.1 Scriptlets
20.9.2 JSP-Ausdrcke
20.9.3 JSP-Deklarationen
20.9.4 Quoting
20.9.5 Entsprechende XML-Tags
20.9.6 Implizite Objekte fr Scriptlets und JSP-Ausdrcke
20.10 JSP-Direktiven
20.10.1 page-Direktiven im berblick
20.10.2 Mit JSPs Bilder generieren
20.11 Sitzungsverfolgung (Session Tracking)
20.11.1 Lsungen fr Sitzungsverfolgung
20.11.2 Auf Session-Dateien zurckgreifen
20.12 Servlets
20.12.1 Servlets compilieren
20.12.2 Servlet-Mapping
20.12.3 Der Lebenszyklus eines Servlets
20.12.4 Mehrere Anfragen beim Servlet und die Thread-Sicherheit
20.12.5 Servlets und Sessions
20.12.6 Weiterleiten und Einbinden von Servlet-Inhalten
20.13 Zum Weiterlesen
21 Applets
21.1 Applets in der Wiege von Java21.1.1 (J)Applet und Applikationen
21.1.2 Das erste Hallo-Applet
21.1.3 HTML Converter
21.1.4 Fehler in Applets finden
21.2 Die Applet-API
21.2.1 Die Zyklen eines Applets
21.2.2 Parameter an das Applet bergeben
21.2.3 Wie das Applet den Browser-Inhalt ndern kann
21.2.4 Den Ursprung des Applets erfragen
21.2.5 Datenaustausch zwischen Applets
21.2.6 Was ein Applet alles darf
21.2.7 Ist Java im Browser aktiviert?
21.2.8 Applet unter Netscape oder Microsoft Internet Explorer?
21.3 Webstart
22 Midlets und die Java ME
22.1 Java Platform, Micro Edition (Java ME)22.2 Konfigurationen
22.2.1 Connected Limited Device Configuration (CLDC)
22.2.2 Connected Device Configuration (CDC)
22.3 Profile
22.3.1 Mobile Information Device Profile (MIDP)
22.3.2 Weitere Profile
22.4 Wireless Toolkits
22.4.1 Sun Java Wireless Toolkit for CLDC
22.4.2 Eclipse-Plugin
22.5 Die Midlet-API
22.5.1 Paketstruktur Mobile Information Device Profile (2.0)
22.6 Zum Weiterlesen
23 Datenbankmanagement mit JDBC
23.1 Das relationale Modell23.2 Datenbanken und Tools
23.2.1 HSQLDB
23.2.2 Weitere Datenbanken
23.2.3 Eclipse-Plugins zum Durchschauen von Datenbanken
23.3 JDBC und Datenbanktreiber
23.3.1 Treibertypen
23.3.2 JDBC-Versionen
23.4 Eine Beispielabfrage
23.4.1 Schritte zur Datenbankabfrage
23.4.2 Client fr HSQLDB-Datenbank
23.5 Mit Java an eine Datenbank andocken
23.5.1 Der Treiber-Manager
23.5.2 Den Treiber laden
23.5.3 Eine Aufzhlung aller Treiber
23.5.4 Log-Informationen
23.5.5 Verbindung zur Datenbank auf- und abbauen
23.5.6 DataSource
23.5.7 Gepoolte Verbindungen
23.6 Datenbankabfragen
23.6.1 Abfragen ber das Statement-Objekt
23.6.2 Ergebnisse einer Abfrage in ResultSet
23.6.3 Java und SQL-Datentypen
23.6.4 Unicode in der Spalte korrekt auslesen
23.6.5 Eine SQL-NULL und wasNull() bei ResultSet
23.6.6 Wie viele Zeilen hat ein ResultSet?
23.7 Die Ausnahmen bei JDBC
23.8 Elemente einer Datenbank hinzufgen und aktualisieren
23.8.1 Batch-Updates
23.9 ResultSets in Bohnen durch RowSet
23.9.1 Die Schnittstelle RowSet
23.9.2 Implementierungen von RowSet
23.9.3 Der Typ CachedRowSet
23.9.4 Der Typ WebRowSet
23.10 Vorbereitete Anweisungen (Prepared Statements)
23.10.1 PreparedStatement-Objekte vorbereiten
23.10.2 Werte fr die Platzhalter eines PreparedStatement
23.11 Transaktionen
23.12 Metadaten
23.12.1 Metadaten ber die Tabelle
23.12.2 Informationen ber die Datenbank
23.13 Einfhrung in SQL
23.13.1 Ein Rundgang durch SQL-Abfragen
23.13.2 Datenabfrage mit der Data Query Language (DQL)
23.13.3 Tabellen mit der Data Definition Language (DDL) anlegen
23.14 Zum Weiterlesen
24 Reflection und Annotationen
24.1 Metadaten24.1.1 Metadaten durch JavaDoc-Tags
24.2 Metadaten der Klassen mit dem Class-Objekt
24.2.1 An ein Class-Objekt kommen
24.2.2 Was das Class-Objekt beschreibt
24.2.3 Der Name der Klasse
24.2.4 instanceof mit Class-Objekten
24.2.5 Oberklassen finden
24.2.6 Implementierte Interfaces einer Klasse oder eines Interfaces
24.2.7 Modifizierer und die Klasse Modifier
24.2.8 Die Arbeit auf dem Feld
24.3 Attribute, Methoden und Konstruktoren
24.3.1 Reflections Gespr fr Attribute einer Klasse
24.3.2 Methoden einer Klasse erfragen
24.3.3 Properties einer Bean erfragen
24.3.4 Konstruktoren einer Klasse
24.3.5 Annotationen
24.4 Objekte erzeugen und manipulieren
24.4.1 Objekte erzeugen
24.4.2 Die Belegung der Variablen erfragen
24.4.3 Eine generische toString()-Funktion
24.4.4 Variablen setzen
24.4.5 Private Attribute ndern
24.5 Methoden aufrufen
24.5.1 Statische Methoden aufrufen
24.5.2 Dynamische Methodenaufrufe bei festen Methoden beschleunigen
24.6 Annotationen
24.6.1 Neue Annotationen definieren
24.6.2 Annotationen mit genau einem Element
24.6.3 Beliebige Schlssel-Werte-Paare
24.6.4 Vorbelegte Elemente
24.6.5 Annotieren von Annotationstypen
24.6.6 Annotationen zur Laufzeit auslesen
24.6.7 Mgliche Nachteile von Annotationen
24.6.8 XDoclet
24.7 Zum Weiterlesen
25 Logging und Monitoring
25.1 Logging mit Java25.1.1 Logging-APIs
25.1.2 Logging mit log4j
25.2 berwachen von Systemzustnden
25.3 MBean-Typen, MBean-Server und weitere Begriffe
25.3.1 MXBeans des Systems
25.4 Geschwtzige Programme und JConsole
25.4.1 JConsole
25.5 Der MBeanServer
25.6 Eine eigene Standard-MBean
25.6.1 Management-Schnittstelle
25.6.2 Implementierung der Managed-Ressource
25.6.3 Anmeldung beim Server
25.6.4 Eigene Bean in JConsole
25.7 Zum Weiterlesen
26 Sicherheitskonzepte
26.1 Zentrale Elemente der Java-Sicherheit26.1.1 Security-API der Java SE
26.1.2 Cryptographic Service Providers
26.2 Der Sandkasten (Sandbox)
26.3 Sicherheitsmanager (Security Manager)
26.3.1 Der Sicherheitsmanager bei Applets
26.3.2 Sicherheitsmanager aktivieren
26.3.3 Rechte durch Policy-Dateien vergeben
26.3.4 Erstellen von Rechtedateien mit dem grafischen Policy-Tool
26.3.5 Kritik an den Policies
26.4 Signierung
26.4.1 Warum signieren?
26.4.2 Digitale Ausweise und die Zertifizierungsstelle
26.4.3 Mit keytool Schlssel erzeugen
26.4.4 Signieren mit jarsigner
26.5 Digitale Unterschriften
26.5.1 Die MDx-Reihe
26.5.2 Secure Hash Algorithm (SHA)
26.5.3 Mit der Security-API einen Fingerabdruck berechnen
26.5.4 Die Klasse MessageDigest
26.6 Verschlsseln von Daten(-strmen)
26.6.1 Den Schlssel bitte
26.6.2 Verschlsseln mit Cipher
26.6.3 Verschlsseln von Datenstrmen
26.7 Zum Weiterlesen
27 Java Native Interface (JNI)
27.1 Java Native Interface und Invocation-API27.2 Einbinden einer C-Funktion in ein Java-Programm
27.2.1 Schreiben des Java-Codes
27.2.2 Compilieren des Java-Programms
27.2.3 Erzeugen der Header-Datei
27.2.4 Implementierung der Funktion in C
27.2.5 bersetzen der C-Programme und Erzeugen der dynamischen Bibliothek
27.2.6 Suchort der dynamischen Bibliothek
27.3 Nativ die Stringlnge ermitteln
27.4 Erweiterte JNI-Eigenschaften
27.4.1 Klassendefinitionen
27.4.2 Zugriff auf Attribute
27.5 Einfache Anbindung von existierenden Bibliotheken
27.5.1 C++ Klassen ansprechen
27.5.2 COM-Schnittstellen anzapfen
27.6 Zum Weiterlesen
28 Dienstprogramme fr die Java-Umgebung
28.1 Die Werkzeuge im berblick28.2 Java-Compiler
28.2.1 Bytecode-Compiler javac
28.2.2 Native Compiler
28.2.3 Java-Programme in ein natives ausfhrbares Programm einpacken
28.3 Der Java-Interpreter java
28.3.1 Der Unterschied zwischen java.exe und javaw.exe
28.4 Das Archivformat Jar
28.4.1 Das Dienstprogramm Jar benutzen
28.4.2 Das Manifest
28.4.3 Applikationen in Jar-Archiven starten
28.4.4 Applets in Jar-Archiven
28.5 Monitoringprogramme
28.5.1 jps
28.5.2 jstat
28.5.3 jmap
28.5.4 jstack
28.6 Ant
28.6.1 Bezug und Installation von Ant
28.6.2 Properties
28.6.3 Externe und vordefinierte Properties
28.6.4 Weitere Ant-Tasks
28.6.5 Das Obfuscator-Programm ProGuard
28.7 Weitere Dienstprogramme
28.7.1 Sourcecode Beautifier
28.7.2 Java-Programme als Systemdienst ausfhren
28.8 Zum Weiterlesen