Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 
Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5
Java ist auch eine Insel

Java ist auch eine Insel
5., akt. und erw. Auflage
1454 S., mit CD, 49,90 Euro
Galileo Computing
ISBN 3-89842-747-1
Diese 5. Auflage der Java-Insel wurde gründlich überarbeitet, aktualisiert und erweitert.

Nutzen Sie die HTML-Version der Insel (inkl. Syntax-Highlighting) zum Reinschnuppern oder als immer verfügbare Ergänzung zu Ihrem Buch.

Auf unserer Katalogseite steht Ihnen ab sofort zusätzlich eine Volltextsuche im Buch zur Verfügung.

Die gedruckte Version des Buches erhalten Sie in unserem Online-Shop - versandkostenfrei innerhalb Deutschlands und Österreichs.
Zum Online-Shop
Galileo Computing

Vorwort

Vorwort zur 4. Auflage
Vorwort zur 5. Auflage
Galileo Computing

1 Schon wieder eine neue Sprache?

1.1 Der erste Kontakt
1.2 Historischer Hintergrund
1.3 Eigenschaften von Java
  1.3.1 Bytecode und die virtuelle Maschine
  1.3.2 Kein Präprozessor für Textersetzungen
  1.3.3 Keine überladenen Operatoren
  1.3.4 Zeiger und Referenzen
  1.3.5 Bring den Müll raus, Garbage-Collector!
  1.3.6 Ausnahmenbehandlung
  1.3.7 Objektorientierung in Java
  1.3.8 Java-Security-Modell
  1.3.9 Wofür sich Java nicht eignet
1.4 Java im Vergleich zu anderen Sprachen
  1.4.1 Java und JavaScript
  1.4.2 Normierungsversuche
  1.4.3 Die Rolle von Java im Web
  1.4.4 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 Direkt ausführbare Programme, native Compiler
1.6 Entwicklungsumgebungen
  1.6.1 Sun ONE Studio und NetBeans von Sun
  1.6.2 IBM und Eclipse
  1.6.3 Together
  1.6.4 Ein Wort zu Microsoft, Java und zu J++
1.7 Installationsanleitung für Java 2
  1.7.1 Das Java SE beziehen
  1.7.2 Java SE unter Windows installieren
  1.7.3 Compiler und Interpreter nutzen
  1.7.4 Installation der Laufzeitumgebung (1.4) unter Linux
1.8 Das erste Programm compilieren und testen
  1.8.1 Häufige Compiler- und Interpreterprobleme
1.9 Eclipse
  1.9.1 Eclipse starten
  1.9.2 Das erste Projekt anlegen
  1.9.3 Eine Klasse hinzufügen
  1.9.4 Übersetzen und Ausführen
  1.9.5 JDK statt JRE
  1.9.6 Start eines Programms ohne Speicheraufforderung
  1.9.7 Projekt einfügen oder Workspace für die Aufgaben wechseln
  1.9.8 Allgemeine Plugins für Eclipse
  1.9.9 Eclipse Web Tools Platform (WTP)
Galileo Computing

2 Sprachbeschreibung

2.1 Anweisungen und Programme
2.2 Elemente der Programmiersprache Java
  2.2.1 Textkodierung durch Unicode-Zeichen
  2.2.2 Literale
  2.2.3 Bezeichner
  2.2.4 Reservierte Schlüsselwörter
  2.2.5 Token
  2.2.6 Semantik
  2.2.7 Kommentare
  2.2.8 Funktionsaufrufe als Anweisungen
  2.2.9 Die leere Anweisung
  2.2.10 Der Block
2.3 Datentypen
  2.3.1 Primitive Datentypen
  2.3.2 Wahrheitswerte
  2.3.3 Variablendeklarationen
  2.3.4 Ganzzahlige Datentypen
  2.3.5 Die Fließkommazahlen
  2.3.6 Alphanumerische Zeichen
  2.3.7 Die Typanpassung (das Casting)
  2.3.8 Lokale Variablen, Blöcke und Sichtbarkeit
  2.3.9 Initialisierung von lokalen Variablen
2.4 Ausdrücke, Operanden und Operatoren
  2.4.1 Zuweisungsoperator
  2.4.2 Verbundoperatoren
  2.4.3 Präfix- oder Postfix-Inkrement und -Dekrement
  2.4.4 Unäres Minus und Plus
  2.4.5 Arithmetische Operatoren
  2.4.6 Die relationalen Operatoren
  2.4.7 Logische Operatoren
  2.4.8 Rang der Operatoren in der Auswertungsreihenfolge
  2.4.9 Überladenes Plus für Strings
  2.4.10 Was C(++)-Programmierer vermissen könnten
2.5 Bedingte Anweisungen oder Fallunterscheidungen
  2.5.1 Die if-Anweisung
  2.5.2 Die Alternative wählen mit einer if/else-Anweisung
  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 Aufruf einer Methode
  2.7.3 Methoden ohne Parameter
  2.7.4 Statische Funktionen (Klassenmethoden)
  2.7.5 Parameter, Argument und Wertübergabe
  2.7.6 Methoden vorzeitig mit return beenden
  2.7.7 Nicht erreichbarer Quellcode bei Funktionen
  2.7.8 Rückgabewerte
  2.7.9 Methoden überladen
  2.7.10 Vorgegebener Wert für nicht aufgeführte Argumente
  2.7.11 Finale lokale Variablen
  2.7.12 Rekursive Funktionen
  2.7.13 Die Ackermann-Funktion
  2.7.14 Die Türme von Hanoi
2.8 Weitere Operatoren
  2.8.1 Bitoperationen
  2.8.2 Vorzeichenlose Zahlen in ein Integer und Char konvertieren
  2.8.3 Variablen mit Xor vertauschen
  2.8.4 Die Verschiebeoperatoren
  2.8.5 Ein Bit setzen, löschen, umdrehen und testen
  2.8.6 Der Bedingungsoperator
2.9 Einfache Benutzereingaben
Galileo Computing

3 Klassen und Objekte

3.1 Objektorientierte Programmierung
  3.1.1 Warum überhaupt OOP?
  3.1.2 Wiederverwertbarkeit
3.2 Klassen benutzen
  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 Anlegen und Nutzen eines Punktes
  3.4.1 Definieren von Referenz-Variablen
  3.4.2 Anlegen eines Exemplars einer Klasse mit dem new-Operator
  3.4.3 Zugriff auf Variablen und Methoden mit dem ».«
  3.4.4 Konstruktoren nutzen
3.5 Import und Pakete
3.6 Die API-Dokumentation
3.7 Mit Referenzen arbeiten
  3.7.1 Die null-Referenz
  3.7.2 Zuweisungen bei Referenzen
  3.7.3 Funktionen mit nichtprimitiven Parametern
  3.7.4 Gleichheit von Objekten und die Methode equals()
3.8 Arrays
  3.8.1 Deklaration von Arrays
  3.8.2 Arrays mit Inhalt
  3.8.3 Die Länge eines Arrays über das Attribut length
  3.8.4 Zugriff auf die Elemente über den Index
  3.8.5 Array-Objekte erzeugen
  3.8.6 Fehler bei Arrays
  3.8.7 Arrays mit nicht-primitiven Elementen
  3.8.8 Vorinitialisierte Arrays
  3.8.9 Die erweiterte for-Schleife
  3.8.10 Mehrdimensionale Arrays
  3.8.11 Die Wahrheit über die Array-Initialisierung
  3.8.12 Mehrere Rückgabewerte
  3.8.13 Argument per Referenz übergeben
  3.8.14 Arrays klonen
  3.8.15 Feldinhalte kopieren
  3.8.16 Die Klasse Arrays zum Vergleichen, Füllen und Suchen
  3.8.17 Methode mit variabler Argumentanzahl (vararg)
3.9 Der Einstiegspunkt für das Laufzeitsystem main()
  3.9.1 Kommandozeilen-Parameter ausgeben
  3.9.2 Der Rückgabewert von main() und System.exit()
  3.9.3 Parser der Kommandozeilenargumente Apache CLI
3.10 Eigene Pakete schnüren
  3.10.1 Die package-Anweisung
  3.10.2 Importieren von Klassen mit import
  3.10.3 Paketnamen
  3.10.4 Hierarchische Strukturen und das Default-Package
  3.10.5 Klassen mit gleichen Namen in unterschiedlichen Paketen
  3.10.6 Statisches Import
  3.10.7 Eine Verzeichnisstruktur für eigene Projekte
Galileo Computing

