Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Java ist auch eine Insel (Galileo Computing) Dies ist die "Java-Insel" in ihrer 3., komplett überarbeiteten und erweiterten Auflage (Aktualisierte Version 4).
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
  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.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 Studio 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
1.8.1  Das Java 2 SDK beziehen
1.8.2  Java SDK unter Windows installieren
1.8.3  Compiler und Interpreter nutzen
1.8.4  Installation der Java Laufzeitumgebung unter Linux
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  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 und Verbundoperator
2.4.2  Präfix- oder Postfix-Inkrement und -Dekrement
2.4.3  Unäres Minus und Plus
2.4.4  Arithmetische Operatoren
2.4.5  Die relationalen Operatoren
2.4.6  Logische Operatoren
2.4.7  Reihenfolge und Rang der Operatoren in der Auswertungsreihenfolge
2.4.8  Überladenes Plus für Strings
2.4.9  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 Methoden (Klassenmethoden)
2.7.5  Parameter 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  Vorinitialisierte Parameter bei Funktionen
2.7.11  Finale lokale Variablen
2.7.12  Finale Referenzen in Objekten und das fehlende const
2.7.13  Rekursive Funktionen
2.7.14  Die Ackermann-Funktion
2.7.15  Die Türme von Hanoi
2.8  Weitere Operatoren
2.8.1  Bitoperationen
2.8.2  Vorzeichenlose Bytes in ein Integer und Char konvertieren
2.8.3  Variablen mit Xor vertauschen
2.8.4  Die Verschiebeoperatoren
2.8.5  Setzen, Löschen, Umdrehen und Testen von Bits
2.8.6  Der Bedingungsoperator
2.9  Einfache Benutzereingaben
Galileo Computing

3  Klassen und Objekte

