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 (Tiger-Release)
Buch: Java ist auch eine Insel





Galileo Computing
1416 S., CD
4., akt. und erw. Auflage
49,90 Euro
ISBN 3-89842-526-6
Dies ist die "Java-Insel" in ihrer 4., komplett überarbeiteten und erweiterten Auflage.

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

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

Vorwort

Vorwort 3 – Update
Vorwort Version 4
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
  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-Model
  1.3.9 Wofür Java nicht geeignet ist
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 Entwicklungs- und Laufzeitumgebungen
  1.5.1 Aller Anfang mit dem Java SDK
  1.5.2 Die Entwicklungsumgebung von Sun: Sun ONE Studio und NetBeans
  1.5.3 IBM und Eclipse
  1.5.4 JBuilder von Borland
  1.5.5 Together
  1.5.6 Ein Wort zu Microsoft, Java und zu J++
  1.5.7 Direkt ausführbare Programme
1.6 Installationsanleitung für das Java 2
  1.6.1 Das Java 2 SDK beziehen
  1.6.2 Java SDK unter Windows installieren
  1.6.3 Compiler und Interpreter nutzen
  1.6.4 Installation der Java Laufzeitumgebung (1.4) unter Linux
1.7Das erste Programm compilieren und testen
  1.7.1 Häufige Compiler- und Interpreterprobleme
1.8 Eclipse
  1.8.1 Eclipse starten
  1.8.2 Das erste Projekt anlegen
  1.8.3 Eine Klasse hinzufügen
  1.8.4 Übersetzen und Ausführen
  1.8.5 J2SDK statt JRE
  1.8.6 Start eines Programmes ohne Speicheraufforderung
  1.8.7 Java 5.0 in Eclipse
  1.8.8 Projekt einfügen oder Workspace für die Aufgaben wechseln
  1.8.9 Plugins für Eclipse
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 Unicode-Tabellen unter Windows
  2.2.3 Literale
  2.2.4 Bezeichner
  2.2.5 Reservierte Schlüsselwörter
  2.2.6 Token
  2.2.7 Semantik
  2.2.8 Kommentare
  2.2.9 Funktionsaufrufe als Anweisungen
  2.2.10 Die leere Anweisung
  2.2.11 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 Reihenfolge und 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
  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 Dokumentationskommentare
  2.8.1 Ein Dokumentationskommentar setzen
  2.8.2 Mit javadoc eine Dokumentation erstellen
  2.8.3 Generierte Dateien
  2.8.4 Weitere Dokumentationskommentare
  2.8.5 Schalter für das Programm javadoc
  2.8.6 JavaDoc und Doclets
  2.8.7 Bitoperationen
  2.8.8 Vorzeichenlose Bytes in ein Integer und Char konvertieren
  2.8.9 Variablen mit Xor vertauschen
  2.8.10 Die Verschiebeoperatoren
  2.8.11 Setzen, Löschen, Umdrehen und Testen von Bits
  2.8.12 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 Modularität und Wiederverwertbarkeit
3.2 Klassen benutzen
  3.2.1 Die Klasse Point
  3.2.2 Etwas über die UML
  3.2.3 Anlegen eines Exemplars einer Klasse mit new
  3.2.4 Zugriff auf Variablen und Methoden mit dem ».«
  3.2.5 Konstruktoren
3.3 Import und Pakete
3.4 Die API-Dokumentation
3.5 Mit Referenzen arbeiten
  3.5.1 Die null-Referenz
  3.5.2 Zuweisungen bei Referenzen
  3.5.3 Funktionen mit nichtprimitiven Parametern
  3.5.4 Gleichheit von Objekten und die Methode equals()