4 Der Umgang mit Zeichenketten

4.1 Strings und deren Anwendung
  4.1.1 String-Literale als String-Objekte für konstante Zeichenketten
  4.1.2 String-Objekte neu anlegen
  4.1.3 String-Länge
  4.1.4 Gut, dass wir verglichen haben
  4.1.5 String-Teile extrahieren
  4.1.6 Suchen und Ersetzen
  4.1.7 Veränderte Strings liefern
  4.1.8 Unterschiedliche Typen in Zeichenketten konvertieren
4.2 Veränderbare Zeichenketten mit StringBuffer/StringBuilder
  4.2.1 Anlegen von StringBuffer/StringBuilder-Objekten
  4.2.2 Die Länge eines StringBuffer/Builder-Objekts lesen und setzen
  4.2.3 Daten anhängen
  4.2.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen
4.3 Vergleiche von Zeichenketten
  4.3.1 equals() in String und StringBuffer/StringBuilder
  4.3.2 equals() und hashCode() bei StringBuffer/StringBuilder
  4.3.3 Sprachabhängiges Vergleichen mit der Collator-Klasse
  4.3.4 Effiziente interne Speicherung für die Sortierung
4.4 Reguläre Ausdrücke
  4.4.1 Die Klassen Pattern und Matcher
  4.4.2 Mit MatchResult alle Ergebnisse einsammeln
  4.4.3 Das alternative Paket org.apache.regexp
4.5 Zerlegen von Zeichenketten
  4.5.1 Splitten von Zeichenketten mit split() aus Pattern
  4.5.2 split() in String
  4.5.3 Die Klasse Scanner
  4.5.4 StringTokenizer
  4.5.5 Der BreakIterator als Wort- und Satztrenner
4.6 Zeichenkodierungen
  4.6.1 Kodierungen für unterschiedliche Codepages
  4.6.2 Andere Klassen zur Konvertierung und das Paket java.nio.charset
  4.6.3 Base64-Kodierung
4.7 Formatieren von Ausgaben
  4.7.1 Zahlen, Prozente und Währungen mit NumberFormat formatieren
  4.7.2 Dezimalzahlformatierung mit DecimalFormat
  4.7.3 Formatieren mit format() aus String
  4.7.4 Ausgaben formatieren mit MessageFormat
Galileo Computing

5 Mathematisches

5.1 Arithmetik in Java
  5.1.1 Java-Sondertypen im Beispiel
5.2 Die Funktionen der Math-Klasse
  5.2.1 Attribute
  5.2.2 Winkelfunktionen – trigonometrische Funktionen und Arcus–Funktionen
  5.2.3 Runden von Werten
  5.2.4 Wurzel und Exponentialfunktionen
  5.2.5 Der Logarithmus
  5.2.6 Rest der ganzzahligen Division
  5.2.7 Absolutwerte und Maximum/Minimum
  5.2.8 Zufallszahlen
  5.2.9 Der nächste Bitte
5.3 Mathe bitte strikt
  5.3.1 Strikt Fließkomma mit strictfp
  5.3.2 Die Klassen Math und StrictMath
5.4 Die Random-Klasse
5.5 Große Zahlen
  5.5.1 Die Klasse BigInteger
  5.5.2 Funktionen von BigInteger
  5.5.3 Ganz lange Fakultäten
  5.5.4 Große Fließkommazahlen mit BigDecimal
  5.5.5 Komfortabel die Rechengenauigkeit setzen mit MathContext
5.6 Rechnen mit Einheiten: Java Units Specification
5.7 Weitere Klassen für mathematische Probleme
Galileo Computing

6 Eigene Klassen schreiben

6.1 Eigene Klassen definieren
  6.1.1 Methodenaufrufe und Nebeneffekte
  6.1.2 Argumentübergabe mit Referenzen
  6.1.3 Die this-Referenz
  6.1.4 Überdeckte Objektvariablen nutzen
6.2 Assoziationen zwischen Objekten
  6.2.1 Gegenseitige Abhängigkeiten von Klassen
6.3 Privatsphäre und Sichtbarkeit
  6.3.1 Wieso nicht freie Methoden und Variablen für alle?
  6.3.2 Privat ist nicht ganz privat: Es kommt darauf an, wer’s sieht
  6.3.3 Zugriffsmethoden für Attribute definieren
6.4 Statische Methoden und statische Attribute
  6.4.1 Warum statische Eigenschaften sinnvoll sind
  6.4.2 Statische Eigenschaften mit static
  6.4.3 Statische Eigenschaften über Referenzen nutzen?
  6.4.4 Warum die Groß- und Kleinschreibung wichtig ist
  6.4.5 Statische Eigenschaften und Objekteigenschaften
  6.4.6 Statische Variablen zum Datenaustausch
  6.4.7 Statische Blöcke als Klasseninitialisierer
6.5 Konstanten und Aufzählungen
  6.5.1 Konstanten über öffentliche statische final-Variablen
  6.5.2 Problem mit finalen Klassenvariablen
  6.5.3 Typsicherere Konstanten
  6.5.4 Aufzählungen mit enum in Java 5
  6.5.5 enum-Konstanten in switch
6.6 Objekte anlegen und zerstören
  6.6.1 Konstruktoren schreiben
  6.6.2 Einen anderen Konstruktor der gleichen Klasse aufrufen
  6.6.3 Initialisierung der Objekt- und Klassenvariablen
  6.6.4 Finale Werte im Konstruktor und in statischen Blöcken setzen
  6.6.5 Exemplarinitialisierer (Instanzinitialisierer)
  6.6.6 Zerstörung eines Objekts durch den Müllaufsammler
  6.6.7 Implizit erzeugte String-Objekte
  6.6.8 Private Konstruktoren, Utility-Klassen, Singleton und Fabriken
6.7 Vererbung
  6.7.1 Vererbung in Java
  6.7.2 Einfach- und Mehrfachvererbung
  6.7.3 Gebäude modelliert
  6.7.4 Konstruktoren in der Vererbung
  6.7.5 Sichtbarkeit protected
  6.7.6 Das Substitutionsprinzip
  6.7.7 Automatische und explizite Typanpassung
  6.7.8 Typen testen mit dem binären Operator instanceof
  6.7.9 Array-Typen und Kovarianz
  6.7.10 Methoden überschreiben
  6.7.11 Mit super eine Methode der Oberklasse aufrufen
  6.7.12 Kovariante Rückgabetypen
  6.7.13 Finale Klassen
  6.7.14 Nicht überschreibbare Funktionen
  6.7.15 Zusammenfassung zur Sichtbarkeit
  6.7.16 Sichtbarkeit in der UML
  6.7.17 Zusammenfassung: Konstruktoren und Methoden
6.8 Object ist die Mutter aller Oberklassen
  6.8.1 Klassenobjekte
  6.8.2 Objektidentifikation mit toString()
  6.8.3 Objektgleichheit mit equals() und Identität
  6.8.4 Klonen eines Objekts mit clone()
  6.8.5 Hashcodes
  6.8.6 Aufräumen mit finalize()
  6.8.7 Synchronisation
6.9 Die Oberklasse gibt Funktionalität vor
  6.9.1 Dynamisches Binden als Beispiel für Polymorphie
  6.9.2 Keine Polymorphie bei privaten, statischen und finalen Methoden
  6.9.3 Polymorphie bei Konstruktoraufrufen
6.10 Abstrakte Klassen und abstrakte Methoden
  6.10.1 Abstrakte Klassen
  6.10.2 Abstrakte Methoden
6.11 Schnittstellen
  6.11.1 Ein Polymorphie-Beispiel mit Schnittstellen
  6.11.2 Die Mehrfachvererbung bei Schnittstellen
  6.11.3 Erweitern von Interfaces – Subinterfaces
  6.11.4 Vererbte Konstanten bei Schnittstellen
  6.11.5 Vordefinierte Methoden einer Schnittstelle
  6.11.6 Abstrakte Klassen und Schnittstellen im Vergleich
  6.11.7 CharSequence als Beispiel einer Schnittstelle
  6.11.8 Die Schnittstelle Iterable
6.12 Innere Klassen
  6.12.1 Statische innere Klassen und Schnittstellen
  6.12.2 Mitglieds- oder Elementklassen
  6.12.3 Lokale Klassen
  6.12.4 Anonyme innere Klassen
  6.12.5 this und Vererbung
  6.12.6 Implementierung einer verketteten Liste
  6.12.7 Funktionszeiger