3.1  Objektorientierte Programmierung
3.1.1  Warum überhaupt OOP?
3.1.2  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 ».«
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  Die Klasse Arrays
3.5.16  Der Einstiegspunkt für das Laufzeitsystem main()
3.5.17  Die Anzahl der Parameter
3.5.18  Der Rückgabewert von main() und System.exit()
3.5.19  Parser der Kommandozeilenargumente Apache CLI
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
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 umwandeln
4.5  Die Klasse StringTokenizer
4.6  Der BreakIterator als Wort- und Satztrenner
4.7  Formatieren mit Format-Objekten
4.7.1  Prozente, Zahlen und Währungen ausgeben
4.7.2  Ausgaben formatieren
4.7.3  Dezimalzahlformatierung
4.8  Reguläre Ausdrücke
4.8.1  Splitten von Zeichenketten
4.8.2  split() in String
4.8.3  Das alternative 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  Pakete
6.3.1  Hierarchische Strukturen
6.3.2  Paketnamen
6.3.3  Eine Verzeichnisstruktur für eigene Projekte
6.4  Privatsphäre und Sichtbarkeit
6.4.1  Wieso nicht freie Methoden und Variablen für alle?
6.4.2  Privat ist nicht ganz privat. Es kommt darauf an, wer’s sieht
6.4.3  Zugriffsmethoden für Attribute definieren
6.4.4  Zusammenfassung zur Sichtbarkeit
6.4.5  Sichtbarkeit in der UML
6.5  Statische Methoden und Variablen
6.5.1  Warum statische Eigenschaften sinnvoll sind
6.5.2  Statische Eigenschaften mit static
6.5.3  Statische Eigenschaften als Objekteigenschaften nutzen
6.5.4  Statische Eigenschaften und Objekteigenschaften
6.5.5  Statische Variablen zum Datenaustausch
6.5.6  Warum die Groß- und Kleinschreibung wichtig ist
6.5.7  Konstanten mit dem Schlüsselwort final bei Variablen
6.5.8  Problem mit finalen Klassenvariablen
6.5.9  Typsicherere Konstanten
6.5.10  Statische Blöcke
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  Zusammenfassung: Konstruktoren und Methoden
6.7  Veraltete (deprecated) Methoden/Konstruktoren
6.8  Vererbung
6.8.1  Vererbung in Java
6.8.2  Einfach- und Mehrfachvererbung
6.8.3  Gebäude modelliert
6.8.4  Konstruktoren in der Vererbung
6.8.5  Sichtbarkeit
6.8.6  Das Substitutionsprinzip
6.8.7  Automatische und explizite Typanpassung
6.8.8  Finale Klassen
6.8.9  Unterklassen prüfen mit dem Operator instanceof
6.8.10  Methoden überschreiben
6.8.11  super: Aufrufen einer Methode aus der Oberklasse
6.8.12  Nicht überschreibbare Funktionen
6.8.13  Fehlende kovariante Rückgabewerte
6.9  Die oberste aller Klassen: Object
6.9.1  Klassenobjekte
6.9.2  Objektidentifikation mit toString()
6.9.3  Objektgleichheit mit equals() und Identität
6.9.4  Klonen eines Objekts mit clone()
6.9.5  Hashcodes
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  Polymorphie bei Konstruktoraufrufen
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  Ein Polymorphie-Beispiel mit Schnittstellen
6.12.2  Die Mehrfachvererbung bei Schnittstellen
6.12.3  Erweitern von Interfaces – Subinterfaces
6.12.4  Vererbte Konstanten bei Schnittstellen
6.12.5  Vordefinierte Methoden einer Schnittstelle
6.12.6  CharSequence als Beispiel einer Schnittstelle
6.13  Innere Klassen
6.13.1  Statische innere 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
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
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  Woher die kleinen Klassen kommen
8.4.2  Drei Typen von Klassenladern
8.4.3  Der java.lang.ClassLoader
8.4.4  Hot Deployment mit dem URL-ClassLoader
8.4.5  Das jre/lib/endorsed-Verzeichnis
8.4.6  Wie heißt die Klasse mit der Methode main()?
8.5  Zeitmessung und Profiling
8.6  Compilieren von Klassen
8.6.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 in Collections
11.8.1  Datenmanipulation: Umdrehen, Füllen, Kopieren
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  nCopies()
11.8.6  Singletons
11.8.7  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 mit der Klasse PushbackReader zurücklegen
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  Persistente Objekte und Serialisierung
12.12.1  Objekte speichern
12.12.2  Objekte lesen
12.12.3  Die Schnittstelle Serializable
12.12.4  Nicht serialisierbare Attribute mit transient aussparen
12.12.5  Das Abspeichern selbst in die Hand nehmen
12.12.6  Tiefe Objektkopien
12.12.7  Versionenverwaltung und die SUID
12.12.8  Wie die ArrayList serialisiert
12.12.9  Serialisieren in XML-Dateien
12.12.10  JSX (Java Serialization to XML)
12.12.11  XML-API von Sun
12.13  Zugriff auf SMB-Server
12.13.1  jCIFS
12.14  Tokenizer
12.14.1  StreamTokenizer
12.14.2  CSV (Comma Separated Values)-Dateien verarbeiten
12.15  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  Ableiten eines neuen Fonts aus einem gegebenen Font
14.8.3  Zeichensätze des Systems ermitteln
14.8.4  Die Klasse FontMetrics
14.8.5  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.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  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  MimeMultipart-Nachrichten schicken
16.12.6  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 in Tomcat und Eclipse
17.4.1  Erster Ablageort für eigene JSP-Seiten
17.4.2  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.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)
17.18  Servlets
17.18.1  Servlets compilieren
17.18.2  Wohin mit den Servlets: das classes-Verzeichnis
17.18.3  Servlets mit dem Sysdeo-Plugin unter Eclipse
17.18.4  Servlet-Mapping
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
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.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  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

  Index


Einstieg in Java

Enterprise JavaBeans 2.1

Einstieg in JSP 2.0

Cocoon 2 und Tomcat

UML 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