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


Java ist auch eine Insel (2. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Java ist auch eine Insel (2. Auflage) Nutzen Sie die HTML-Version zum Reinschnuppern oder als immer verfügbare Ergänzung zu Ihrem Buch.

Inhalt

1    Schon wieder eine neue Sprache?

1.1    Der erste Kontakt
1.2    Historischer Hintergrund
1.3    Eigenschaften von Java
  1.3.1    Die virtuelle Maschine
  1.3.2    Kein Präprozessor
  1.3.3    Überladene Operatoren
  1.3.4    Zeiger und Referenzen
  1.3.5    Garbage-Collector
  1.3.6    Ausnahmenbehandlung
  1.3.7    Objektorientierung in Java
  1.3.8    Java-Security-Model
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    Umgebungen von IBM
  1.7.4    TogetherJ
  1.7.5    JBuilder von Borland
  1.7.6    Die virtuelle Maschine Kaffe von Transvirtual Technologies
  1.7.7    Die Entwicklungsumgebung CodeGuide
  1.7.8    Ein Wort zu Microsoft, Java und zu J++
  1.7.9    Direkt ausführbare Programme für Windows compilieren
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
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    Mit Referenzen arbeiten
  3.3.1    Zuweisungen bei Referenzen
  3.3.2    Funktionen mit nichtprimitiven Parametern
  3.3.3    Gleichheit von Objekten und die Methode equals()
3.4    Arrays
  3.4.1    Deklaration von Arrays
  3.4.2    Arrays mit Inhalt
  3.4.3    Die Länge eines Arrays mit length
  3.4.4    Zugriff auf die Elemente
  3.4.5    Array-Objekte erzeugen
  3.4.6    Fehler bei Arrays
  3.4.7    Arrays mit nichtprimitiven Elementen
  3.4.8    Arrays und Objekte
  3.4.9    Initialisierte Array-Objekte
  3.4.10    Mehrdimensionale Arrays
  3.4.11    Die Wahrheit über die Array-Initialisierung
  3.4.12    Arrays kopieren und füllen
  3.4.13    Mehrere Rückgabeparameter
  3.4.14    Parameter per Referenz übergeben
  3.4.15    Der Einstiegspunkt für das Laufzeitsystem
  3.4.16    Der Rückgabewert von main()
  3.4.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    Stringteile extrahieren
  4.1.5    Veränderte Strings liefern
  4.1.6    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    Ein paar kleine Helfer
  4.4.1    Strings einer gegebenen Länge erzeugen und rechtsbündig ausgeben
  4.4.2    Teile im String ersetzen
4.5    Zeichenkodierungen umwandeln
4.6    Sprachabhängiges Vergleichen mit der Collator-Klasse
  4.6.1    Effiziente interne Speicherung für die Sortierung
4.7    Die Klasse StringTokenizer
4.8    StreamTokenizer
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 gnu.regexp
4.11    Überprüfung der E-Mail-Adressen und Kreditkarteninformationen
  4.11.1    Gültige E-Mail-Adressen
  4.11.2    Kreditkartennummern testen
Galileo Computing

5    Mathematisches

5.1    Arithmetik in Java
  5.1.1    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    Exponentialfunktionen
  5.2.5    Division
  5.2.6    Absolutwerte und Maximum, Minimum
  5.2.7    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    Ganz lange Fakultäten
5.6    Probleme mit Java und der Mathematik
5.7    Das Java-Matrix-Paket 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.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 Stringobjekte
  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    Ablauf einer Ausnahmesituation
  7.1.3    Wiederholung kritischer Bereiche
  7.1.4    throws im Methodenkopf angeben
  7.1.5    Abschließende Arbeiten mit finally
  7.1.6    Nicht erreichbare catch-Klauseln
7.2    Die Klassenhierarchie der Fehler
  7.2.1    Die Exception-Hierarchie
  7.2.2    Ober-Ausnahmen 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    Vorgefertigte Ausnahme-Objekte wiederverwenden
  7.3.2    Typecast auf ein null-Objekt für eine NullPointerException
  7.3.3    Neue Exception-Klassen definieren
7.4    Rückgabewerte bei ausgelösten Ausnahmen
7.5    Stack-Aufruf analysieren
7.6    Assertions
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 Number-Klasse
  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.4    Kompilieren von Klassen
  8.4.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 heben 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 (engl. Daemon)
9.9    Kooperative und nicht kooperative 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.11    Variablen mit volatile kennzeichnen
9.12    Synchronisation über Warten und Benachrichtigen
  9.12.1    Warten mit wait() und Aufwecken mit notify()
  9.12.2    Mehrere Wartende und notifyAll()
  9.12.3    wait() mit einer Zeitspanne
  9.12.4    Beispiel Erzeuger-Verbraucher-Programm
  9.12.5    Semaphoren
9.13    Grenzen von Threads
9.14    Aktive Threads in der Umgebung
9.15    Gruppen von Threads in einer Thread-Gruppe
  9.15.1    Etwas über die aktuelle Thread-Gruppe herausfinden
  9.15.2    Threads in einer Thread-Gruppe anlegen
  9.15.3    Methoden von Thread und ThreadGroup im Vergleich
9.16    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.6.2    Zeitmessung und Profiling
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    Bauernregeln aufzählen
11.2    Dynamische Datenstrukturen
11.3    Die Klasse Vector
  11.3.1    Vektoren erzeugen
  11.3.2    Funktionen
  11.3.3    Arbeitsweise des internen Arrays
  11.3.4    Die Größe eines Felds
  11.3.5    Eine Aufzählung und gleichzeitiges Verändern
11.4    Stack, der Stapel
  11.4.1    Die Methoden von Stack
  11.4.2    Ein Stack ist ein Vektor – aha!
11.5    Die Klasse Hashtable und assoziative Speicher
  11.5.1    Ein Objekt der Klasse Hashtable erzeugen
  11.5.2    Einfügen und Abfragen der Datenstruktur
  11.5.3    Die Arbeitsweise einer Hashtabelle
  11.5.4    Aufzählen der Elemente
  11.5.5    Ausgabe der Hashtabelle und Gleichheitstest
  11.5.6    Klonen
11.6    Die abstrakte Klasse Dictionary
  11.6.1    Zugriff und Abfrage
  11.6.2    Metainformationen
  11.6.3    Iterationen über die Elemente
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.8    Windows-typische INI-Dateien
11.9    Queue, die Schlange
11.10    Die Collection-API
  11.10.1    Die Schnittstelle Collection
  11.10.2    Schnittstellen, die Collection erweitern, und Map
  11.10.3    Abstrakte Basisklassen für Container
  11.10.4    Konkrete Container-Klassen
  11.10.5    Unterschiede zu den älteren Datenstrukturen und die Synchronisation
  11.10.6    Das erste Programm mit Container-Klassen
  11.10.7    Iteratoren
  11.10.8    Der Comparator
  11.10.9    toArray() von Collection verstehen – Chance für eine Falle erkennen
11.11    Listen
  11.11.1    AbstractList
  11.11.2    Optionale Methoden
  11.11.3    ArrayList
  11.11.4    LinkedList
11.12    Algorithmen
  11.12.1    Datenmanipulation
  11.12.2    Größten und kleinsten Wert einer Collection finden
  11.12.3    Sortieren
  11.12.4    Elemente in der Collection suchen
11.13    Typsichere Datenstrukturen
11.14    Die Klasse BitSet für Bitmengen
  11.14.1    Ein BitSet anlegen und füllen
  11.14.2    Mengenorientierte Operationen
  11.14.3    Funktionsübersicht
  11.14.4    Primzahlen in einem BitSet verwalten
11.15    Ein Design-Pattern durch Beobachten von Änderungen
  11.15.1    Design-Pattern
  11.15.2    Das Beobachter-Pattern (Observer/Observable)
Galileo Computing

12    Datenströme und Dateien

12.1    Dateien und Verzeichnisse
  12.1.1    Dateien und Verzeichnisse mit der Klasse File
  12.1.2    Dateieigenschaften und -attribute
  12.1.3    Umbenennen, Verzeichnisse anlegen und Datei löschen
  12.1.4    Die Wurzel aller Verzeichnisse
  12.1.5    Verzeichnisse listen und Dateien filtern
  12.1.6    Implementierungsmöglichkeiten für die Klasse File
  12.1.7    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    Hin und her in der Datei
  12.2.4    Die Länge des RandomAccessFile
12.3    Übersicht über wichtige Stream- und WriterReader
  12.3.1    Die abstrakten Basisklassen
12.4    Eingabe- und Ausgabe-Klassen: InputStream und OutputStream
  12.4.1    Die Klasse OutputStream
  12.4.2    Ein Datenschlucker
  12.4.3    Die Eingabeklasse InputStream
  12.4.4    Anwenden der Klasse FileInputStream
  12.4.5    Anwendung der Klasse FileOutputStream
  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 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    Datenströme komprimieren
  12.10.2    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    Tiefe Objektkopien
  12.12.5    Felder sind implizit Serializable
  12.12.6    Versionenverwaltung und die SUID
  12.12.7    Beispiele aus den Standard-Klassen
  12.12.8    Serialisieren in XML-Dateien
  12.12.9    JSX (Java Serialization to XML)
  12.12.10    XML-API von Sun
12.13    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.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.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 Short-Cuts (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.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    Die Zwischenablage (Clipboard)
15.31    Undo durchführen
15.32    Ereignisverarbeitung auf unterster Ebene
15.33    AWT, Swing und die Threads
  15.33.1    Warum Swing nicht Thread-sicher ist
  15.33.2    Swing-Elemente bedienen mit invokeLater() und invokeAndWait()
15.34    Selbst definierte Cursor
  15.34.1    Flackern des Mauszeigers bei Animationen vermeiden
15.35    Mausrad-Unterstützung
15.36    Benutzerinteraktionen automatisieren
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: von URL zu URLConnection
  16.3.4    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    Klasse-K-Netz
  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    Webprotokolle 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 Webservers
  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 Webseiten 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 Webserver 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    Webserver 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    Webapplikationen
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 kompilieren und ausführen
  17.18.1    Servlets kompilieren
  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 Webseite
  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    Servlets und Sessions
17.22    Weiterleiten und Einbinden von Servlet-Inhalten
17.23    Inter-Servlet-Kommunikation
  17.23.1    Daten zwischen Servlets teilen
17.24    Internationalisierung
  17.24.1    Die Länderkennung des Anfragers auslesen
  17.24.2    Länderkennung für die Ausgabe setzen
  17.24.3    Westeuropäische Texte senden
17.25    Sonstiges zu den Servern
  17.25.1    Den internen Compiler bei Tomcat für JSP ändern
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    Wie die Stellvertreter die Daten übertragen
  18.1.4    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.3.3    RMI und CORBA
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.5.4    UnicastRemoteObjekt, RemoteServer und RemoteObject
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     Daily Soap
  18.14.1    SOAP-Implementierung der Apache-Gruppe
  18.14.2    Einen Client mit der Apache-Bibliothek implementieren
  18.14.3    Der Seifen-Server
18.15    Java-API für XML Messaging (JAXM)
18.16    Java Message Service (JMS)
  18.16.1    OpenJMS
  18.16.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 Browserinhalt ä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.1.1    Relationale und objektorientierte Datenbanken
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.5    Datenbanken und ihre Treiber
  20.5.1    Datenbank Interbase und Firebird
  20.5.2    Interbase JDBC-Treiber
  20.5.3    Die freie Datenbank MySQL
  20.5.4    JDBC-Treiber für MySQL
  20.5.5    Die Datenbank Microsoft Access
  20.5.6    Ein Typ 4-Treiber für den Microsoft SQL Server 2000
  20.5.7    Die JDBC-ODBC Bridge
  20.5.8    ODBC einrichten und Access damit verwenden
  20.5.9    Oracle8i Enterprise Edition
20.6    Eine Beispiel-Abfrage
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    Wie Treiber programmiert sind
  20.7.6    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    wasNull() bei 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)
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 nicht visuelle Komponenten
  22.1.3    Andere Komponententechnologien oder: Was uns Microsoft brachte
22.2    Das Java-Beans 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-Eingenschaften 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    Kompilieren 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 Rechtedateien mit dem grafischen Policy-Tool
24.3    Klassenlader (Class Loader)
  24.3.1    Wie heißt die Klasse mit der Methode main()?
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.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 Applikation
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    Dienstprogramme zur Signierung
  25.5.1    Mit keytool Schlüssel erzeugen
  25.5.2    Signieren mit jarsigner
25.6    Konvertierung von Java Byte Code in ein Windows–Exe mit JET
25.7    Manteln von Javaklassen in ein Windows-Exe mit JexePack
25.8    Decompiler
  25.8.1    Jad, ein schneller Decompiler
  25.8.2    SourceAgain
  25.8.3    Dekompilieren erschweren
25.9    Obfuscate Programm RetroGuard
25.10    Source-Code Beautifier
25.11    Ant
  25.11.1    Bezug und Installation von Ant
  25.11.2    Properties
  25.11.3    Externe und vordefinierte Properties
  25.11.4    Weitere Leistungen
Galileo Computing

26    Style-Guide

26.1    Programmierrichtlinien
26.2    Allgemeine Richtlinien
26.3    Quellcode kommentieren
  26.3.1    Bemerkungen über JavaDoc
  26.3.2    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

Galileo Computing

B    Spenden

Galileo Computing

    Index

Zum Katalog
Einstieg in XML




Copyright © Galileo Press GmbH 2003
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