6.13 Generische Datentypen
  6.13.1 Einfache Klassenschablonen
  6.13.2 Einfache Methodenschablonen
  6.13.3 Umsetzen der Generics, Typlöschung und Raw-Types
  6.13.4 Einschränken der Typen
  6.13.5 Generics und Vererbung, Invarianz
  6.13.6 Wildcards
6.14 Die Spezial-Oberklasse Enum
  6.14.1 Methoden auf Enum-Objekten
  6.14.2 enum mit eigenen Konstruktoren und Methoden
6.15 Dokumentationskommentare mit javaDoc
  6.15.1 Einen Dokumentationskommentar setzen
  6.15.2 Mit javadoc eine Dokumentation erstellen
  6.15.3 HTML-Tags in Dokumentationskommentaren
  6.15.4 Generierte Dateien
  6.15.5 Weitere Dokumentationskommentare
  6.15.6 javaDoc und Doclets
  6.15.7 Veraltete (deprecated) Klassen, Konstruktoren und Methoden
Galileo Computing

7 Exceptions

7.1 Problembereiche einzäunen
  7.1.1 Exceptions in Java mit try und catch
  7.1.2 Eine Datei auslesen mit RandomAccessFile
  7.1.3 Ablauf einer Ausnahmesituation
  7.1.4 Wiederholung kritischer Bereiche
  7.1.5 throws im Methodenkopf angeben
  7.1.6 Abschließende Arbeiten mit finally
  7.1.7 Nicht erreichbare catch-Klauseln
7.2 Die Klassenhierarchie der Fehler
  7.2.1 Die Exception-Hierarchie
  7.2.2 Oberausnahmen fangen
  7.2.3 Alles geht als Exception durch
  7.2.4 RuntimeException muss nicht aufgefangen werden
  7.2.5 Harte Fehler: Error
7.3 Werfen eigener Exceptions
  7.3.1 Mit throw Ausnahmen auslösen
  7.3.2 Typecast auf ein null-Objekt für eine NullPointerException
  7.3.3 Neue Exception-Klassen definieren
  7.3.4 Geschachtelte Ausnahmen
7.4 Rückgabewerte bei ausgelösten Ausnahmen
7.5 Der Stack Trace
  7.5.1 Stack Trace aus Throwable
  7.5.2 Stack Trace aus Thread
7.6 Assertions
  7.6.1 Assertions in Java
  7.6.2 Assertions in eigenen Programmen nutzen
  7.6.3 Assertions aktivieren
Galileo Computing

8 Die Funktionsbibliothek

8.1 Die Java-Klassenphilosophie
  8.1.1 Übersicht über die Pakete der Standardbibliothek
8.2 Wrapper-Klassen
  8.2.1 Die Basisklasse Number für numerische Wrapper-Objekte
  8.2.2 Die Klasse Integer
  8.2.3 Wertebereich eines Typs und Überlaufkontrolle
  8.2.4 Unterschiedliche Ausgabeformate
  8.2.5 Autoboxing: Boxing und Unboxing
  8.2.6 Die Character-Klasse
  8.2.7 Die Boolean-Klasse
8.3 Benutzereinstellungen
  8.3.1 Eine zentrale Registry
  8.3.2 Einträge einfügen, auslesen und löschen
  8.3.3 Auslesen der Daten und Schreiben in anderem Format
  8.3.4 Auf Ereignisse horchen
8.4 Die Utility-Klasse System
  8.4.1 Systemeigenschaften der Java-Umgebung
  8.4.2 line.separator
  8.4.3 Browser-Version abfragen
  8.4.4 Property von der Konsole aus setzen
  8.4.5 Umgebungsvariablen des Betriebssystems
  8.4.6 Einfache Zeitmessung und Profiling
8.5 Ausführung von externen Programmen
  8.5.1 Arbeiten mit dem ProcessBuilder
  8.5.2 Die Rückgabe Process übernimmt die Prozesskontrolle
  8.5.3 DOS-Programme aufrufen
  8.5.4 Umgebungsvariablen und Startverzeichnis
  8.5.5 Auf das Ende warten
  8.5.6 Die Windows-Registry verwenden
  8.5.7 Einen HTML-Browser unter Windows aufrufen
8.6 Klassenlader (Class Loader)
  8.6.1 Woher die kleinen Klassen kommen
  8.6.2 Die wichtigsten drei Typen von Klassenladern
  8.6.3 Der java.lang.ClassLoader
  8.6.4 Hot Deployment mit dem URL-ClassLoader
  8.6.5 Das jre/lib/endorsed-Verzeichnis
  8.6.6 getContextClassLoader() vom Thread
  8.6.7 Wie heißt die Klasse mit der Methode main()?
8.7 Annotationen
  8.7.1 Die eingebauten Annotations-Typen aus java.lang
  8.7.2 @Deprecated
  8.7.3 Annotationen mit zusätzlichen Informationen
  8.7.4 @SuppressWarnings
Galileo Computing

9 Threads und nebenläufige Programmierung

9.1 Prozesse und Threads
  9.1.1 Wie parallele Programme die Geschwindigkeit steigern können
9.2 Threads erzeugen
  9.2.1 Threads über die Schnittstelle Runnable implementieren
  9.2.2 Thread mit Runnable starten
  9.2.3 Der Name eines Threads
  9.2.4 Die Klasse Thread erweitern
  9.2.5 Wer bin ich?
9.3 Der Ausführer (Executor) kommt
  9.3.1 Die Schnittstelle Executor
  9.3.2 Die Thread-Pools
  9.3.3 Threads mit Rückgabe über Callable
  9.3.4 Mehrere Callable abarbeiten
  9.3.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen
9.4 Die Zustände eines Threads
  9.4.1 Threads schlafen
  9.4.2 Das Ende eines Threads
  9.4.3 UncaughtExceptionHandler für unbehandelte Ausnahmen
  9.4.4 Einen Thread höflich mit Interrupt beenden
  9.4.5 Der stop() von außen und die Rettung mit ThreadDeath
  9.4.6 Ein Rendezvous mit join() und Barrier sowie Austausch mit Exchanger
  9.4.7 Mit yield() auf Rechenzeit verzichten
  9.4.8 Arbeit niederlegen und wieder aufnehmen
  9.4.9 Priorität
  9.4.10 Der Thread ist ein Dämon
9.5 Synchronisation über kritische Abschnitte
  9.5.1 Gemeinsam genutzte Daten
  9.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
  9.5.3 Punkte parallel initialisieren
  9.5.4 i++ sieht atomar aus, ist es aber nicht
  9.5.5 Kritische Abschnitte schützen
  9.5.6 Schützen mit ReentrantLock
  9.5.7 Synchronisieren mit synchronized
  9.5.8 Synchronized-Methoden der Klasse StringBuffer
  9.5.9 Mit synchronized synchronisierte Blöcke
  9.5.10 Look-Freigabe im Fall von Exceptions
  9.5.11 Mit synchronized nachträglich synchronisieren
  9.5.12 Monitore sind reentrant, gut für die Geschwindigkeit
  9.5.13 Synchronisierte Methodenaufrufe zusammenfassen
  9.5.14 Deadlocks
  9.5.15 Erkennen von Deadlocks
9.6 Synchronisation über Warten und Benachrichtigen
  9.6.1 Die Schnittstelle Condition
  9.6.2 Beispiel Erzeuger-Verbraucher-Programm
  9.6.3 Warten mit wait() und Aufwecken mit notify()
  9.6.4 Falls der Lock fehlt: IllegalMonitorStateException
  9.6.5 Semaphoren
9.7 Atomares und frische Werte mit volatile
  9.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
  9.7.2 Das Paket java.util.concurrent.atomic
9.8 Mit dem Thread verbundene Variablen
  9.8.1 ThreadLocal
  9.8.2 InheritableThreadLocal
9.9 Gruppen von Threads in einer Thread-Gruppe
  9.9.1 Aktive Threads in der Umgebung
  9.9.2 Etwas über die aktuelle Thread-Gruppe herausfinden
  9.9.3 Threads in einer Thread-Gruppe anlegen
  9.9.4 Methoden von Thread und ThreadGroup im Vergleich
9.10 Die Klassen Timer und TimerTask
  9.10.1 Job-Scheduler Quartz
9.11 Einen Abbruch der virtuellen Maschine erkennen
Galileo Computing

10 Raum und Zeit

10.1 Greenwich Mean Time (GMT)
10.2 Wichtige Datum-Klassen im Überblick
10.3 Sprachen der Länder
  10.3.1 Sprachen und Regionen über Locale-Objekte
