Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (3. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Buch: Java ist auch eine Insel Dies ist die "Java-Insel" in ihrer 3., 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.
Bestellen können Sie die gedruckte Version des Buches in unserem Online-Shop - versandkostenfrei innerhalb Deutschlands und Österreichs.
Zum Online-Shop
Vorwort


Vorwort Version 2.0


Vorwort Version 3.0
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.5 Die Rolle von Java im Web


1.6 Aufkommen von Stand-alone-Applikationen


1.7 Entwicklungs- und Laufzeitumgebungen
   1.7.1 Aller Anfang mit dem Java SDK
   1.7.2 Die Entwicklungsumgebung von Sun: Sun ONE Studie (früher Forte) und NetBeans
   1.7.3 Jikes und Eclipse von IBM
   1.7.4 JBuilder von Borland
   1.7.5 Together
   1.7.6 Die virtuelle Maschine Kaffe von Transvirtual Technologies
   1.7.7 Ein Wort zu Microsoft, Java und zu J++
   1.7.8 Direkt ausführbare Programme


1.8 Installationsanleitung für das Java 2 SDK unter Microsoft Windows
   1.8.1 Das Java 2 SDK beziehen
   1.8.2 Java SDK installieren
   1.8.3 Compiler und Interpreter nutzen


1.9 Das erste Programm compilieren und testen
   1.9.1 Häufige Compiler- und Interpreterprobleme


1.10 Eclipse
   1.10.1 Eclipse starten
   1.10.2 Das erste Projekt anlegen
   1.10.3 Eine Klasse hinzufügen
   1.10.4 Übersetzen und Ausführen
   1.10.5 Nutzen des JDK und Starten ohne Bestätigungsdialog
Galileo Computing
2 Sprachbeschreibung


2.1 Anweisungen und Programme


2.2 Programme
   2.2.1 Kommentare
   2.2.2 Funktionsaufrufe als Anweisungen
   2.2.3 Die leere Anweisung
   2.2.4 Der Block


2.3 Elemente einer Programmiersprache
   2.3.1 Textkodierung durch Unicode-Zeichen
   2.3.2 Unicode-Tabellen unter Windows
   2.3.3 Bezeichner
   2.3.4 Reservierte Schlüsselwörter
   2.3.5 Token
   2.3.6 Semantik


2.4 Datentypen
   2.4.1 Primitive Datentypen
   2.4.2 Wahrheitswerte
   2.4.3 Variablendeklarationen
   2.4.4 Ganzzahlige Datentypen
   2.4.5 Die Fließkommazahlen
   2.4.6 Zeichen
   2.4.7 Die Typanpassung (das Casting)
   2.4.8 Lokale Variablen, Blöcke und Sichtbarkeit
   2.4.9 Initialisierung von lokalen Variablen


2.5 Ausdrücke
   2.5.1 Zuweisungsoperator und Verbundoperator
   2.5.2 Präfix- oder Postfix-Inkrement und -Dekrement
   2.5.3 Unäres Minus und Plus
   2.5.4 Arithmetische Operatoren
   2.5.5 Die relationalen Operatoren
   2.5.6 Logische Operatoren
   2.5.7 Reihenfolge und Rang der Operatoren in der Auswertungsreihenfolge
   2.5.8 Was C(++)-Programmierer vermissen könnten


2.6 Bedingte Anweisungen oder Fallunterscheidungen
   2.6.1 Die if-Anweisung
   2.6.2 Die Alternative wählen mit einer if/else-Anweisung
   2.6.3 Die switch-Anweisung bietet die Alternative


2.7 Schleifen
   2.7.1 Die while-Schleife
   2.7.2 Schleifenbedingungen und Vergleiche mit ==
   2.7.3 Die do/while-Schleife
   2.7.4 Die for-Schleife
   2.7.5 Ausbruch planen mit break und Wiedereinstieg mit continue
   2.7.6 break und continue mit Sprungmarken


2.8 Methoden einer Klasse
   2.8.1 Bestandteil einer Funktion
   2.8.2 Aufruf
   2.8.3 Methoden ohne Parameter
   2.8.4 Statische Methoden (Klassenmethoden)
   2.8.5 Parameter und Wertübergabe
   2.8.6 Methoden vorzeitig mit return beenden
   2.8.7 Nicht erreichbarer Quellcode bei Funktionen
   2.8.8 Rückgabewerte
   2.8.9 Methoden überladen
   2.8.10 Vorinitialisierte Parameter bei Funktionen
   2.8.11 Finale lokale Variablen
   2.8.12 Finale Referenzen in Objekten und das fehlende const
   2.8.13 Rekursive Funktionen
   2.8.14 Die Ackermann-Funktion
   2.8.15 Die Türme von Hanoi


2.9 Weitere Operatoren
   2.9.1 Bitoperationen
   2.9.2 Vorzeichenlose Bytes in ein Integer und Char konvertieren
   2.9.3 Variablen mit Xor vertauschen
   2.9.4 Die Verschiebeoperatoren
   2.9.5 Setzen, Löschen, Umdrehen und Testen von Bits
   2.9.6 Der Bedingungsoperator
   2.9.7 Überladenes Plus für Strings


2.10 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
   3.2.4 Zugriff auf Variablen und Methoden mit dem Punkt
   3.2.5 Konstruktoren
   3.2.6 Die null-Referenz


3.3 Die API-Dokumentation


3.4 Mit Referenzen arbeiten
   3.4.1 Zuweisungen bei Referenzen
   3.4.2 Funktionen mit nichtprimitiven Parametern
   3.4.3 Gleichheit von Objekten und die Methode equals()


3.5 Arrays
   3.5.1 Deklaration von Arrays
   3.5.2 Arrays mit Inhalt
   3.5.3 Die Länge eines Arrays über das Attribut length
   3.5.4 Zugriff auf die Elemente
   3.5.5 Array-Objekte erzeugen
   3.5.6 Fehler bei Arrays
   3.5.7 Arrays mit nichtprimitiven Elementen
   3.5.8 Arrays und Objekte
   3.5.9 Initialisierte Array-Objekte
   3.5.10 Mehrdimensionale Arrays
   3.5.11 Die Wahrheit über die Array-Initialisierung
   3.5.12 Arrays kopieren und füllen
   3.5.13 Mehrere Rückgabeparameter
   3.5.14 Parameter per Referenz übergeben
   3.5.15 Der Einstiegspunkt für das Laufzeitsystem
   3.5.16 Der Rückgabewert von main()
   3.5.17 Die Klasse Arrays
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 Typen in Zeichenketten konvertieren


4.2 Veränderbare Zeichenketten mit der Klasse StringBuffer
   4.2.1 Anlegen von StringBuffer-Objekten
   4.2.2 Die Länge eines StringBuffer-Objekts lesen und setzen
   4.2.3 Daten anhängen
   4.2.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen


4.3 Vergleiche von Zeichenketten als String und StringBuffer
   4.3.1 Sollte es ein equals() und hash() bei StringBuffer geben?


4.4 Zeichenkodierungen umwandeln


4.5 Sprachabhängiges Vergleichen mit der Collator-Klasse
   4.5.1 Effiziente interne Speicherung für die Sortierung


4.6 Die Klasse StringTokenizer


4.7 StreamTokenizer


4.8 Der BreakIterator als Wort- und Satztrenner


4.9 Formatieren mit Format-Objekten
   4.9.1 Prozente, Zahlen und Währungen ausgeben
   4.9.2 Ausgaben formatieren
   4.9.3 Dezimalzahlformatierung


4.10 Reguläre Ausdrücke
   4.10.1 Splitten von Zeichenketten
   4.10.2 split() in String
   4.10.3 Das Paket org.apache.regexp
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 Der Logarithmus
   5.2.5 Exponentialfunktionen
   5.2.6 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.6 Probleme mit Java und der Mathematik


5.7 Das Java-Matrixpaket Jama
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 Variablen
   6.4.1 Warum statische Eigenschaften sinnvoll sind
   6.4.2 Statische Eigenschaften mit static
   6.4.3 Statische Eigenschaften als Objekteigenschaften nutzen
   6.4.4 Statische Eigenschaften und Objekteigenschaften
   6.4.5 Statische Variablen zum Datenaustausch
   6.4.6 Warum die Groß- und Kleinschreibung wichtig ist
   6.4.7 Konstanten mit dem Schlüsselwort final bei Variablen
   6.4.8 Typsicherere Konstanten
   6.4.9 Statische Blöcke


6.5 Objekte anlegen und zerstören
   6.5.1 Konstruktoren schreiben
   6.5.2 Einen anderen Konstruktor der gleichen Klasse aufrufen
   6.5.3 Initialisierung der Objekt- und Klassenvariablen
   6.5.4 Finale Werte im Konstruktor setzen
   6.5.5 Exemplarinitialisierer (Instanzinitialisierer)
   6.5.6 Zerstörung eines Objekts durch den Müllaufsammler
   6.5.7 Implizit erzeugte String-Objekte
   6.5.8 Zusammenfassung: Konstruktoren und Methoden


6.6 Veraltete (deprecated) Methoden/Konstruktoren


6.7 Vererbung
   6.7.1 Vererbung in Java
   6.7.2 Einfach- und Mehrfachvererbung
   6.7.3 Kleidungsstücke modelliert
   6.7.4 Sichtbarkeit
   6.7.5 Das Substitutionsprinzip
   6.7.6 Automatische und explizite Typanpassung
   6.7.7 Finale Klassen
   6.7.8 Unterklassen prüfen mit dem Operator instanceof


6.8 Methoden überschreiben
   6.8.1 super: Aufrufen einer Methode aus der Oberklasse
   6.8.2 Nicht überschreibbare Funktionen
   6.8.3 Fehlende kovariante Rückgabewerte


6.9 Die oberste aller Klassen: Object
   6.9.1 Klassenobjekte
   6.9.2 Hashcodes
   6.9.3 Objektidentifikation mit toString()
   6.9.4 Objektgleichheit mit equals() und Identität
   6.9.5 Klonen eines Objekts mit clone()
   6.9.6 Aufräumen mit finalize()
   6.9.7 Synchronisation


6.10 Die Oberklasse gibt Funktionalität vor
   6.10.1 Dynamisches Binden als Beispiel für Polymorphie
   6.10.2 Keine Polymorphie bei privaten, statischen und finalen Methoden
   6.10.3 Konstruktoren in der Vererbung


6.11 Abstrakte Klassen
   6.11.1 Abstrakte Klassen
   6.11.2 Abstrakte Methoden
   6.11.3 Über abstract final


6.12 Schnittstellen
   6.12.1 Die Mehrfachvererbung bei Schnittstellen
   6.12.2 Erweitern von Interfaces - Subinterfaces
   6.12.3 Vererbte Konstanten bei Schnittstellen
   6.12.4 Vordefinierte Methoden einer Schnittstelle
   6.12.5 CharSequence als Beispiel einer Schnittstelle


6.13 Innere Klassen
   6.13.1 Geschachtelte Top-Level-Klassen und Schnittstellen
   6.13.2 Mitglieds- oder Elementklassen
   6.13.3 Lokale Klassen
   6.13.4 Anonyme innere Klassen
   6.13.5 Eine Sich-Selbst-Implementierung
   6.13.6 this und Vererbung
   6.13.7 Implementierung einer verketteten Liste
   6.13.8 Funktionszeiger


6.14 Gegenseitige Abhängigkeiten von Klassen


6.15 Pakete
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 gefangen werden müssen: RuntimeException


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
   7.6.3 Assertion-Nutzung in den Sun-Quellen


7.7 Sicherheitsfragen mit dem SecurityManager klären
   7.7.1 Programm beenden
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 Boxing und Unboxing


8.3 Ausführung von externen Programmen
   8.3.1 DOS-Programme aufrufen
   8.3.2 Die Windows-Registry verwenden
   8.3.3 Einen HTML-Browser unter Windows aufrufen


8.4 Klassenlader (Class Loader)
   8.4.1 Wie heißt die Klasse mit der Methode main()?
   8.4.2 Zeitmessung und Profiling


8.5 Compilieren von Klassen
   8.5.1 Der Sun-Compiler
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 Threads schlafen
   9.3.1 Eine Zeituhr


9.4 Die Klassen Timer und TimerTask


9.5 Die Zustände eines Threads
   9.5.1 Das Ende eines Threads
   9.5.2 Einen Thread höflich mit Interrupt beenden
   9.5.3 Der stop() von außen
   9.5.4 Das ThreadDeath-Objekt
   9.5.5 Auf das Ende warten mit join()


9.6 Arbeit niederlegen und wieder aufnehmen


9.7 Priorität
   9.7.1 Threads hoher Priorität und das AWT
   9.7.2 Granularität und Vorrang


9.8 Dämonen


9.9 Kooperative und nichtkooperative Threads


9.10 Synchronisation über kritische Abschnitte
   9.10.1 Gemeinsam genutzte Daten
   9.10.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
   9.10.3 Punkte parallel initialisieren
   9.10.4 i++ sieht atomar aus, ist es aber nicht
   9.10.5 Abschnitte mit synchronized schützen
   9.10.6 Monitore
   9.10.7 Synchronized-Methode am Beispiel der Klasse StringBuffer
   9.10.8 Synchronisierte Blöcke
   9.10.9 Vor- und Nachteile von synchronisierten Blöcken und Methoden
   9.10.10 Nachträglich synchronisieren
   9.10.11 Monitore sind reentrant, gut für die Geschwindigkeit
   9.10.12 Deadlocks
   9.10.13 Erkennen von Deadlocks


9.11 Variablen mit volatile kennzeichnen


9.12 Synchronisation über Warten und Benachrichtigen
   9.12.1 Falls der Lock fehlt: IllegalMonitorStateException
   9.12.2 Warten mit wait() und Aufwecken mit notify()
   9.12.3 Mehrere Wartende und notifyAll()
   9.12.4 wait() mit einer Zeitspanne
   9.12.5 Beispiel Erzeuger-Verbraucher-Programm
   9.12.6 Semaphoren
   9.12.7 Die Concurrency Utilities von Doug Lea


9.13 Aktive Threads in der Umgebung


9.14 Gruppen von Threads in einer Thread-Gruppe
   9.14.1 Etwas über die aktuelle Thread-Gruppe herausfinden
   9.14.2 Threads in einer Thread-Gruppe anlegen
   9.14.3 Methoden von Thread und ThreadGroup im Vergleich


9.15 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.1.2 Arrays mit Iteratoren durchlaufen


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 Schnittstellen, die Collection erweitern, und Map
   11.2.4 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.3.8 Queue, die Schlange


11.4 Stack (Kellerspeicher, Stapel)
   11.4.1 Die Methoden von Stack
   11.4.2 Ein Stack ist ein Vector - aha!


11.5 Die Klasse HashMap und assoziative Speicher
   11.5.1 Ein Objekt der Klasse HashMap erzeugen
   11.5.2 Einfügen und Abfragen der Datenstruktur
   11.5.3 Wichtige Eigenschaften von Assoziativspeichern
   11.5.4 Elemente im Assoziativspeicher müssen unveränderbar bleiben
   11.5.5 Die Arbeitsweise einer Hash-Tabelle
   11.5.6 Aufzählen der Elemente
   11.5.7 Der Gleichheitstest und der Hash-Wert einer Hash-Tabelle
   11.5.8 Klonen


11.6 Die abstrakte Klasse Dictionary


11.7 Die Properties-Klasse
   11.7.1 Über die Klasse Properties
   11.7.2 put(), get() und getProperties()
   11.7.3 Eigenschaften ausgeben
   11.7.4 Systemeigenschaften der Java-Umgebung
   11.7.5 Browser-Version abfragen
   11.7.6 Properties von der Konsole aus setzen
   11.7.7 Windows-typische INI-Dateien


11.8 Algorithmen
   11.8.1 Datenmanipulation
   11.8.2 Vergleichen von Objekten mit Comparator und Comparable
   11.8.3 Größten und kleinsten Wert einer Collection finden
   11.8.4 Sortieren
   11.8.5 Elemente in der Collection suchen


11.9 Synchronisation der Datenstrukturen


11.10 Typsichere 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 Sicherheitsprüfung
   12.1.4 Umbenennen und Verzeichnisse anlegen
   12.1.5 Die Wurzel aller Verzeichnisse
   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.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 Übersicht über wichtige Stream- und WriterReader
   12.3.1 Die abstrakten Basisklassen
   12.3.2 Übersicht über Ein-/Ausgabeklassen


12.4 Eingabe- und 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.4.7 Daten filtern durch FilterInputStream und FilterOutputStream
   12.4.8 Der besondere Filter PrintStream
   12.4.9 System.in und System.out
   12.4.10 Bytes in den Strom schreiben mit ByteArrayOutputStream
   12.4.11 Ströme zusammensetzen mit SequenceInputStream


12.5 Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar-Archiven laden


12.6 Die Unterklassen von Writer
   12.6.1 Die abstrakte Klasse Writer
   12.6.2 Datenkonvertierung durch den OutputStreamWriter
   12.6.3 In Dateien schreiben mit der Klasse FileWriter
   12.6.4 StringWriter und CharArrayWriter
   12.6.5 Writer als Filter verketten
   12.6.6 Gepufferte Ausgabe durch BufferedWriter
   12.6.7 Ausgabemöglichkeiten durch PrintWriter erweitern
   12.6.8 Daten mit FilterWriter filtern


12.7 Die Klassen um Reader
   12.7.1 Die abstrakte Basisklasse Reader
   12.7.2 Automatische Konvertierungen mit dem InputStreamReader
   12.7.3 Dateien lesen mit der Klasse FileReader
   12.7.4 StringReader und CharArrayReader


12.8 Schachteln von Eingabe-Streams
   12.8.1 Gepufferte Eingaben mit der Klasse BufferedReader
   12.8.2 LineNumberReader zählt automatisch Zeilen mit
   12.8.3 Eingaben filtern mit der Klasse FilterReader
   12.8.4 Daten zurücklegen mit der Klasse PushbackReader


12.9 Kommunikation zwischen Threads mit Pipes
   12.9.1 PipedOutputStream und PipedInputStream
   12.9.2 PipedWriter und PipedReader


12.10 Datenkompression
   12.10.1 Die Java-Unterstützung beim Komprimieren und Zusammenpacken
   12.10.2 Datenströme komprimieren
   12.10.3 Zip-Archive


12.11 Prüfsummen
   12.11.1 Die Schnittstelle Checksum
   12.11.2 Die Klasse CRC32
   12.11.3 Die Adler32-Klasse


12.12 Zugriff auf SMB-Server
   12.12.1 jCIFS


12.13 Persistente Objekte und Serialisierung
   12.13.1 Objekte speichern
   12.13.2 Objekte lesen
   12.13.3 Die Schnittstelle Serializable
   12.13.4 Nicht serialisierbare Attribute mit transient aussparen
   12.13.5 Das Abspeichern selbst in die Hand nehmen
   12.13.6 Tiefe Objektkopien
   12.13.7 Versionenverwaltung und die SUID
   12.13.8 Beispiele aus den Standardklassen
   12.13.9 Serialisieren in XML-Dateien
   12.13.10 JSX (Java Serialization to XML)
   12.13.11 XML-API von Sun


12.14 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.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 Ausgabe der Datei party.xml mit SAX
Galileo Computing
14 Grafikprogrammierung mit dem AWT


14.1 Das Abstract-Window-Toolkit
   14.1.1 Java Foundation Classes


14.2 Fenster unter grafischen Oberflächen
   14.2.1 Fenster öffnen
   14.2.2 Größe und Position des Fensters verändern
   14.2.3 Fenster- und Dialog-Dekoration


14.3 Das Toolkit
   14.3.1 Einen Hinweis beepen


14.4 Grundlegendes zum Zeichnen
   14.4.1 Die paint()-Methode
   14.4.2 Auffordern zum Neuzeichnen mit repaint()
   14.4.3 Fensterinhalte ändern und die ereignisorientierte Programmierung


14.5 Punkte, Linien und Rechtecke aller Art
   14.5.1 Linien
   14.5.2 Rechtecke


14.6 Alles was rund ist


14.7 Polygone und Polylines
   14.7.1 Die Polygon-Klasse
   14.7.2 N-Ecke zeichnen
   14.7.3 Vollschlanke Linien zeichnen


14.8 Zeichenketten schreiben
   14.8.1 Einen neuen Zeichensatz bestimmen
   14.8.2 Zeichensätze des Systems ermitteln
   14.8.3 Die Klasse FontMetrics
   14.8.4 True Type Fonts


14.9 Clipping-Operationen


14.10 Farben
   14.10.1 Zufällige Farbblöcke zeichnen
   14.10.2 Farbanteile zurückgeben
   14.10.3 Vordefinierte Farben
   14.10.4 Farben aus Hexadezimalzahlen erzeugen
   14.10.5 Einen helleren oder dunkleren Farbton wählen
   14.10.6 Farbmodelle HSB und RGB
   14.10.7 Die Farben des Systems


14.11 Bilder anzeigen und Grafiken verwalten
   14.11.1 Eine Grafik zeichnen
   14.11.2 Grafiken zentrieren
   14.11.3 Laden von Bildern mit dem MediaTracker beobachten
   14.11.4 Kein Flackern durch Double-Buffering
   14.11.5 Bilder skalieren


14.12 Programm-Icon setzen
   14.12.1 VolatileImage


14.13 Grafiken speichern
   14.13.1 Bilder im GIF-Format speichern
   14.13.2 Gif speichern mit dem ACME-Paket
   14.13.3 JPEG-Dateien mit dem Sun-Paket schreiben
   14.13.4 Java Image Management Interface (JIMI)


14.14 Von Produzenten, Konsumenten und Beobachtern
   14.14.1 Producer und Consumer für Bilder
   14.14.2 Beispiel für die Übermittlung von Daten
   14.14.3 Bilder selbst erstellen
   14.14.4 Die Bildinformationen wieder auslesen


14.15 Filter
   14.15.1 Grundlegende Eigenschaft von Filtern
   14.15.2 Konkrete Filterklassen
   14.15.3 Mit CropImageFilter Teile ausschneiden
   14.15.4 Transparenz


14.16 Alles wird bunt mit Farbmodellen
   14.16.1 Die abstrakte Klasse ColorModel
   14.16.2 Farbwerte im Pixel mit der Klasse DirectColorModel
   14.16.3 Die Klasse IndexColorModel


14.17 Drucken
   14.17.1 Drucken mit dem einfachen Ansatz
   14.17.2 Ein PrintJob
   14.17.3 Drucken der Inhalte
   14.17.4 Komponenten drucken
   14.17.5 Den Drucker am Parallelport ansprechen


14.18 Java 2D-API
   14.18.1 Grafische Objekte zeichnen
   14.18.2 Geometrische Objekte durch Shape gekennzeichnet
   14.18.3 Eigenschaften geometrischer Objekte
   14.18.4 Transformationen mit einem AffineTransform-Objekt


14.19 Graphic Layers Framework


14.20 Grafikverarbeitung ohne grafische Oberfläche
   14.20.1 Xvfb-Server
   14.20.2 Pure Java AWT Toolkit (PJA)
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


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.5 Ein Informationstext über die Klasse JLabel
   15.5.1 Mehrzeiliger Text


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 Horizontale und vertikale Schieberegler
   15.9.1 Der AdjustmentListener, der auf Änderungen hört


15.10 JSlider


15.11 Ein Auswahlmenü - Choice, JComboBox
   15.11.1 ItemListener
   15.11.2 Zuordnung einer Taste mit einem Eintrag


15.12 Eines aus vielen - Kontrollfelder (JCheckBox)
   15.12.1 Ereignisse über ItemListener


15.13 Kontrollfeldgruppen, Optionsfelder und JRadioButton


15.14 Der Fortschrittsbalken JProgressBar


15.15 Rahmen (Borders)


15.16 Symbolleisten alias Toolbars


15.17 Menüs
   15.17.1 Die Menüleisten und die Einträge
   15.17.2 Menüeinträge definieren
   15.17.3 Mnemonics und Shortcuts (Accelerator)
   15.17.4 Beispiel für ein Programm mit Menüleisten


15.18 Popup-Menüs


15.19 Alles Auslegungssache: die Layoutmanager
   15.19.1 Null-Layout
   15.19.2 FlowLayout
   15.19.3 BorderLayout
   15.19.4 GridLayout
   15.19.5 Der GridBagLayout-Manager
   15.19.6 Weitere Layoutmanager


15.20 Der Inhalt einer Zeichenfläche: JPanel


15.21 Das Konzept des Model-View-Controllers


15.22 List-Boxen


15.23 JSpinner


15.24 Texteingabefelder
   15.24.1 Text in einer Eingabezeile
   15.24.2 Die Oberklasse der JText-Komponenten: JTextComponent
   15.24.3 JPasswordField
   15.24.4 Validierende Eingabefelder
   15.24.5 Mehrzeilige Textfelder
   15.24.6 Die Editor-Klasse JEditorPane


15.25 Bäume mit JTree-Objekten
   15.25.1 Selektionen bemerken


15.26 Tabellen mit JTable
   15.26.1 Ein eigenes Modell
   15.26.2 AbstractTableModel
   15.26.3 DefaultTableModel
   15.26.4 Ein eigener Renderer für Tabellen
   15.26.5 Spalteninformationen
   15.26.6 Tabellenkopf von Swing-Tabellen
   15.26.7 Selektionen einer Tabelle


15.27 JRootPane und JLayeredPane


15.28 Dialoge
   15.28.1 Der Farbauswahldialog JColorChooser
   15.28.2 Der Dateiauswahldialog


15.29 Das Java-Look&Feel


15.30 Swing-Beschriftungen einer anderen Sprache geben


15.31 Die Zwischenablage (Clipboard)


15.32 Undo durchführen


15.33 Ereignisverarbeitung auf unterster Ebene


15.34 AWT, Swing und die Threads
   15.34.1 Warum Swing nicht Thread-sicher ist
   15.34.2 Swing-Elemente bedienen mit invokeLater() und invokeAndWait()


15.35 Selbst definierte Cursor
   15.35.1 Flackern des Mauszeigers bei Animationen vermeiden


15.36 Mausrad-Unterstützung


15.37 Benutzerinteraktionen automatisieren
   15.37.1 Automatisch in die Tasten hauen
   15.37.2 Mausoperationen
   15.37.3 Methoden zur Zeitsteuerung
   15.37.4 Screenshots
   15.37.5 Funktionsweise und Beschränkungen
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.3 Die Klasse URLConnection
   16.3.1 Methoden und Anwendung von URLConnection
   16.3.2 Protokoll- und Content-Handler
   16.3.3 Im Detail: vom URL zu URLConnection
   16.3.4 Autorisierte URL-Verbindungen mit Basic Authentication
   16.3.5 Apache Jakarta HttpClient


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 Das Netz ist Klasse
   16.5.2 IP-Adresse des lokalen Hosts
   16.5.3 Die Methode getAllByName()


16.6 NetworkInterface


16.7 IPv6 für Java mit Jipsy


16.8 Socket-Programmierung
   16.8.1 Das Netzwerk ist der Computer
   16.8.2 Standarddienste unter Windows nachinstallieren
   16.8.3 Stream-Sockets
   16.8.4 Informationen über den Socket
   16.8.5 Mit telnet an den Ports horchen
   16.8.6 Ein kleines Echo - lebt der Rechner noch?


16.9 Client/Server-Kommunikation
   16.9.1 Warten auf Verbindungen
   16.9.2 Ein Multiplikations-Server


16.10 SLL-Verbindungen mit JSSE


16.11 Web-Protokolle mit NetComponents nutzen


16.12 E-Mail
   16.12.1 Wie eine E-Mail um die Welt geht
   16.12.2 Übertragungsprotokolle
   16.12.3 Das Simple Mail Transfer Protocol
   16.12.4 E-Mails versenden mit Suns JavaMail-API
   16.12.5 E-Mails mittels POP3 abrufen


16.13 Arbeitsweise eines Web-Servers
   16.13.1 Das Hypertext Transfer Protocol (HTTP)
   16.13.2 Anfragen an den Server
   16.13.3 Die Antworten vom Server


16.14 Datagram-Sockets
   16.14.1 Die Klasse DatagramSocket
   16.14.2 Datagramme und die Klasse DatagramPacket
   16.14.3 Auf ein hereinkommendes Paket warten
   16.14.4 Ein Paket zum Senden vorbereiten
   16.14.5 Methoden der Klasse DatagramPacket
   16.14.6 Das Paket senden
   16.14.7 Die Zeitdienste und ein eigener Server und Client


16.15 Internet Control Message Protocol (ICMP)
   16.15.1 Ping


16.16 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.3.3 Tomcat


17.4 Java Server Pages
   17.4.1 JSP mit Tomcat nutzen


17.5 Skript-Elemente
   17.5.1 Scriptlets
   17.5.2 Ausdrücke
   17.5.3 Deklarationen
   17.5.4 Kommentare und Quoting


17.6 Web-Applikationen


17.7 Implizite Objekte


17.8 Entsprechende XML-Tags


17.9 Was der Browser mit auf den Weg gibt - HttpServletRequest
   17.9.1 Verarbeiten der Header
   17.9.2 Hilfsfunktion im Umgang mit Headern
   17.9.3 Übersicht der Browser-Header


17.10 Formulardaten


17.11 Das HttpServletResponse-Objekt
   17.11.1 Automatisches Neuladen
   17.11.2 Seiten umlenken


17.12 JSP-Direktiven
   17.12.1 page-Direktiven im Überblick
   17.12.2 include-Direktive


17.13 Aktionen
   17.13.1 Aktion include
   17.13.2 Aktion forward
   17.13.3 Aktion plugin


17.14 Beans
   17.14.1 Beans in JSP-Seiten anlegen, Attribute setzen und erfragen
   17.14.2 Der schnelle Zugriff auf Parameter


17.15 Kleine Kekse: die Klasse Cookies
   17.15.1 Cookies erzeugen und setzen
   17.15.2 Cookies vom Servlet einlesen
   17.15.3 Kleine Helfer für Cookies
   17.15.4 Cookie-Status ändern
   17.15.5 Langlebige Cookies
   17.15.6 Ein Warenkorbsystem


17.16 Sitzungsverfolgung (Session Tracking)
   17.16.1 Das mit einer Sitzung verbundene Objekt HttpSession
   17.16.2 Werte mit einer Sitzung assoziieren und auslesen
   17.16.3 URL-Rewriting
   17.16.4 Zusätzliche Informationen


17.17 Tag-Libraries
   17.17.1 Standard Tag Library (JSTL) der Apache-Gruppe
   17.17.2 Beispiel mit einer Taglib-Direktive


17.18 Das erste Servlet compilieren und ausführen
   17.18.1 Servlets compilieren
   17.18.2 Wohin mit dem Servlet?


17.19 Der Lebenszyklus eines Servlets
   17.19.1 Initialisierung in init()
   17.19.2 Abfragen bei service()
   17.19.3 Mehrere Anfragen beim Servlet und die Thread-Sicherheit
   17.19.4 Das Ende eines Servlets


17.20 Das HttpServletResponse-Objekt
   17.20.1 Wir generieren eine Web-Seite
   17.20.2 Binärdaten senden
   17.20.3 Komprimierte Daten mit Content-Encoding
   17.20.4 Noch mehr über Header, die der Server setzt


17.21 Objekte und Dateien per POST verschicken
   17.21.1 Datei-Upload


17.22 Servlets und Sessions


17.23 Weiterleiten und Einbinden von Servlet-Inhalten


17.24 Inter-Servlet-Kommunikation
   17.24.1 Daten zwischen Servlets teilen


17.25 Internationalisierung
   17.25.1 Die Länderkennung des Anfragers auslesen
   17.25.2 Länderkennung für die Ausgabe setzen
   17.25.3 Westeuropäische Texte senden


17.26 Tomcat: Spezielles
   17.26.1 Tomcat als Service unter Windows NT ausführen
   17.26.2 MIME-Types mit Tomcat verbinden
   17.26.3 Servlets beim Start laden


17.27 Ein Servlet generiert WAP-Seiten für das Handy
   17.27.1 Ein WAP-Handy simulieren
   17.27.2 Übersicht der wichtigsten Tags
   17.27.3 Der Gateway
   17.27.4 WML-Seiten aufbauen
   17.27.5 Interessante Links zum Thema Servlets/JSP


17.28 Text in HTML-konformen Text umwandeln
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: entfernte Objekte beim Namensdienst anmelden
   18.8.1 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 Variable Musikdatei über einen Parameter
   19.8.3 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.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 Oracle8i 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 Unicode in der Spalte korrekt auslesen
   20.8.4 wasNull() bei ResultSet
   20.8.5 Wie viele Zeilen hat ein ResultSet?


20.9 Java und SQL-Datentypen
   20.9.1 Die getXXX()-Methoden


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 Metadaten
   20.13.1 Metadaten über die Tabelle
   20.13.2 Informationen über die Datenbank


20.14 Die Ausnahmen bei JDBC


20.15 Java Data Objects (JDO)


20.16 XML-Datenbanken
   20.16.1 Apache Xindice
   20.16.2 eXist und Weitere
Galileo Computing
21 Reflection


21.1 Einfach mal reinschauen


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 Oberklassen finden
   21.2.5 Implementierte Interfaces einer Klasse oder eines Inferfaces
   21.2.6 Modifizierer und die Klasse Modifier
   21.2.7 Die Attribute einer Klasse
   21.2.8 Methoden einer Klasse erfragen
   21.2.9 Konstruktoren einer Klasse


21.3 Objekte manipulieren
   21.3.1 Objekte erzeugen
   21.3.2 Die Belegung der Variablen erfragen
   21.3.3 Variablen setzen
   21.3.4 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
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 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 Jar-Archive für Applets und Applikationen


25.4 Mit JavaDoc und Doclets dokumentieren
   25.4.1 Mit JavaDoc Dokumentationen erstellen
   25.4.2 Wie JavaDoc benutzt wird
   25.4.3 Eine Dokumentation erstellen
   25.4.4 JavaDoc und Doclets


25.5 Konvertierung von Java-Bytecode in ein Windows-Exe mit JET


25.6 Manteln von Java-Klassen in ein Windows-Exe mit JexePack


25.7 Decompiler
   25.7.1 Jad, ein schneller Decompiler
   25.7.2 SourceAgain
   25.7.3 Decompilieren erschweren


25.8 Obfuscate Programm RetroGuard


25.9 Sourcecode Beautifier


25.10 Ant
   25.10.1 Bezug und Installation von Ant
   25.10.2 Properties
   25.10.3 Externe und vordefinierte Properties
   25.10.4 Weitere Leistungen
Galileo Computing
26 Style-Guide


26.1 Programmierrichtlinien


26.2 Allgemeine Richtlinien


26.3 Quellcode kommentieren
   26.3.1 Kommentartypen
   26.3.2 Strategischer und taktischer Kommentar
   26.3.3 Bemerkungen über JavaDoc
   26.3.4 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.5.4 Funktionen


26.6 Ausdrücke


26.7 Anweisungen
   26.7.1 Schleifen
   26.7.2 Switch, case und Durchfallen


26.8 Reihenfolge der Eigenschaften in Klassen


26.9 Zugriffsrechte und Zugriffsmethoden
   26.9.1 Accessors/Zugriffsmethoden


26.10 Verweise
Galileo Computing
A Literatur


A.1 Spenden
Galileo Computing
B Die Begleit-CD

Index


Einstieg in Java

Java 2

Einstieg in JSP 2.0

Software-Testing

UML projektorientiert

Einstieg in XML




Copyright © Galileo Press GmbH 2002
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] [Buchkatalog] [Neue Bücher] [Vorschau]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de