3.6 Arrays
  3.6.1 Deklaration von Arrays
  3.6.2 Arrays mit Inhalt
  3.6.3 Die Länge eines Arrays über das Attribut length
  3.6.4 Zugriff auf die Elemente
  3.6.5 Array-Objekte erzeugen
  3.6.6 Fehler bei Arrays
  3.6.7 Arrays mit nicht-primitiven Elementen
  3.6.8 Initialisierte Array-Objekte
  3.6.9 Die erweiterte for-Schleife
  3.6.10 Mehrdimensionale Arrays
  3.6.11 Die Wahrheit über die Array-Initialisierung
  3.6.12 Mehrere Rückgabewerte
  3.6.13 Argument per Referenz übergeben
  3.6.14 Arrays klonen
  3.6.15 Feldinhalte kopieren
  3.6.16 Die Klasse Arrays zum Vergleichen, Füllen, Suchen
  3.6.17 Methode mit variabler Argumentanzahl (vararg)
3.7 Der Einstiegspunkt für das Laufzeitsystem main()
  3.7.1 Kommandozeilen-Parameter ausgeben
  3.7.2 Der Rückgabewert von main() und System.exit()
  3.7.3 Parser der Kommandozeilenargumente Apache CLI
3.8 Eigene Pakete schnüren
  3.8.1 Die package-Anweisung
  3.8.2 Importieren von Klassen mit import
  3.8.3 Paketnamen
  3.8.4 Hierarchische Strukturen und das Default-Package
  3.8.5 Klassen mit gleiche Namen in unterschiedlichen Paketen
  3.8.6 Statische Imports
  3.8.7 Eine Verzeichnisstruktur für eigene Projekte
Galileo Computing

4 Der Umgang mit Zeichenketten

4.1 Strings und deren Anwendung
  4.1.1 String-Objekte für konstante Zeichenketten
  4.1.2 String-Länge
  4.1.3 Gut, dass wir verglichen haben
  4.1.4 String-Teile extrahieren
  4.1.5 Suchen und Ersetzen
  4.1.6 Veränderte Strings liefern
  4.1.7 Unterschiedliche Typen in Zeichenketten konvertieren
4.2 Veränderbare Zeichenketten mit StringBuffer/StringBuilder
  4.2.1 Anlegen von StringBuffer-Objekten
  4.2.2 Die Länge eines StringBuffer-Objekts lesen und setzen
  4.2.3 Daten anhängen
  4.2.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen
4.3 Vergleiche von Zeichenketten
  4.3.1 equals() in String und StringBuffer
  4.3.2 Sollte es ein equals() und hash() bei StringBuffer geben?
  4.3.3 Sprachabhängiges Vergleichen mit der Collator-Klasse
  4.3.4 Effiziente interne Speicherung für die Sortierung
4.4 Zeichenkodierungen
  4.4.1 Standard-Encodings
  4.4.2 Base64-Kodierung
4.5 Reguläre Ausdrücke
4.6 Zerlegen von Zeichenketten
  4.6.1 StringTokenizer
  4.6.2 Splitten von Zeichenketten mit split() aus Pattern
  4.6.3 split() in String
  4.6.4 Die neue Klasse Scanner
  4.6.5 Der BreakIterator als Wort- und Satztrenner
4.7 Formatieren von Ausgaben
  4.7.1 Prozente, Zahlen und Währungen ausgeben mit NumberFormat
  4.7.2 Ausgaben formatieren mit MessageFormat
  4.7.3 Dezimalzahlformatierung mit DecimalFormat
  4.7.4 Formatieren mit format()
Galileo Computing

5 Mathematisches

5.1 Arithmetik in Java
  5.1.1 Java-Sondertypen im Beispiel
  5.1.2 Soll eine Division durch Null zur Übersetzungszeit erkannt werden?