10.4 Übersetzung durch ResourceBundle-Objekte
10.5 Zeitzonen
  10.5.1 Zeitzonen durch die Klasse TimeZone repräsentieren
10.6 Die Klasse Date
  10.6.1 Objekte erzeugen und Methoden nutzen
10.7 Calendar und GregorianCalendar
  10.7.1 Die abstrakte Klasse Calendar
  10.7.2 Der gregorianische Kalender
  10.7.3 Ostertage
  10.7.4 Abfragen und Setzen von Datumselementen
10.8 Formatieren der Datumsangaben
  10.8.1 Mit DateFormat und SimpleDateFormat formatieren
  10.8.2 Parsen von Datumswerten
  10.8.3 Parsen und Formatieren ab bestimmten Positionen
Galileo Computing

11 Datenstrukturen und Algorithmen

11.1 Datenstrukturen und die Collection-API
  11.1.1 Die Schnittstelle Collection
  11.1.2 Das erste Programm mit Container-Klassen
  11.1.3 Die Schnittstelle Iterable und das erweiterte for
  11.1.4 Generische Datentypen in der Collection-API
  11.1.5 Generischer Typ bei Iterable und konkreter Typ beim
erweiterten for
  11.1.6 Schnittstellen, die Collection erweitern, und Map
  11.1.7 Konkrete Container-Klassen
11.2 Mit einem Iterator durch die Daten wandern
  11.2.1 Die Schnittstellen Enumeration und Iterator
  11.2.2 Der typisierte Iterator
11.3 Listen
  11.3.1 Die Schnittstelle List
  11.3.2 Beispiel mit List-Methoden
  11.3.3 ArrayList
  11.3.4 Arrays.asList() und die »echten« Listen
  11.3.5 toArray() von Collection verstehen – die Gefahr einer Falle erkennen
  11.3.6 Die interne Arbeitsweise von ArrayList und Vector
  11.3.7 LinkedList
11.4 Stack (Kellerspeicher, Stapel)
  11.4.1 Die Methoden von Stack
  11.4.2 Ein Stack ist ein Vector – aha!
11.5 Queues (Schlangen)
  11.5.1 Blockierende Queues und Prioritätswarteschlangen
11.6 Assoziative Speicher HashMap und TreeMap
  11.6.1 Ein Objekt der Klasse HashMap erzeugen
  11.6.2 Einfügen und Abfragen der Datenstruktur
  11.6.3 Wichtige Eigenschaften von Assoziativspeichern
  11.6.4 Elemente im Assoziativspeicher müssen unveränderbar bleiben
  11.6.5 Aufzählen der Elemente
  11.6.6 Der Gleichheitstest, Hash-Wert und Klon einer Hash-Tabelle
  11.6.7 Die Arbeitsweise einer Hash-Tabelle
11.7 Die Properties-Klasse
  11.7.1 Properties setzen und lesen
  11.7.2 Properties verketten
  11.7.3 Eigenschaften ausgeben
  11.7.4 Hierarchische Eigenschaften
  11.7.5 Properties speichern
  11.7.6 Über die Beziehung Properties und Hashtable
11.8 Mengen (Sets)
  11.8.1 HashSet
  11.8.2 TreeSet – die Menge durch Bäume
  11.8.3 LinkedHashSet
11.9 Algorithmen in Collections
  11.9.1 Datenmanipulation: Umdrehen, Füllen, Kopieren
  11.9.2 Vergleichen von Objekten mit Comparator und Comparable
  11.9.3 Größten und kleinsten Wert einer Collection finden
  11.9.4 Sortieren
  11.9.5 Elemente in der Collection suchen
  11.9.6 Nicht-änderbare Datenstrukturen
  11.9.7 nCopies()
  11.9.8 Singletons
11.10 Synchronisation der Datenstrukturen
  11.10.1 Lock-Free-Algorithmen aus java.util.concurrent
  11.10.2 Wrapper zur Synchronisation
  11.10.3 CopyOnWriteArrayList und CopyOnWriteArraySet
11.11 Die abstrakten Basisklassen für Container
  11.11.1 Optionale Methoden
11.12 Die Klasse BitSet für Bitmengen
  11.12.1 Ein BitSet anlegen und füllen
  11.12.2 Mengenorientierte Operationen
  11.12.3 Funktionsübersicht
  11.12.4 Primzahlen in einem BitSet verwalten
11.13 Ein Design-Pattern durch Beobachten von Änderungen
  11.13.1 Design-Pattern
  11.13.2 Das Beobachter-Pattern (Observer/Observable)
Galileo Computing

12 Datenströme und Dateien

12.1 Datei und Verzeichnis
  12.1.1 Dateien und Verzeichnisse mit der Klasse File
  12.1.2 Dateieigenschaften und -attribute
  12.1.3 Änderungsdatum einer Datei, Nur-Lese-Rechte setzen
  12.1.4 Dateien berühren, neue Dateien anlegen, temporäre Dateien
  12.1.5 Umbenennen und Verzeichnisse anlegen
  12.1.6 Die Wurzel aller Verzeichnisse/Laufwerke
  12.1.7 Verzeichnisse listen und Dateien filtern
  12.1.8 Dateien und Verzeichnisse löschen
  12.1.9 Verzeichnisse nach Dateien rekursiv durchsuchen
  12.1.10 Namen der Laufwerke
  12.1.11 URL- und URI-Objekte aus einem File-Objekt ableiten
  12.1.12 Locking
  12.1.13 Sicherheitsprüfung
  12.1.14 Implementierungsmöglichkeiten für die Klasse File
  12.1.15 Mime-Typen
12.2 Dateien mit wahlfreiem Zugriff
  12.2.1 Ein RandomAccessFile zum Lesen und Schreiben öffnen
  12.2.2 Aus dem RandomAccessFile lesen
  12.2.3 Schreiben
  12.2.4 Die Länge des RandomAccessFile
  12.2.5 Hin und her in der Datei
  12.2.6 Wahlfreier Zugriff und Pufferung mit Unified I/O
12.3 Stream-Klassen und Reader/Writer
  12.3.1 Die abstrakten Basisklassen
  12.3.2 Übersicht über Ein-/Ausgabeklassen
12.4 Binäre Ein-/Ausgabe-Klassen InputStream/OutputStream
  12.4.1 Die abstrakte Basisklasse OutputStream
  12.4.2 Die Schnittstellen Closeable und Flushable
  12.4.3 Ein Datenschlucker
  12.4.4 Anwendung der Klasse FileOutputStream
  12.4.5 Die abstrakte Eingabeklasse InputStream
  12.4.6 Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar–Archiven laden
  12.4.7 Anwenden der Klasse FileInputStream
  12.4.8 Kopieren von Dateien
  12.4.9 Das FileDescriptor-Objekt
12.5 PrintStream und Konsolenausgaben
  12.5.1 Die Klasse PrintStream
  12.5.2 Die Schnittstelle Appendable
  12.5.3 System.in und System.out
  12.5.4 Ströme umlenken
  12.5.5 Den Bildschirm löschen und Textausgaben optisch aufwerten
12.6 Daten filtern durch FilterInputStream und
FilterOutputStream
  12.6.1 DataOutputStream/DataInputStream
12.7 Besondere OutputStream- und InputStream-Klassen
  12.7.1 Mit ByteArrayOutputStream in ein Byte-Feld schreiben
  12.7.2 Mit ByteArrayInputStream aus einem Byte-Feld lesen
  12.7.3 Ströme zusammensetzen mit SequenceInputStream
12.8 Die Unterklassen von Writer
  12.8.1 Die abstrakte Basisklasse Writer
  12.8.2 Ausgabemöglichkeiten durch PrintWriter erweitern
  12.8.3 Datenkonvertierung durch den OutputStreamWriter
  12.8.4 In Dateien schreiben mit der Klasse FileWriter
  12.8.5 StringWriter und CharArrayWriter
  12.8.6 Writer als Filter verketten
  12.8.7 Gepufferte Ausgabe durch BufferedWriter
  12.8.8 Daten mit FilterWriter filtern
12.9 Die Klassen um Reader
  12.9.1 Die abstrakte Basisklasse Reader
  12.9.2 Automatische Konvertierungen mit dem InputStreamReader
  12.9.3 Dateien lesen mit der Klasse FileReader
  12.9.4 StringReader und CharArrayReader
12.10 Die Filter für Zeichenströme
  12.10.1 Gepufferte Eingaben mit der Klasse BufferedReader
  12.10.2 LineNumberReader zählt automatisch Zeilen mit
  12.10.3 Eingaben filtern mit der Klasse FilterReader
  12.10.4 Daten mit der Klasse PushbackReader zurücklegen