5.2 Die Funktionen der Math-Klasse
  5.2.1 Attribute
  5.2.2 Winkelfunktionen (trigonometrische Funktionen und 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.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 BigDecimal
5.6 Rechnen mit Einheiten: Java Units Specification
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.3 Privatsphäre und Sichtbarkeit
  6.3.1 Wieso nicht freie Methoden und Variablen für alle?
  6.3.2 Privat ist nicht ganz privat. Es kommt darauf an, wer’s sieht
  6.3.3 Zugriffsmethoden für Attribute definieren
  6.3.4 Zusammenfassung zur Sichtbarkeit
  6.3.5 Sichtbarkeit in der UML
6.4 Statische Methoden und Attribute
  6.4.1 Warum statische Eigenschaften sinnvoll sind
  6.4.2 Statische Eigenschaften mit static
  6.4.3 Statische Eigenschaften als Objekteigenschaften nutzen
  6.4.4 Statische Eigenschaften und Objekteigenschaften
  6.4.5 Statische Variablen zum Datenaustausch
  6.4.6 Warum die Groß- und Kleinschreibung wichtig ist
  6.4.7 Statische Blöcke
6.5 Konstanten und Aufzählungen
  6.5.1 Konstanten mit dem Schlüsselwort final bei Variablen
  6.5.2 Problem mit finalen Klassenvariablen
  6.5.3 Typsicherere Konstanten
  6.5.4 Aufzählungen und 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 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.6.9 Zusammenfassung: Konstruktoren und Methoden
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
  6.7.6 Das Substitutionsprinzip
  6.7.7 Automatische und explizite Typanpassung
  6.7.8 Array-Typen
  6.7.9 Finale Klassen
  6.7.10 Unterklassen prüfen mit dem Operator instanceof
  6.7.11 Methoden überschreiben
  6.7.12 super: Aufrufen einer Methode aus der Oberklasse
  6.7.13 Nicht überschreibbare Funktionen
6.8 Die oberste aller Klassen: Object
  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
  6.10.1 Abstrakte Klassen
  6.10.2 Abstrakte Methoden
  6.10.3 Über abstract final
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 CharSequence als Beispiel einer Schnittstelle
  6.11.7 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 Eine Sich-Selbst-Implementierung
  6.12.6 this und Vererbung
  6.12.7 Implementierung einer verketteten Liste
  6.12.8 Funktionszeiger
6.13 Generische Datentypen
  6.13.1 Einfache Klassenschablonen
  6.13.2 Einfache Methodenschablonen
  6.13.3 Generics und Vererbung
  6.13.4 Einschränken der Typen
  6.13.5 Umsetzen der Generics, Typlöschung und Raw-Types
  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 Gegenseitige Abhängigkeiten von Klassen
6.16 Veraltete (deprecated) Methoden/Konstruktoren
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 Ausnahmen, die nicht aufgefangen werden müssen: RuntimeException
  7.2.5 Harte Fehler: Error
7.3 Werfen eigener Exceptions
  7.3.1 Typecast auf ein null-Objekt für eine NullPointerException
  7.3.2 Neue Exception-Klassen definieren
7.4 Rückgabewerte bei ausgelösten Ausnahmen
7.5 Stack-Aufruf analysieren
7.6 Assertions
  7.6.1 Assertions in eigenen Programmen nutzen
  7.6.2 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 Character-Klasse
  8.2.2 Die Boolean-Klasse
  8.2.3 Die Basisklasse Number für numerische Wrapper-Objekte
  8.2.4 Die Klasse Integer
  8.2.5 Behandlung von Überlauf
  8.2.6 Unterschiedliche Ausgabeformate
  8.2.7 Autoboxing: Boxing und Unboxing
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 Systemeigenschaften der Java-Umgebung
  8.4.1 line.separator
  8.4.2 Browser-Version abfragen
  8.4.3 Property von der Konsole aus setzen
  8.4.4 Umgebungsvariablen des Betriebssystems
8.5 Ausführung von externen Programmen
  8.5.1 DOS-Programme aufrufen
  8.5.2 Die Windows-Registry verwenden
  8.5.3 Einen HTML-Browser unter Windows aufrufen
8.6 Klassenlader (Class Loader)
  8.6.1 Woher die kleinen Klassen kommen
  8.6.2 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 Wie heißt die Klasse mit der Methode main()?
8.7 Zeitmessung und Profiling
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 Threads über Runnable starten
  9.2.3 Die Klasse Thread erweitern
  9.2.4 Erweitern von Thread oder Implementieren von Runnable?
9.3 Die Zustände eines Threads
  9.3.1 Das Ende eines Threads
  9.3.2 Einen Thread höflich mit Interrupt beenden
  9.3.3 Der stop() von außen
  9.3.4 Das ThreadDeath-Objekt
  9.3.5 Auf das Ende warten mit join()
  9.3.6 Threads schlafen
  9.3.7 Eine Zeituhr
9.4 Arbeit niederlegen und wieder aufnehmen
9.5 Priorität
  9.5.1 Threads hoher Priorität und das AWT
  9.5.2 Granularität und Vorrang
9.6 Dämonen
9.7 Kooperative und nichtkooperative Threads
9.8 Synchronisation über kritische Abschnitte
  9.8.1 Gemeinsam genutzte Daten
  9.8.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
  9.8.3 Punkte parallel initialisieren
  9.8.4 i++ sieht atomar aus, ist es aber nicht
  9.8.5 Abschnitte mit synchronized schützen
  9.8.6 Monitore
  9.8.7 Synchronized-Methode am Beispiel der Klasse StringBuffer
  9.8.8 Synchronisierte Blöcke
  9.8.9 Vor- und Nachteile von synchronisierten Blöcken und Methoden
  9.8.10 Nachträglich synchronisieren
  9.8.11 Monitore sind reentrant, gut für die Geschwindigkeit
  9.8.12 Deadlocks
  9.8.13 Erkennen von Deadlocks
9.9 Synchronisation über Warten und Benachrichtigen
  9.9.1 Warten mit wait() und Aufwecken mit notify()
  9.9.2 Falls der Lock fehlt: IllegalMonitorStateException
  9.9.3 Mehrere Wartende und notifyAll()
  9.9.4 wait() mit einer Zeitspanne
  9.9.5 Beispiel Erzeuger-Verbraucher-Programm
  9.9.6 Semaphoren
9.10 Atomares und frische Werte mit volatile
  9.10.1 Das Paket java.util.concurrent.atomic
9.11 Aktive Threads in der Umgebung
9.12 Gruppen von Threads in einer Thread-Gruppe
  9.12.1 Etwas über die aktuelle Thread-Gruppe herausfinden
  9.12.2 Threads in einer Thread-Gruppe anlegen
  9.12.3 Methoden von Thread und ThreadGroup im Vergleich
9.13 Die Klassen Timer und TimerTask
  9.13.1 Job-Scheduler Quartz
9.14 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 Zeitzonen und Sprachen der Länder
  10.3.1 Zeitzonen durch die Klasse TimeZone repräsentieren
10.4 Sprachen der Länder
  10.4.1 Sprachen in Java über Locale-Objekte
10.5 Einfache Übersetzung durch ResourceBundle-Objekte
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.8 Formatieren der Datumsangaben
  10.8.1 Mit DateFormat und SimpleDateFormat formatieren
  10.8.2 Parsen von Datumswerten
  10.8.3 Parsen und Formatieren ab bestimmten Positionen
Galileo Computing

11 Datenstrukturen und Algorithmen

11.1 Mit einem Iterator durch die Daten wandern
  11.1.1 Die Schnittstellen Enumeration und Iterator
11.2 Datenstrukturen und die Collection-API
  11.2.1 Die Schnittstelle Collection
  11.2.2 Das erste Programm mit Container-Klassen
  11.2.3 Generische Datentypen in der Collection-API
  11.2.4 Der Iterator, die Schnittstelle Iterable und das erweiterte for
  11.2.5 Schnittstellen, die Collection erweitern, und Map
  11.2.6 Konkrete Container-Klassen
11.3 Listen
  11.3.1 AbstractList
  11.3.2 Beispiel mit List-Methoden
  11.3.3 ArrayList
  11.3.4 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 und die Klasse HashMap
  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 Die Arbeitsweise einer Hash-Tabelle
  11.6.6 Aufzählen der Elemente
  11.6.7 Der Gleichheitstest und der Hash-Wert einer Hash-Tabelle
  11.6.8 Klonen
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.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 nCopies()
  11.9.6 Singletons
  11.9.7 Elemente in der Collection suchen
11.10 Synchronisation der Datenstrukturen
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 Dateien berühren, neue Dateien anlegen
  12.1.4 Umbenennen und Verzeichnisse anlegen
  12.1.5 Die Wurzel aller Verzeichnisse/Laufwerke
  12.1.6 Verzeichnisse listen und Dateien filtern
  12.1.7 Dateien und Verzeichnisse löschen
  12.1.8 Implementierungsmöglichkeiten für die Klasse File
  12.1.9 Verzeichnisse nach Dateien rekursiv durchsuchen
  12.1.10 Sicherheitsprüfung
  12.1.11 Namen der Laufwerke
  12.1.12 Locking
12.2 Dateien mit wahlfreiem Zugriff
  12.2.1 Ein RandomAccessFile ö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.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 und OutputStream
  12.4.1 Die Klasse OutputStream
  12.4.2 Ein Datenschlucker
  12.4.3 Anwendung der Klasse FileOutputStream
  12.4.4 Die Eingabeklasse InputStream
  12.4.5 Anwenden der Klasse FileInputStream
  12.4.6 Kopieren von Dateien
12.5 Daten filtern durch FilterInputStream und FilterOutputStream
  12.5.1 Der besondere Filter PrintStream
  12.5.2 Die Schnittstelle Appendable
  12.5.3 System.in und System.out
12.6 Besondere OutputStream- und InputStream-Klassen
  12.6.1 Bytes in den Strom schreiben mit ByteArrayOutputStream
  12.6.2 Bytes in den Strom schreiben mit ByteArrayInputStream
  12.6.3 Ströme zusammensetzen mit SequenceInputStream
12.7 Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar-Archiven laden
12.8 Die Unterklassen von Writer
  12.8.1 Die abstrakte Klasse Writer
  12.8.2 Datenkonvertierung durch den OutputStreamWriter
  12.8.3 In Dateien schreiben mit der Klasse FileWriter
  12.8.4 StringWriter und CharArrayWriter
  12.8.5 Writer als Filter verketten
  12.8.6 Gepufferte Ausgabe durch BufferedWriter
  12.8.7 Ausgabemöglichkeiten durch PrintWriter erweitern
  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 Die 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 Serialisieren in XML-Dateien
  12.14.10 XML-API von Sun
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.4 XML-Dateien mit JDOM verarbeiten
  13.4.1 JDOM beziehen
  13.4.2 Paketübersicht
  13.4.3 Die Document-Klasse
  13.4.4 Eingaben aus der Datei lesen
  13.4.5 Das Dokument als XML-Datei ausgeben
  13.4.6 Der Dokumenttyp
  13.4.7 Elemente
  13.4.8 Zugriff auf Elementinhalte
  13.4.9 Liste mit Unterelementen erzeugen
  13.4.10 Neue Elemente einfügen und ändern
  13.4.11 Attributinhalte lesen und ändern
  13.4.12 Kurzeinführung in XPath
13.5 JAXP als Java-Schnittstelle zu XML
  13.5.1 Einführung in XSLT
  13.5.2 Umwandlung von XML-Dateien mit JDOM und JAXP
13.6 Serielle Verarbeitung von XML mit SAX
  13.6.1 Schnittstellen von SAX
  13.6.2 SAX-Parser erzeugen
  13.6.3 Wichtigsten Methoden der Schnittstelle ContentHandler
13.7 HTML-Dokumenten mit JTidy und cyberneko 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 Fensterinhalte ändern und die ereignisorientierte Programmierung
14.5 Einfache Zeichenfunktionen
  14.5.1 Linien
  14.5.2 Rechtecke
  14.5.3 Ovale und Kreisbögen
  14.5.4 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
  14.9.3 Das Image zeichnen
  14.9.4 Grafiken zentrieren
  14.9.5 Bilder im Speicher erzeugen
  14.9.6 Kein Flackern durch Double-Buffering
  14.9.7 Bilder skalieren
  14.9.8 VolatileImage
  14.9.9 Programm-Icon/Fenster-Icon setzen
  14.9.10 Bilder lesen mit ImageIO
  14.9.11 Schreiben mit ImageIO
  14.9.12 Kann ImageIO ein Format behandeln?
  14.9.13 Komprimieren mit ImageIO
  14.9.14 Bilder im GIF-Format speichern
  14.9.15 Gif speichern mit dem ACME-Paket
  14.9.16 JPEG-Dateien mit dem Sun-Paket schreiben
  14.9.17 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 Eigenschaften geometrischer Objekte
  14.10.4 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 Graphic Layers Framework
14.15 Grafikverarbeitung ohne grafische Oberfläche
  14.15.1 Xvfb-Server
  14.15.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 Was ist ein Ereignis?
  15.1.2 Die Klasse AWTEvent
  15.1.3 Events auf verschiedenen Ebenen
  15.1.4 Ereignisquellen, -senken und Horcher (Listener)
  15.1.5 Listener implementieren
  15.1.6 Listener bei Ereignisauslöser anmelden/abmelden
  15.1.7 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 Das Swing-Fenster JFrame
  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 BorderLayout
  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 Schieberegler
  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 und 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 Beispiel für ein Programm mit Menüleisten
  15.19.5 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.26.3 Der Farbauswahldialog JColorChooser
  15.26.4 Der Dateiauswahldialog
15.27 Flexibles Java-Look&Feel
15.28 Swing-Beschriftungen einer anderen Sprache geben
15.29 Die Zwischenablage (Clipboard)
15.30 Undo durchführen
15.31 Ereignisverarbeitung auf unterster Ebene
15.32 AWT, Swing und die Threads
  15.32.1 Warum Swing nicht Thread-sicher ist
  15.32.2 Swing-Elemente bedienen mit invokeLater() und invokeAndWait()
15.33 Selbst definierte Cursor
  15.33.1 Flackern des Mauszeigers bei Animationen vermeiden
15.34 Mausrad-Unterstützung
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 Zeitliches Ausführen mit dem javax.swing.Timer
  15.35.7 MouseInfo und PointerInfo
15.36 Alternativen zu AWT und Swing
  15.36.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor
  15.36.2 SWT
Galileo Computing

16 Netzwerkprogrammierung

16.1 Grundlegende Begriffe
  16.1.1 Internet-Standards und RFC
16.2 URL-Verbindungen und URL-Objekte
  16.2.1 Die Klasse URL
  16.2.2 Informationen über eine URL
  16.2.3 Der Zugriff auf die Daten über die Klasse URL
  16.2.4 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 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.5.4 Die Methode getAllByName()
16.6 NetworkInterface
16.7 Mit dem Socket zum Server
  16.7.1 Das Netzwerk ist der Computer
  16.7.2 Standarddienste unter Windows nachinstallieren
  16.7.3 Eine Verbindung zum Server aufbauen
  16.7.4 Server unter Spannung: die Ströme
  16.7.5 Die Verbindung wieder abbauen
  16.7.6 Ein kleines Echo – lebt der Rechner noch?
  16.7.7 Blockierendes Lesen
  16.7.8 Informationen über den Socket
  16.7.9 Mit telnet an den Ports horchen
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 SLL-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.13.7 Die Zeitdienste und ein eigener Server und Client
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 Was erzeugt ein Web-Server für eine Antwort?
  17.2.3 Wer oder was ist MIME?
17.3 Servlets und Java Server Pages 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 Das Sysdeo-Plugin
17.5 Skript-Elemente
  17.5.1 Scriptlets
  17.5.2 Ausdrücke
  17.5.3 Deklarationen
  17.5.4 Kommentare und Quoting
  17.5.5 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.13.6 Ein Warenkorbsystem
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 Wohin mit den Servlets: das classes-Verzeichnis
  17.16.3 Servlets mit dem Sysdeo-Plugin unter Eclipse
  17.16.4 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 Komprimierte Daten mit Content-Encoding
  17.18.4 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 Das entfernte Objekt
  18.5.1 Der Bauplan für entfernte Objekte
  18.5.2 Der Konstruktor
  18.5.3 Implementierung der entfernten Methoden
18.6 Stellvertreterobjekte erzeugen
  18.6.1 Das Dienstprogramm rmic
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.11.2 Sicherheitsmanager
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 UnicastRemoteObject, RemoteServer und RemoteObject
18.16 Daily Soap
  18.16.1 SOAP-Implementierung der Apache-Gruppe
  18.16.2 Einen Client mit der Apache-Bibliothek implementieren
  18.16.3 Der Seifen-Server
18.17 Java-API für XML Messaging (JAXM)
18.18 Java Message Service (JMS)
  18.18.1 OpenJMS
  18.18.2 Beispiel mit Konsument und Produzent im Publish–Subscribe–Modell
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.4.1 Wie das Applet den Browser-Inhalt ändern kann
  19.4.2 Den Ursprung des Applets erfragen
  19.4.3 Was ein Applet alles darf
19.5 Fehler in Applets finden
19.6 Browserabhängiges Verhalten
  19.6.1 Java im Browser aktiviert?
  19.6.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
  19.6.3 Datenaustausch zwischen Applets und Java-Skripten
19.7 Datenaustausch zwischen Applets
19.8 Musik in einem Applet und in Applikationen
  19.8.1 Fest verdrahtete Musikdatei in einem Applet
  19.8.2 WAV- und MIDI-Dateien abspielen
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 Die freie Datenbank MySQL
  20.5.2 JDBC-Treiber für MySQL: MySQL Connector/J
  20.5.3 Die Datenbank Microsoft Access
  20.5.4 Ein Typ-4-Treiber für den Microsoft SQL Server 2000
  20.5.5 Die JDBC-ODBC-Bridge
  20.5.6 ODBC einrichten und Access damit verwenden
  20.5.7 Oracle9i Enterprise Edition
  20.5.8 JDBC-Treiber für mobile Endgeräte
20.6 Eine Beispielabfrage
20.7 Mit Java an eine Datenbank andocken
  20.7.1 Der Treibermanager
  20.7.2 Eine Aufzählung aller Treiber
  20.7.3 Log-Informationen
  20.7.4 Den Treiber laden
  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
20.17 Java Data Objects (JDO)
20.18 XML-Datenbanken
  20.18.1 Apache Xindice
  20.18.2 eXist und Weitere
Galileo Computing

21 Reflection und Annotationen

21.1 MetaData
  21.1.1 XDoclet
  21.1.2 Annotationen
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 Instanceof mit Class-Objekten
  21.2.5 Oberklassen finden
  21.2.6 Implementierte Interfaces einer Klasse oder eines Inferfaces
  21.2.7 Modifizierer und die Klasse Modifier
  21.2.8 Die Attribute einer Klasse
  21.2.9 Methoden einer Klasse erfragen
  21.2.10 Konstruktoren einer Klasse
21.3 Annotationen
21.4 Objekte manipulieren
  21.4.1 Objekte erzeugen
  21.4.2 Die Belegung der Variablen erfragen
  21.4.3 Eine generische toString()-Funktion
  21.4.4 Variablen setzen
  21.4.5 Private Attribute ändern
21.5 Methoden aufrufen
  21.5.1 Statische Methoden aufrufen
  21.5.2 Dynamische Methodenaufrufe bei festen Methoden beschleunigen
21.6 Informationen und Identifizierung von Paketen
  21.6.1 Geladene Pakete
Galileo Computing

22 Komponenten durch Bohnen

22.1 Grundlagen der Komponententechnik
  22.1.1 Brauchen wir überhaupt Komponenten?
  22.1.2 Visuelle und nichtvisuelle Komponenten
  22.1.3 Andere Komponententechnologien oder: Was uns Microsoft brachte
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 Native Interface (JNI)

23.1 Java Native Interface und Invocation-API
23.2 Die Schritte zur Einbindung einer C-Funktion in ein Java-Programm
  23.2.1 Schreiben des Java-Codes
  23.2.2 Compilieren des Java-Codes
  23.2.3 Erzeugen der Header-Datei
  23.2.4 Implementierung der Methode in C
  23.2.5 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek
  23.2.6 Setzen der Umgebungsvariable
23.3 Erweiterung unseres Programms
23.4 Erweiterte JNI-Eigenschaften
  23.4.1 Klassendefinitionen
  23.4.2 Zugriff auf Attribute
Galileo Computing

24 Sicherheitskonzepte

24.1 Der Sandkasten (Sandbox)
24.2 Sicherheitsmanager (Security Manager)
  24.2.1 Der Sicherheitsmanager bei Applets
  24.2.2 Sicherheitsmanager aktivieren
  24.2.3 Wie nutzen die Java-Bibliotheken den Sicherheitsmanager?
  24.2.4 Rechte vergeben durch Policy-Dateien
  24.2.5 Erstellen von Rechte-Dateien mit dem grafischen Policy-Tool
  24.2.6 Kritik an den Policies
24.3 Dienstprogramme zur Signierung
  24.3.1 Mit keytool Schlüssel erzeugen
  24.3.2 Signieren mit jarsigner
24.4 Digitale Unterschriften
  24.4.1 Die MDx-Reihe
  24.4.2 Secure Hash Algorithm (SHA)
  24.4.3 Mit der Security-API einen Fingerabdruck berechnen
  24.4.4 Die Klasse MessageDigest
  24.4.5 Unix-Crypt
24.5 Verschlüsseln von Daten(-strömen)
  24.5.1 Den Schlüssel bitte
  24.5.2 Verschlüsseln mit Cipher
  24.5.3 Verschlüsseln von Datenströmen
Galileo Computing

25 Dienstprogramme für die Java-Umgebung

25.1 Die Werkzeuge im Überblick
25.2 Der Compiler javac
  25.2.1 Der Java-Interpreter java
  25.2.2 Der Unterschied zwischen java.exe und javaw.exe
25.3 Das Archivformat Jar
  25.3.1 Das Dienstprogramm Jar benutzen
  25.3.2 Das Manifest
  25.3.3 Applikationen in Jar-Archiven starten
  25.3.4 Applets in Jar-Archiven
  25.3.5 Der Eintrag Class-Path in einer Manifest-Datei
25.4 Nativer Compiler JET
25.5 Einpacken von Java-Programmen in ein exe mit JSmooth
25.6 Decompiler
  25.6.1 Jad, ein schneller Decompiler
  25.6.2 SourceAgain
  25.6.3 Decompilieren erschweren
25.7 Obfuscate Programm RetroGuard
25.8 Sourcecode Beautifier
25.9 Ant
  25.9.1 Bezug und Installation von Ant
  25.9.2 Properties
  25.9.3 Externe und vordefinierte Properties
  25.9.4 Weitere Leistungen
Galileo Computing

26 Style-Guide

26.1 Programmierrichtlinien
26.2 Allgemeine Richtlinien
26.3 Quellcode kommentieren
  26.3.1 Strategischer und taktischer Kommentar
  26.3.2 Bemerkungen über JavaDoc
  26.3.3 Gotcha-Schlüsselwörter
26.4 Bezeichnernamen
  26.4.1 Ungarische Notation
  26.4.2 Vorschlag für die Namensgebung
26.5 Formatierung
  26.5.1 Einrücken von Programmcode – die Vergangenheit
  26.5.2 Verbundene Ausdrücke
  26.5.3 Kontrollierter Datenfluss
26.6 Ausdrücke
26.7 Reihenfolge der Eigenschaften in Klassen
26.8 Zugriffsrechte und Zugriffsmethoden
  26.8.1 Accessors/Zugriffsmethoden
26.9 Verweise

Java 5 im Einsatz

Einstieg in Java

Einstieg in Eclipse 3.0

Enterprise JavaBeans 2.1

Einstieg in JSP 2.0

Cocoon 2 und Tomcat

UML 2.0 projektorientiert

Einstieg in XML

Besser PHP programmieren




Copyright © Galileo Press GmbH 2004
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, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de