12.11 Kommunikation zwischen Threads mit Pipes
  12.11.1 PipedOutputStream und PipedInputStream
  12.11.2 PipedWriter und PipedReader
12.12 Datenkompression
  12.12.1 Java-Unterstützung beim Komprimieren und Zusammenpacken
  12.12.2 Datenströme komprimieren
  12.12.3 Zip-Archive
  12.12.4 Jar-Archive
12.13 Prüfsummen
  12.13.1 Die Schnittstelle Checksum
  12.13.2 Die Klasse CRC32
  12.13.3 Die Adler32-Klasse
12.14 Persistente Objekte und Serialisierung
  12.14.1 Objekte speichern mit der Standard-Serialisierung
  12.14.2 Objekte über die Standard-Serialisierung lesen
  12.14.3 Die Schnittstelle Serializable
  12.14.4 Nicht serialisierbare Attribute mit transient aussparen
  12.14.5 Das Abspeichern selbst in die Hand nehmen
  12.14.6 Tiefe Objektkopien
  12.14.7 Versionenverwaltung und die SUID
  12.14.8 Wie die ArrayList serialisiert
  12.14.9 Probleme mit der Serialisierung
  12.14.10 Serialisieren in XML-Dateien
  12.14.11 JavaBeans Persistence
  12.14.12 XStream
12.15 Zugriff auf SMB-Server
  12.15.1 jCIFS
12.16 Tokenizer
  12.16.1 StreamTokenizer
  12.16.2 CSV (Comma Separated Values)-Dateien verarbeiten
12.17 Die Logging-API
Galileo Computing

13 Die eXtensible Markup Language (XML)

13.1 Auszeichnungssprachen
  13.1.1 Die Standard Generalized Markup Language (SGML)
  13.1.2 Extensible Markup Language (XML)
13.2 Eigenschaften von XML-Dokumenten
  13.2.1 Elemente und Attribute
  13.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten
  13.2.3 Schema – eine Alternative zu DTD
  13.2.4 Namensraum (Namespace)
  13.2.5 XML-Applikationen
13.3 Die Java-APIs für XML
  13.3.1 Das Document Object Model (DOM)
  13.3.2 Simple API for XML Parsing (SAX)
  13.3.3 Java Document Object Model (JDOM)
  13.3.4 Pull-API StAX
13.4 Serielle Verarbeitung mit StAX
  13.4.1 Unterschiede der Verarbeitungsmodelle
  13.4.2 XML-Dateien mit dem Cursor-Verfahren lesen
  13.4.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten
  13.4.4 Mit Filtern arbeiten
  13.4.5 XML-Dokumente schreiben
13.5 Serielle Verarbeitung von XML mit SAX
  13.5.1 Schnittstellen von SAX
  13.5.2 SAX-Parser erzeugen
  13.5.3 Die wichtigsten Methoden der Schnittstelle ContentHandler
13.6 XML-Dateien mit JDOM verarbeiten
  13.6.1 JDOM beziehen
  13.6.2 Paketübersicht
  13.6.3 Die Document-Klasse
  13.6.4 Eingaben aus der Datei lesen
  13.6.5 Das Dokument im XML-Format ausgeben
  13.6.6 Der Dokumenttyp
  13.6.7 Elemente
  13.6.8 Zugriff auf Elementinhalte
  13.6.9 Liste mit Unterelementen erzeugen
  13.6.10 Neue Elemente einfügen und ändern
  13.6.11 Attributinhalte lesen und ändern
  13.6.12 XPath
13.7 JAXP als Java-Schnittstelle zu XML
  13.7.1 Einführung in XSLT
  13.7.2 Umwandlung von XML-Dateien mit JDOM und JAXP
13.8 HTML-Dokumente einlesen
Galileo Computing

14 Grafikprogrammierung mit dem AWT

14.1 Das Abstract-Window-Toolkit
  14.1.1 Java Foundation Classes
14.2 Das Toolkit
14.3 Fenster unter grafischen Oberflächen
  14.3.1 AWT-Fenster darstellen
  14.3.2 Swing-Fenster darstellen
  14.3.3 Sichtbarkeit des Fensters
  14.3.4 Größe und Position des Fensters verändern
  14.3.5 Hauptprogramm von Frame/JFrame ableiten
  14.3.6 Fenster- und Dialog-Dekoration
14.4 Grundlegendes zum Zeichnen
  14.4.1 Die paint()-Methode für das AWT-Frame
  14.4.2 Zeichen von Inhalten mit JFrame
  14.4.3 Auffordern zum Neuzeichnen mit repaint()
  14.4.4 Die ereignisorientierte Programmierung ändert Fensterinhalte
14.5 Einfache Zeichenfunktionen
  14.5.1 Grundbegriffe: Koordinaten, Punkte, Pixel
  14.5.2 Linien
  14.5.3 Rechtecke
  14.5.4 Ovale und Kreisbögen
  14.5.5 Polygone und Polylines
14.6 Zeichenketten schreiben
  14.6.1 Einen neuen Zeichensatz bestimmen
  14.6.2 Ableiten eines neuen Fonts aus einem gegebenen Font
  14.6.3 Zeichensätze des Systems ermitteln
  14.6.4 Die Klasse FontMetrics
  14.6.5 True Type Fonts
14.7 Clipping-Operationen
14.8 Farben
  14.8.1 Zufällige Farbblöcke zeichnen
  14.8.2 Farbanteile zurückgeben
  14.8.3 Vordefinierte Farben
  14.8.4 Farben aus Hexadezimalzahlen erzeugen
  14.8.5 Einen helleren oder dunkleren Farbton wählen
  14.8.6 Farbmodelle HSB und RGB
  14.8.7 Die Farben des Systems
14.9 Bilder anzeigen und Grafiken verwalten
  14.9.1 Bilder laden: eine Übersicht
  14.9.2 Bilder über Toolkit laden für Applikationen
  14.9.3 Bilder in Applets
  14.9.4 Asynchrones Laden mit getImage() und dem MediaTracker
  14.9.5  Programm-Icon/Fenster-Icon setzen
  14.9.6 Das Image zeichnen
  14.9.7 Grafiken zentrieren
  14.9.8 Bilder im Speicher erzeugen
  14.9.9 Kein Flackern durch Double-Buffering
  14.9.10 Bilder skalieren
  14.9.11 VolatileImage
  14.9.12 Bilder lesen mit ImageIO
  14.9.13 Schreiben mit ImageIO
  14.9.14 Kann ImageIO ein Format behandeln?
  14.9.15 Komprimieren mit ImageIO
  14.9.16 Bilder im GIF-Format speichern
  14.9.17 Gif speichern mit dem ACME-Paket
  14.9.18 JPEG-Dateien mit dem Sun-Paket schreiben
  14.9.19 Java Image Management Interface (JIMI)
14.10 Java 2D-API
  14.10.1 Grafische Objekte zeichnen
  14.10.2 Geometrische Objekte durch Shape gekennzeichnet
  14.10.3 Zeichenhinweise durch RenderingHints
  14.10.4 Windungs-Regel
  14.10.5 Dicke und Art der Linien bestimmen
  14.10.6 Transformationen mit einem AffineTransform-Objekt
14.11 Von Produzenten, Konsumenten und Beobachtern
  14.11.1 Producer und Consumer für Bilder
  14.11.2 Beispiel für die Übermittlung von Daten
  14.11.3 Bilder selbst erstellen
  14.11.4 Die Bildinformationen wieder auslesen
14.12 Filter
  14.12.1 Grundlegende Eigenschaft von Filtern
  14.12.2 Konkrete Filterklassen
  14.12.3 Mit CropImageFilter Teile ausschneiden
  14.12.4 Transparenz
14.13 Drucken
  14.13.1 Drucken mit dem einfachen Ansatz
  14.13.2 Ein PrintJob
  14.13.3 Drucken der Inhalte
  14.13.4 Komponenten drucken
  14.13.5 Den Drucker am Parallelport ansprechen
  14.13.6 Bekannte Drucker
14.14 Grafikverarbeitung ohne grafische Oberfläche
  14.14.1 Xvfb-Server
  14.14.2 Pure Java AWT Toolkit (PJA)
Galileo Computing

15 Komponenten, Container und Ereignisse

15.1 Es tut sich was – Ereignisse beim AWT
  15.1.1 Die Klasse AWTEvent
  15.1.2 Events auf verschiedenen Ebenen
  15.1.3 Ereignisquellen und Horcher (Listener)
  15.1.4 Listener implementieren
  15.1.5 Listener bei Ereignisauslöser anmelden/abmelden
  15.1.6 Aufrufen der Listener
15.2 Varianten, das Fenster zu schließen
  15.2.1 Eine Klasse implementiert die Schnittstelle WindowListener
  15.2.2 Adapterklassen nutzen
  15.2.3 Innere Mitgliedsklassen und innere anonyme Klassen
  15.2.4 Generic Listener
15.3 Komponenten im AWT und in Swing
  15.3.1 Peer-Klassen und Lightweight-Komponenten
  15.3.2 Die Basis aller Komponenten: Component und JComponent
  15.3.3 Proportionales Vergrößern eines Fensters
  15.3.4 Dynamisches Layout während einer Größenänderung
  15.3.5 Hinzufügen von Komponenten
15.4 Swing-Fenster JFrame, JDialog, JWindows
  15.4.1 Kinder auf einem Swing-Fenster
  15.4.2 Schließen eines Swing-Fensters
  15.4.3 JWindow und JDialog
15.5 Informationstext über die Klasse JLabel
  15.5.1 Mehrzeiliger Text, HTML in der Darstellung
15.6 Die Klasse ImageIcon
  15.6.1 Die Schnittstelle Icon
  15.6.2 Was Icon und Image verbindet
15.7 Eine Schaltfläche (JButton)
  15.7.1 Der aufmerksame ActionListener
  15.7.2 Generic Listener für Schaltflächen-Ereignisse verwenden
  15.7.3 AbstractButton
  15.7.4 JToggleButton
15.8 Tooltips
15.9 Der Container JPanel
15.10 Alles Auslegungssache: die Layoutmanager
  15.10.1 FlowLayout
  15.10.2 Mit BorderLayout in allen Himmelsrichtungen
  15.10.3 GridLayout
  15.10.4 Der GridBagLayout-Manager
  15.10.5 Null-Layout
  15.10.6 Weitere Layoutmanager
15.11 Horizontale und vertikale Rollbalken
  15.11.1 Der AdjustmentListener, der auf Änderungen hört
15.12 JSlider
15.13 Ein Auswahlmenü – Choice, JComboBox
  15.13.1 ItemListener
  15.13.2 Zuordnung einer Taste mit einem Eintrag
  15.13.3 DateComboBox
15.14 Eines aus vielen – Kontrollfelder (JCheckBox)
  15.14.1 Ereignisse über ItemListener
15.15 Kontrollfeldgruppen, Optionsfelder, JRadioButton
15.16 Der Fortschrittsbalken JProgressBar
15.17 Rahmen (Borders)
15.18 Symbolleisten alias Toolbars
15.19 Menüs
  15.19.1 Die Menüleisten und die Einträge
  15.19.2 Menüeinträge definieren
  15.19.3 Mnemonics und Shortcuts (Accelerator)
  15.19.4 Popup-Menüs
15.20 Das Konzept des Model-View-Controllers
15.21 List-Boxen
15.22 JSpinner
15.23 Texteingabefelder
  15.23.1 Text in einer Eingabezeile
  15.23.2 Die Oberklasse der JText-Komponenten: JTextComponent
  15.23.3 JPasswordField
  15.23.4 Validierende Eingabefelder
  15.23.5 Mehrzeilige Textfelder
  15.23.6 Die Editor-Klasse JEditorPane
15.24 Bäume mit JTree-Objekten
  15.24.1 Selektionen bemerken
15.25 Tabellen mit JTable
  15.25.1 Ein eigenes Tabellen-Model
  15.25.2 AbstractTableModel
  15.25.3 DefaultTableModel
  15.25.4 Ein eigener Renderer für Tabellen
  15.25.5 Zell-Editoren
  15.25.6 Größe und Umrandung der Zellen
  15.25.7 Spalteninformationen
  15.25.8 Tabellenkopf von Swing-Tabellen
  15.25.9 Selektionen einer Tabelle
  15.25.10 Ein professionelles Tabellenlayout mit JGrid
15.26 JRootPane, JLayeredPane und JDesktopPane
  15.26.1 JRootPane und JLayeredPane
  15.26.2 JDesktopPane und die Kinder JInternalFrame
15.27 Dialoge
  15.27.1 Der Farbauswahldialog JColorChooser
  15.27.2 Der Dateiauswahldialog
15.28 Flexibles Java-Look&Feel
  15.28.1 UIManager
  15.28.2 Ändern des Aussehens Laufzeit
  15.28.3 Verbessern des Aussehens unter Windows mit WinLAF
15.29 Swing-Beschriftungen einer anderen Sprache geben
15.30 Die Zwischenablage (Clipboard)
15.31 Undo durchführen
15.32 Ereignisverarbeitung auf unterster Ebene
  15.32.1 Eigene Ereignisse in die Queue setzen
  15.32.2 Auf alle Ereignisse hören
15.33 AWT, Swing und die Threads
  15.33.1 Swing ist nicht Thread-sicher
  15.33.2 Swing-Elemente bedienen mit invokeLater(), invokeAndWait()
15.34 Selbst definierte Cursor
  15.34.1 Flackern des Mauszeigers bei Animationen vermeiden
15.35 Benutzerinteraktionen automatisieren
  15.35.1 Automatisch in die Tasten hauen
  15.35.2 Mausoperationen
  15.35.3 Methoden zur Zeitsteuerung
  15.35.4 Screenshots
  15.35.5 Funktionsweise und Beschränkungen
  15.35.6 MouseInfo und PointerInfo
15.36 Zeitliches Ausführen mit dem javax.swing.Timer
15.37 Alternativen zu AWT und Swing
  15.37.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor
  15.37.2 SWT
Galileo Computing

16 Das Netz

16.1 Grundlegende Begriffe
  16.1.1 Internet-Standards und RFC
16.2 URI und URL
  16.2.1 URI
  16.2.2 Die Klasse URL
  16.2.3 Informationen über eine URL
  16.2.4 Der Zugriff auf die Daten über die Klasse URL
  16.2.5 Verbindungen durch einen Proxy-Server
16.3 Die Klasse URLConnection
  16.3.1 Methoden und Anwendung von URLConnection
  16.3.2 Protokoll- und Content-Handler
  16.3.3 Bilder-Handler
  16.3.4 Zusammenfassung Content- und Protokoll-Handler
  16.3.5 Im Detail: vom URL zu URLConnection
  16.3.6 Der Protokoll-Handler für Jar-Dateien
  16.3.7 Autorisierte URL-Verbindungen und Proxy-Authentifizierung mit Basic Authentication
16.4 Das Common Gateway Interface
  16.4.1 Parameter für ein CGI-Programm
  16.4.2 Kodieren der Parameter für CGI-Programme
  16.4.3 Eine Suchmaschine ansprechen
16.5 Host- und IP-Adressen
  16.5.1 Lebt der Rechner?
  16.5.2 Das Netz ist Klasse …
  16.5.3 IP-Adresse des lokalen Hosts
16.6 NetworkInterface
16.7 Mit dem Socket zum Server
  16.7.1 Das Netzwerk ist der Computer
  16.7.2 Sockets
  16.7.3 Standarddienste unter Windows nachinstallieren
  16.7.4 Eine Verbindung zum Server aufbauen
  16.7.5 Server unter Spannung: die Ströme
  16.7.6 Die Verbindung wieder abbauen
  16.7.7 Ein kleines Echo – lebt der Rechner noch?
  16.7.8 Blockierendes Lesen
  16.7.9 Informationen über den Socket
  16.7.10 Mit telnet an den Ports horchen
  16.7.11 Reine Verbindungsdaten über SocketAddress
16.8 Client/Server-Kommunikation
  16.8.1 Warten auf Verbindungen
  16.8.2 Ein Multiplikations-Server
  16.8.3 Von außen erreichbar sein
16.9 SSL-Verbindungen mit JSSE
16.10 Apache Jakarta Commons HttpClient und Net
  16.10.1 Jakarta Commons HttpClient
  16.10.2 Jakarta Commons Net
16.11 E-Mail
  16.11.1 Wie eine E-Mail um die Welt geht
  16.11.2 Das Simple Mail Transfer Protocol und RFC 822
  16.11.3 POP (Post Office Protocol)
  16.11.4 E-Mails versenden mit der JavaMail API von SUN
  16.11.5 MimeMultipart-Nachrichten schicken
  16.11.6 E-Mails mittels POP3 abrufen
  16.11.7 Ereignisse und Suchen
16.12 Arbeitsweise eines Web-Servers
  16.12.1 Das Hypertext Transfer Protocol (HTTP)
  16.12.2 Anfragen an den Server
  16.12.3 Die Antworten vom Server
16.13 Datagram-Sockets
  16.13.1 Die Klasse DatagramSocket
  16.13.2 Datagramme und die Klasse DatagramPacket
  16.13.3 Auf ein hereinkommendes Paket warten
  16.13.4 Ein Paket zum Senden vorbereiten
  16.13.5 Methoden der Klasse DatagramPacket
  16.13.6 Das Paket senden
16.14 Tiefer liegende Netzwerkeigenschaften
  16.14.1 Internet Control Message Protocol (ICMP)
  16.14.2 MAC-Adresse
16.15 Multicast-Kommunikation
Galileo Computing

17 Servlets und Java Server Pages

17.1 Dynamische Web-Seiten und Servlets
  17.1.1 Was sind Servlets?
  17.1.2 Was sind Java Server Pages?
  17.1.3 Vorteil von JSP/Servlets gegenüber CGI-Programmen
17.2 Vom Client zum Server und wieder zurück
  17.2.1 Der bittende Client
  17.2.2 Welche Form von Antwort erzeugt ein Web-Server?
  17.2.3 Wer oder was ist MIME?
17.3 Servlets und JSPs entwickeln und testen
  17.3.1 Servlet-Container
  17.3.2 Web-Server mit Servlet-Funktionalität
17.4 Java Server Pages in Tomcat und Eclipse
  17.4.1 Download und Installation
  17.4.2 Ablageort für eigene JSP-Seiten
  17.4.3 Web-Applikationen
  17.4.4 Zuordnung von Web-Applikationen zu physikalischen Verzeichnissen
17.5 Skript-Elemente
  17.5.1 Scriptlets
  17.5.2 Ausdrücke
  17.5.3 Deklarationen
  17.5.4 Kommentare
  17.5.5 Quoting
  17.5.6 Entsprechende XML-Tags
17.6 Implizite Objekte
17.7 Was der Browser mit auf den Weg gibt – HttpServletRequest
  17.7.1 Verarbeiten der Header
  17.7.2 Hilfsfunktion im Umgang mit Headern
  17.7.3 Übersicht der Browser-Header
17.8 Formulardaten
17.9 Das HttpServletResponse-Objekt
  17.9.1 Automatisches Neuladen
  17.9.2 Seiten umlenken
17.10 JSP-Direktiven
  17.10.1 page-Direktiven im Überblick
  17.10.2 include-Direktive
  17.10.3 Mit JSPs Bilder generieren
17.11 Aktionen
  17.11.1 Aktion include
  17.11.2 Aktion forward
  17.11.3 Aktion plugin
17.12 Beans
  17.12.1 Beans in JSP-Seiten anlegen, Attribute setzen und erfragen
  17.12.2 Der schnelle Zugriff auf Parameter
17.13 Kleine Kekse: die Klasse Cookies
  17.13.1 Cookies erzeugen und setzen
  17.13.2 Cookies vom Servlet einlesen
  17.13.3 Kleine Helfer für Cookies
  17.13.4 Cookie-Status ändern
  17.13.5 Langlebige Cookies
17.14 Sitzungsverfolgung (Session Tracking)
  17.14.1 Das mit einer Sitzung verbundene Objekt HttpSession
  17.14.2 Werte mit einer Sitzung assoziieren und auslesen
  17.14.3 URL-Rewriting
  17.14.4 Zusätzliche Informationen
17.15 Tag-Libraries
  17.15.1 Standard Tag Library (JSTL)
  17.15.2 Jakarta Taglibs Project
17.16 Servlets
  17.16.1 Servlets compilieren
  17.16.2 Die Servlets in das classes-Verzeichnis
  17.16.3 Servlet-Mapping
17.17 Der Lebenszyklus eines Servlets
  17.17.1 Initialisierung in init()
  17.17.2 Abfragen bei service()
  17.17.3 Mehrere Anfragen beim Servlet und die Thread-Sicherheit
  17.17.4 Das Ende eines Servlets
17.18 Das HttpServletResponse-Objekt
  17.18.1 Wir generieren eine Web-Seite
  17.18.2 Binärdaten senden
  17.18.3 Noch mehr über Header, die der Server setzt
17.19 Objekte und Dateien per POST verschicken
  17.19.1 Datei-Upload
17.20 Servlets und Sessions
17.21 Weiterleiten und Einbinden von Servlet-Inhalten
17.22 Inter-Servlet-Kommunikation
  17.22.1 Daten zwischen Servlets teilen
17.23 Internationalisierung
  17.23.1 Die Länderkennung des Anfragers auslesen
  17.23.2 Länderkennung für die Ausgabe setzen
  17.23.3 Westeuropäische Texte senden
17.24 Tomcat: Spezielles
  17.24.1 Tomcat als Service unter Windows NT ausführen
  17.24.2 Interessante Links zum Thema Servlets/JSP
Galileo Computing

18 Verteilte Programmierung mit RMI und SOAP

18.1 Entfernte Methoden
  18.1.1 Wie entfernte Methoden arbeiten
  18.1.2 Stellvertreter (Proxy)
  18.1.3 RMI
  18.1.4 Wie die Stellvertreter die Daten übertragen
  18.1.5 Probleme mit entfernten Methoden
18.2 Nutzen von RMI bei Middleware-Lösungen
18.3 Die Lösung für Java ist RMI
  18.3.1 Entfernte Objekte programmieren
  18.3.2 Entfernte und lokale Objekte im Vergleich
18.4 Definition einer entfernten Schnittstelle
18.5 Implementierung der Remote-Schnittstelle
18.6 Stellvertreterobjekte erzeugen
18.7 Der Namensdienst (Registry)
  18.7.1 Der Port
18.8 Der Server
  18.8.1 Entfernte Objekte beim Namensdienst anmelden
  18.8.2 Automatisches Anmelden bei Bedarf
18.9 Einen Client programmieren
  18.9.1 Einfaches Logging
18.10 Aufräumen mit dem DGC
18.11 Entfernte Objekte übergeben und laden
  18.11.1 Klassen vom RMI-Klassenlader nachladen
18.12 Registry wird vom Server gestartet
18.13 RMI über die Firewall
  18.13.1 RMI über HTTP getunnelt
18.14 RMI und CORBA
18.15 Daily Soap
  18.15.1 SOAP-Implementierungen
  18.15.2 Einen Client mit der Apache-Bibliothek implementieren
  18.15.3 Der Seifen-Server
18.16 Java Message Service (JMS)
Galileo Computing

19 Applets, Midlets und Sound

19.1 Applets und Applikationen – wer darf was?
19.2 Das erste Hallo-Applet
19.3 Die Zyklen eines Applets
19.4 Parameter an das Applet übergeben
19.5 Methoden der Applet- und AppletContext-Klasse
  19.5.1 Wie das Applet den Browser-Inhalt ändern kann
  19.5.2 Den Ursprung des Applets erfragen
  19.5.3 Datenaustausch zwischen Applets
  19.5.4 Was ein Applet alles darf
19.6 Fehler in Applets finden
19.7 Browserabhängiges Verhalten
  19.7.1 Java im Browser aktiviert?
  19.7.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
  19.7.3 Datenaustausch zwischen Applets und Java-Skripten
19.8 Musik in einem Applet und in Applikationen
19.9 Webstart
19.10 Java 2 Micro Edition
  19.10.1 Konfigurationen
  19.10.2 Profile
Galileo Computing

20 Datenbankmanagement mit JDBC

20.1 Das relationale Modell
20.2 JDBC: der Zugriff auf Datenbanken über Java
20.3 Die Rolle von SQL
  20.3.1 Ein Rundgang durch SQL-Anfragen
  20.3.2 Datenabfrage mit der Data Query Language (DQL)
  20.3.3 Tabellen anlegen mit der Data Definition Language (DDL)
20.4 Datenbanktreiber für den Zugriff
  20.4.1 Treibertypen
20.5 Datenbanken und ihre Treiber
  20.5.1 Derby
  20.5.2 MySQL
  20.5.3 Microsoft Access
  20.5.4 Ein Typ-4-Treiber für den Microsoft SQL Server 2000
  20.5.5 Oracle10g
  20.5.6 Eclipse-Plugins zum Durchschauen von Datenbanken
20.6 Eine Beispielabfrage
20.7 Mit Java an eine Datenbank andocken
  20.7.1 Der Treibermanager
  20.7.2 Den Treiber laden
  20.7.3 Eine Aufzählung aller Treiber
  20.7.4 Log-Informationen
  20.7.5 Verbindung zur Datenbank
20.8 Datenbankabfragen
  20.8.1 Abfragen über das Statement-Objekt
  20.8.2 Ergebnisse einer Abfrage in ResultSet
  20.8.3 Java und SQL-Datentypen
  20.8.4 Unicode in der Spalte korrekt auslesen
  20.8.5 wasNull() bei ResultSet
  20.8.6 Wie viele Zeilen hat ein ResultSet?
20.9 Die Ausnahmen bei JDBC
20.10 Transaktionen
20.11 Elemente einer Datenbank hinzufügen und aktualisieren
  20.11.1 Batch-Updates
20.12 Vorbereitete Anweisungen (Prepared Statements)
  20.12.1 PreparedStatement-Objekte vorbereiten
  20.12.2 Werte für die Platzhalter eines PreparedStatement
20.13 Die LOBs (Large Objects)
  20.13.1 Einen BLOB besorgen
20.14 Die SQL3-Datentypen ARRAY, STRUCT und REF
20.15 Metadaten
  20.15.1 Metadaten über die Tabelle
  20.15.2 Informationen über die Datenbank
20.16 DataSource
  20.16.1 Die Schnittstelle DataSource
Galileo Computing

21 Reflection und Annotationen

21.1 Metadaten
  21.1.1 XDoclet
21.2 Mit dem Class-Objekt etwas über Klassen erfahren
  21.2.1 An ein Class-Objekt kommen
  21.2.2 Was das Class-Objekt beschreibt
  21.2.3 Der Name der Klasse
  21.2.4 Die Arbeit auf dem Feld
  21.2.5 instanceof mit Class-Objekten
  21.2.6 Oberklassen finden
  21.2.7 Implementierte Interfaces einer Klasse oder eines Inferfaces
  21.2.8 Modifizierer und die Klasse Modifier
  21.2.9 Die Attribute einer Klasse
  21.2.10 Methoden einer Klasse erfragen
  21.2.11 Konstruktoren einer Klasse
  21.2.12 Annotationen
21.3 Objekte manipulieren
  21.3.1 Objekte erzeugen
  21.3.2 Die Belegung der Variablen erfragen
  21.3.3 Eine generische toString()-Funktion
  21.3.4 Variablen setzen
  21.3.5 Private Attribute ändern
21.4 Methoden aufrufen
  21.4.1 Statische Methoden aufrufen
  21.4.2 Dynamische Methodenaufrufe bei festen Methoden beschleunigen
21.5 Informationen und Identifizierung von Paketen
  21.5.1 Geladene Pakete
21.6 Annotationen
  21.6.1 Neue Annotationen definieren
  21.6.2 Annotationen mit genau einem Element
  21.6.3 Beliebige Schlüssel-/Werte-Paare
  21.6.4 Vorbelegte Elemente
  21.6.5 Annotieren von Annotations-Typen
  21.6.6 Annotationen zur Laufzeit ausgelesen
  21.6.7 Mögliche Nachteile von Annotationen
Galileo Computing

22 Komponenten durch Bohnen

22.1 Grundlagen der Komponententechnik
  22.1.1 Brauchen wir Komponenten überhaupt?
  22.1.2 Visuelle und nichtvisuelle Komponenten
  22.1.3 Komponenten-Technologien von Microsoft
22.2 Das JavaBeans Development Kit (BDK)
  22.2.1 Eine Beispielsitzung im BDK
  22.2.2 Verknüpfungen zwischen Komponenten
  22.2.3 Beans speichern
22.3 Die kleinste Bohne der Welt
22.4 Jar-Archive für Komponenten
22.5 Worauf JavaBeans basieren
22.6 Eigenschaften
  22.6.1 Einfache Eigenschaften
  22.6.2 Boolesche Eigenschaften
  22.6.3 Indizierte Eigenschaften
22.7 Ereignisse
  22.7.1 Multicast und Unicast
  22.7.2 Namenskonvention
22.8 Weitere Eigenschaften
  22.8.1 Gebundene Eigenschaften
  22.8.2 Anwendung von PropertyChange bei AWT-Komponenten
  22.8.3 Veto-Eigenschaften. Dagegen!
22.9 Bean-Eigenschaften anpassen
  22.9.1 Customizer
22.10 Property-Editoren
22.11 BeanInfo
22.12 Beliebte Fehler
Galileo Computing

23 Java Management Extensions (JMX)

23.1 Überwachen von Systemzuständen
23.2 MBean-Typen, MBean-Server und weitere Begriffe
  23.2.1 MBeans des Systems
23.3 JConsole
23.4 Der MBeanServer
23.5 Eine eigene Standard-MBean
Galileo Computing

24 Java Native Interface (JNI)

24.1 Java Native Interface und Invocation-API
24.2 Einbinden einer C-Funktion in ein Java-Programm
  24.2.1 Schreiben des Java-Codes
  24.2.2 Compilieren des Java-Programms
  24.2.3 Erzeugen der Header-Datei
  24.2.4 Implementierung der Methode in C
  24.2.5 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek
  24.2.6 Setzen der Umgebungsvariable
24.3 Nativ die Stringlänge ermitteln
24.4 Erweiterte JNI-Eigenschaften
  24.4.1 Klassendefinitionen
  24.4.2 Zugriff auf Attribute
24.5 Links und Weiteres
Galileo Computing

25 Sicherheitskonzepte

25.1 Der Sandkasten (Sandbox)
25.2 Sicherheitsmanager (Security Manager)
  25.2.1 Der Sicherheitsmanager bei Applets
  25.2.2 Sicherheitsmanager aktivieren
  25.2.3 Wie nutzen die Java-Bibliotheken den Sicherheitsmanager?
  25.2.4 Rechte vergeben durch Policy-Dateien
  25.2.5 Erstellen von Rechte-Dateien mit dem grafischen Policy-Tool
  25.2.6 Kritik an den Policies
25.3 Dienstprogramme zur Signierung
  25.3.1 Mit keytool Schlüssel erzeugen
  25.3.2 Signieren mit jarsigner
25.4 Digitale Unterschriften
  25.4.1 Die MDx-Reihe
  25.4.2 Secure Hash Algorithm (SHA)
  25.4.3 Mit der Security-API einen Fingerabdruck berechnen
  25.4.4 Die Klasse MessageDigest
  25.4.5 Unix-Crypt
25.5 Verschlüsseln von Daten(-strömen)
  25.5.1 Den Schlüssel bitte
  25.5.2 Verschlüsseln mit Cipher
  25.5.3 Verschlüsseln von Datenströmen
Galileo Computing

26 Dienstprogramme für die Java-Umgebung

26.1 Die Werkzeuge im Überblick
26.2 Der Compiler javac
  26.2.1 Der Java-Interpreter java
  26.2.2 Der Unterschied zwischen java.exe und javaw.exe
26.3 Das Archivformat Jar
  26.3.1 Das Dienstprogramm Jar benutzen
  26.3.2 Das Manifest
  26.3.3 Applikationen in Jar-Archiven starten
  26.3.4 Applets in Jar-Archiven
26.4 Ant
  26.4.1 Bezug und Installation von Ant
  26.4.2 Properties
  26.4.3 Externe und vordefinierte Properties
  26.4.4 Weitere Leistungen
26.5 Einpacken von Java-Programmen in ein exe mit JSmooth
26.6 Decompiler
  26.6.1 Jad, ein schneller Decompiler
  26.6.2 Decompilieren erschweren
26.7 Obfuscate Programm RetroGuard
26.8 Sourcecode Beautifier
Galileo Computing

Stichwortverzeichnis

 
 
  Zum Katalog
Zum Katalog: Java ist auch eine Insel
Java ist auch eine Insel
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Einstieg in Java
Einstieg in Java


Zum Katalog: Java lernen mit Eclipse 3
Java lernen mit Eclipse


Zum Katalog: Einstieg in Eclipse 3.0
Einstieg in Eclipse 3.0


Zum Katalog: Tomcat 5
Tomcat 5


Zum Katalog: Cocoon 2 und Tomcat
Cocoon 2 und Tomcat


Zum Katalog: Java und XML
Java und XML


Zum Katalog: Java für Windows
Java für Windows


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info





Copyright © Galileo Press GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de