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

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Die Funktionsbibliothek
10 Threads und nebenläufige Programmierung
11 Raum und Zeit
12 Datenstrukturen und Algorithmen
13 Dateien und Datenströme
14 Die eXtensible Markup Language (XML)
15 Grafische Oberflächen mit Swing
16 Grafikprogrammierung
17 Netzwerkprogrammierung
18 Verteilte Programmierung mit RMI und Web-Services
19 JavaServer Pages und Servlets
20 Applets
21 Midlets und die Java ME
22 Datenbankmanagement mit JDBC
23 Reflection und Annotationen
24 Logging und Monitoring
25 Sicherheitskonzepte
26 Java Native Interface (JNI)
27 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort

Download:
- ZIP, ca. 12,5 MB
Buch bestellen
Ihre Meinung?

Spacer
Java ist auch eine Insel von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel

Java ist auch eine Insel
7., aktualisierte Auflage
geb., mit DVD (November 2007)
1492 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1146-8

Nützliche Links:
Diese 7. Auflage des Java-Kultbuches wurde gründlich überarbeitet, aktualisiert und erweitert. Alle wichtigen Neuerungen zu Java 6 wurden aufgenommen und auch erste Ausblicke auf die Version 7.

Besonders Einsteiger mit Programmierkenntnissen und Industrieprogrammierer profitieren von diesem umfassenden Werk. Tipps und Tricks aus den Java-FAQs werden regelmäßig mit in die Insel aufgenommen, um wirklich das abzudecken, was Sie im Alltag brauchen. Die Einführung in die Sprache Java ist anschaulich und immer praxisorientiert. Schnell geht es weiter mit fortgeschrittenen Themen wie Threads, Swing, Netzwerkprogrammierung, Java Beans, RMI, XML und Java, Servlets und Java Server Pages, JDBC und vielem mehr.

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

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

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

Inhaltsverzeichnis

Vorwort

Vorwort zur 6. Auflage

Vorwort zur 7. Auflage

Galileo Computing - Zum Seitenanfang

1 Java ist auch eine 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 Objektorientierung in Java
1.3.3 Java-Security-Modell
1.3.4 Zeiger und Referenzen
1.3.5 Bring den Müll raus, Garbage-Collector!
1.3.6 Ausnahmebehandlung
1.3.7 Kein Präprozessor für Textersetzungen
1.3.8 Keine überladenen Operatoren
1.3.9 Java als Sprache, Laufzeitumgebung und Bibliothek
1.3.10 Wofür sich Java nicht eignet
1.3.11 Java im Vergleich zu anderen Sprachen
1.3.12 Java ist Open Source

1.4 Die Rolle von Java im Web

1.4.1 Vollwertige Applikationen statt Applets

1.5 Die Java Platform Standard Edition (Java SE)

1.5.1 JDK und JRE
1.5.2 Java-Versionen
1.5.3 Java für die Kleinen
1.5.4 Java für die Großen
1.5.5 Installationsanleitung für Java SE

1.6 Das erste Programm compilieren und testen

1.6.1 Ein Quadratzahlen-Programm
1.6.2 Der Compilerlauf
1.6.3 Die Laufzeitumgebung
1.6.4 Häufige Compiler- und Interpreterprobleme

1.7 Entwicklungsumgebungen im Allgemeinen

1.7.1 Die Entwicklungsumgebung Eclipse
1.7.2 NetBeans von Sun
1.7.3 Ein Wort zu Microsoft, Java und zu J++

1.8 Eclipse im Speziellen

1.8.1 Eclipse starten
1.8.2 Das erste Projekt anlegen
1.8.3 Eine Klasse hinzufügen
1.8.4 Übersetzen und Ausführen
1.8.5 JDK statt JRE
1.8.6 Start eines Programms ohne Speicheraufforderung
1.8.7 Projekt einfügen oder Workspace für die Aufgaben wechseln
1.8.8 Plugins für Eclipse
1.8.9 Eclipse Web Tools Platform (WTP)

1.9 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

2 Sprachbeschreibung

2.1 Elemente der Programmiersprache Java

2.1.1 Textkodierung durch Unicode-Zeichen
2.1.2 Literale
2.1.3 Bezeichner
2.1.4 Reservierte Schlüsselwörter
2.1.5 Token
2.1.6 Kommentare

2.2 Anweisungen formen Programme

2.2.1 Anweisungen
2.2.2 Eine Klasse bildet den Rahmen
2.2.3 Die Reise beginnt am main()
2.2.4 Programme übersetzen und starten
2.2.5 Funktionsaufrufe als Ausdrücke und Anweisungen
2.2.6 print(), println() und printf() für Bildschirmausgaben
2.2.7 Modifizierer
2.2.8 Anweisungen und Blöcke

2.3 Datentypen

2.3.1 Primitive Datentypen im Überblick
2.3.2 Wahrheitswerte
2.3.3 Variablendeklarationen
2.3.4 Ganzzahlige Datentypen
2.3.5 Die Fließkommazahlen float und double
2.3.6 Alphanumerische Zeichen

2.4 Ausdrücke, Operanden und Operatoren

2.4.1 Zuweisungsoperator
2.4.2 Arithmetische Operatoren
2.4.3 Unäres Minus und Plus
2.4.4 Zuweisung mit Operation
2.4.5 Präfix- oder Postfix-Inkrement und -Dekrement
2.4.6 Die relationalen Operatoren und die Gleichheitsoperatoren
2.4.7 Logische Operatoren Und, Oder, Xor, Nicht
2.4.8 Rang der Operatoren in der Auswertungsreihenfolge
2.4.9 Die Typanpassung (das Casting)
2.4.10 Überladenes Plus für Strings
2.4.11 Was C(++)-Programmierer vermissen könnten

2.5 Bedingte Anweisungen oder Fallunterscheidungen

2.5.1 Die if-Anweisung
2.5.2 Die Alternative mit einer if/else-Anweisung wählen
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 Beschreibungen in der Java-API
2.7.3 Aufruf einer Methode
2.7.4 Methoden ohne Parameter
2.7.5 Statische Funktionen (Klassenmethoden)
2.7.6 Parameter, Argument und Wertübergabe
2.7.7 Methoden vorzeitig mit return beenden
2.7.8 Nicht erreichbarer Quellcode bei Funktionen
2.7.9 Rückgabewerte
2.7.10 Methoden überladen
2.7.11 Vorgegebener Wert für nicht aufgeführte Argumente
2.7.12 Finale lokale Variablen
2.7.13 Rekursive Funktionen
2.7.14 Die Türme von Hanoi

2.8 Weitere Operatoren

2.8.1 Bits und Bytes
2.8.2 Operationen auf Bit-Ebene
2.8.3 Die Verschiebeoperatoren
2.8.4 Ein Bit setzen, löschen, umdrehen und testen
2.8.5 Bit-Funktionen der Integer- und Long-Klasse
2.8.6 Der Bedingungsoperator

2.9 Einfache Benutzereingaben

2.10 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

3 Klassen und Objekte

3.1 Objektorientierte Programmierung

3.1.1 Warum überhaupt OOP?
3.1.2 Wiederverwertbarkeit

3.2 Eigenschaften einer Klasse

3.2.1 Die Klasse Point

3.3 Die UML (Unified Modeling Language)

3.3.1 Hintergrund und Geschichte zur UML
3.3.2 Wichtige Diagrammtypen der UML

3.4 Neue Objekte erzeugen

3.4.1 Anlegen eines Exemplars einer Klasse mit dem new-Operator
3.4.2 Deklarieren von Referenzvariablen
3.4.3 Zugriff auf Variablen und Methoden mit dem ».«
3.4.4 Konstruktoren nutzen
3.4.5 Die API-Dokumentation

3.5 Import und Pakete

3.6 Mit Referenzen arbeiten

3.6.1 Die null-Referenz
3.6.2 Zuweisungen bei Referenzen
3.6.3 Funktionen mit nicht-primitiven Parametern

3.7 Identität und Gleichheit

3.7.1 Identität von Objekten
3.7.2 Gleichheit und die Methode equals()

3.8 Wrapper-Klassen und Autoboxing

3.8.1 Die Basisklasse Number für numerische Wrapper-Objekte
3.8.2 Die Klasse Integer
3.8.3 Unterschiedliche Ausgabeformate
3.8.4 Autoboxing: Boxing und Unboxing
3.8.5 Die Boolean-Klasse
3.8.6 Die Klassen Double und Float für Fließkommazahlen

3.9 Arrays

3.9.1 Deklaration von Arrays
3.9.2 Arrays mit Inhalt
3.9.3 Die Länge eines Arrays über das Attribut length
3.9.4 Zugriff auf die Elemente über den Index
3.9.5 Array-Objekte erzeugen
3.9.6 Fehler bei Arrays
3.9.7 Vorinitialisierte Arrays
3.9.8 Die erweiterte for-Schleife
3.9.9 Arrays mit nicht-primitiven Elementen
3.9.10 Mehrdimensionale Arrays
3.9.11 Die Wahrheit über die Array-Initialisierung
3.9.12 Mehrere Rückgabewerte
3.9.13 Methode mit variabler Argumentanzahl (Vararg)
3.9.14 Klonen kann sich lohnen – Arrays vermehren
3.9.15 Feldinhalte kopieren
3.9.16 Die Klasse Arrays zum Vergleichen, Füllen und Suchen

3.10 Der Einstiegspunkt für das Laufzeitsystem main()

3.10.1 Kommandozeilen-Argumente verarbeiten
3.10.2 Der Rückgabewert von main() und System.exit()

3.11 Eigene Pakete schnüren

3.11.1 Die package-Anweisung
3.11.2 Importieren von Klassen mit import
3.11.3 Hierarchische Strukturen und das Default-Package
3.11.4 Paketnamen
3.11.5 Klassen mit gleichen Namen in unterschiedlichen Paketen
3.11.6 Statisches Import
3.11.7 Eine Verzeichnisstruktur für eigene Projekte

3.12 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

4 Der Umgang mit Zeichenketten

4.1 Einzelne Zeichen mit der Character-Klasse behandeln

4.2 Strings und deren Anwendung

4.2.1 String-Literale als String-Objekte für konstante Zeichenketten
4.2.2 String-Länge und Test auf Leerstring
4.2.3 Nach enthaltenen Zeichen und Zeichenfolgen suchen
4.2.4 Gut, dass wir verglichen haben
4.2.5 String-Teile extrahieren
4.2.6 Strings anhängen, Groß-/Kleinschreibung und Leerraum
4.2.7 Suchen und ersetzen
4.2.8 String-Objekte mit Konstruktoren neu anlegen

4.3 Konvertieren zwischen Primitiven und Strings

4.3.1 Unterschiedliche Typen in Zeichenketten konvertieren
4.3.2 String in primitives Element konvertieren

4.4 Veränderbare Zeichenketten mit StringBuffer/StringBuilder

4.4.1 Anlegen von StringBuffer/StringBuilder-Objekten
4.4.2 Die Länge eines StringBuffer/-Builder-Objekts
4.4.3 Daten anhängen
4.4.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen
4.4.5 Vergleichen von String/StringBuffer/StringBuilder
4.4.6 hashCode() bei StringBuffer/StringBuilder

4.5 Sprachabhängiges Vergleichen und Normalisierung

4.5.1 Die Klasse Collator
4.5.2 Effiziente interne Speicherung für die Sortierung
4.5.3 Normalisierung

4.6 Reguläre Ausdrücke

4.6.1 Die Klassen Pattern und Matcher
4.6.2 Mit MatchResult alle Ergebnisse einsammeln

4.7 Zerlegen von Zeichenketten

4.7.1 Splitten von Zeichenketten mit split()
4.7.2 split() in Pattern
4.7.3 Die Klasse Scanner
4.7.4 StringTokenizer
4.7.5 BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner

4.8 Zeichenkodierungen und Base64

4.8.1 Über die Klasse String Kodierungen vornehmen
4.8.2 Konvertieren mit OutputStreamWriter-Klassen
4.8.3 Das Paket java.nio.charset
4.8.4 Base64-Kodierung

4.9 Formatieren von Ausgaben

4.9.1 Formatieren mit format() aus String
4.9.2 Die Format-Klassen im Überblick
4.9.3 Zahlen, Prozente und Währungen mit NumberFormat und DecimalFormat formatieren
4.9.4 Ausgaben mit MessageFormat formatieren

4.10 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

5 Mathematisches

5.1 Repräsentation ganzer Zahlen – das Zweierkomplement

5.2 Fließkommaarithmetik in Java

5.2.1 Mantisse und Exponent
5.2.2 Spezialwerte Unendlich, Null, NaN

5.3 Wertebereich eines Typs und Überlaufkontrolle

5.3.1 Behandlung des Überlaufs

5.4 Die Eigenschaften der Klasse Math

5.4.1 Attribute
5.4.2 Absolutwerte und Maximum/Minimum
5.4.3 Winkelfunktionen
5.4.4 Runden von Werten
5.4.5 Wurzel und Exponentialfunktionen
5.4.6 Der Logarithmus
5.4.7 Rest der ganzzahligen Division
5.4.8 Zufallszahlen

5.5 Mathe bitte strikt

5.5.1 Strikt Fließkomma mit strictfp
5.5.2 Die Klassen Math und StrictMath

5.6 Die Random-Klasse

5.6.1 Objekte aufbauen und der Seed
5.6.2 Zufallszahlen erzeugen
5.6.3 Pseudo-Zufallszahlen in der Normalverteilung

5.7 Große Zahlen

5.7.1 Die Klasse BigInteger
5.7.2 Funktionen von BigInteger
5.7.3 Ganz lange Fakultäten
5.7.4 Große Fließkommazahlen mit BigDecimal
5.7.5 Mit MathContext komfortabel die Rechengenauigkeit setzen

5.8 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

6 Eigene Klassen schreiben

6.1 Eigene Klassen mit Eigenschaften deklarieren

6.1.1 Attribute deklarieren
6.1.2 Methoden deklarieren
6.1.3 Die this-Referenz

6.2 Privatsphäre und Sichtbarkeit

6.2.1 Für die Öffentlichkeit: public
6.2.2 Paketsichtbar
6.2.3 Kein Public Viewing – Passwörter sind privat
6.2.4 Wieso nicht freie Methoden und Variablen für alle?
6.2.5 Privat ist nicht ganz privat: Es kommt darauf an, wer’s sieht
6.2.6 Zugriffsmethoden für Attribute deklarieren
6.2.7 Setter und Getter nach der JavaBeans-Spezifikation

6.3 Statische Methoden und statische Attribute

6.3.1 Warum statische Eigenschaften sinnvoll sind
6.3.2 Statische Eigenschaften mit static
6.3.3 Statische Eigenschaften über Referenzen nutzen?
6.3.4 Warum die Groß- und Kleinschreibung wichtig ist
6.3.5 Statische Eigenschaften und Objekteigenschaften
6.3.6 Statische Variablen zum Datenaustausch
6.3.7 Statische Blöcke als Klasseninitialisierer

6.4 Konstanten und Aufzählungen

6.4.1 Konstanten über öffentliche statische finale Variablen
6.4.2 Eincompilierte Belegungen der Klassenvariablen
6.4.3 Typ(un)sicherere Aufzählungen
6.4.4 Aufzählungen mit enum

6.5 Objekte anlegen und zerstören

6.5.1 Konstruktoren schreiben
6.5.2 Der Standard-Konstruktor
6.5.3 Parametrisierte und überladene Konstruktoren
6.5.4 Konstruktor nimmt ein Objekt vom eigenen Typ an (Copy-Konstruktor)
6.5.5 Einen anderen Konstruktor der gleichen Klasse aufrufen
6.5.6 Initialisierung der Objekt- und Klassenvariablen
6.5.7 Finale Werte im Konstruktor und in statischen Blöcken setzen
6.5.8 Exemplarinitialisierer (Instanzinitialisierer)
6.5.9 Ihr fehlt uns nicht – der Garbage-Collector
6.5.10 Implizit erzeugte String-Objekte
6.5.11 Private Konstruktoren, Utility-Klassen, Singleton, Fabriken

6.6 Assoziationen zwischen Objekten

6.6.1 Unidirektionale 1:1-Beziehung
6.6.2 Bidirektionale 1:1-Beziehungen
6.6.3 Unidirektionale 1:n-Beziehung

6.7 Vererbung

6.7.1 Vererbung in Java
6.7.2 Spielobjekte modelliert
6.7.3 Einfach- und Mehrfachvererbung
6.7.4 Sichtbarkeit protected
6.7.5 Konstruktoren in der Vererbung und super
6.7.6 Automatische und explizite Typanpassung
6.7.7 Das Substitutionsprinzip
6.7.8 Typen mit dem binären Operator instanceof testen
6.7.9 Methoden überschreiben
6.7.10 Mit super an die Eltern
6.7.11 Kovariante Rückgabetypen
6.7.12 Array-Typen und Kovarianz
6.7.13 Zusammenfassung zur Sichtbarkeit

6.8 Dynamisches Binden

6.8.1 Unpolymorph bei privaten, statischen und finalen Methoden
6.8.2 Polymorphie bei Konstruktoraufrufen
6.8.3 Finale Klassen
6.8.4 Nicht überschreibbare (finale) Methoden

6.9 Abstrakte Klassen und abstrakte Methoden

6.9.1 Abstrakte Klassen
6.9.2 Abstrakte Methoden

6.10 Schnittstellen

6.10.1 Deklarieren von Schnittstellen
6.10.2 Implementieren von Schnittstellen
6.10.3 Markierungsschnittstellen
6.10.4 Ein Polymorphie-Beispiel mit Schnittstellen
6.10.5 Die Mehrfachvererbung bei Schnittstellen
6.10.6 Keine Kollisionsgefahr bei Mehrfachvererbung
6.10.7 Erweitern von Interfaces – Subinterfaces
6.10.8 Vererbte Konstanten bei Schnittstellen
6.10.9 Schnittstellenmethoden, die nicht implementiert werden müssen
6.10.10 Abstrakte Klassen und Schnittstellen im Vergleich

6.11 Geschachtelte (innere) Klassen, Schnittstellen, Aufzählungen

6.11.1 Statische innere Klassen und Schnittstellen
6.11.2 Mitglieds- oder Elementklassen
6.11.3 Lokale Klassen
6.11.4 Anonyme innere Klassen
6.11.5 this und Vererbung

6.12 Generische Datentypen

6.12.1 Einfache Klassenschablonen
6.12.2 Einfache Methodenschablonen
6.12.3 Umsetzen der Generics, Typlöschung und Raw-Types
6.12.4 Einschränken der Typen
6.12.5 Generics und Vererbung, Invarianz
6.12.6 Wildcards

6.13 Die Spezial-Oberklasse Enum

6.13.1 Methoden auf Enum-Objekten
6.13.2 enum mit eigenen Konstruktoren und Methoden

6.14 Dokumentationskommentare mit JavaDoc

6.14.1 Einen Dokumentationskommentar setzen
6.14.2 Mit javadoc eine Dokumentation erstellen
6.14.3 HTML-Tags in Dokumentationskommentaren
6.14.4 Generierte Dateien
6.14.5 Dokumentationskommentare im Überblick
6.14.6 JavaDoc und Doclets
6.14.7 Veraltete (deprecated) Klassen, Konstruktoren und Methoden
Galileo Computing - Zum Seitenanfang

7 Angewandte Objektorientierung

7.1 Schnittstellen in der Anwendung

7.1.1 CharSequence als Beispiel einer Schnittstelle
7.1.2 Die Schnittstelle Iterable
7.1.3 Funktionszeiger
7.1.4 Implementierung einer verketteten Liste

7.2 Design-Pattern (Entwurfsmuster)

7.2.1 Design-Pattern
7.2.2 Das Beobachter-Pattern (Observer/Observable)
7.2.3 Ereignisse über Listener
7.2.4 Multicast und Unicast

7.3 JavaBean

7.3.1 Properties (Eigenschaften)
7.3.2 Einfache Eigenschaften
7.3.3 Indizierte Eigenschaften
7.3.4 Gebundene Eigenschaften
7.3.5 Veto-Eigenschaften – dagegen!
Galileo Computing - Zum Seitenanfang

8 Exceptions

8.1 Problembereiche einzäunen

8.1.1 Exceptions in Java mit try und catch
8.1.2 Eine Datei mit RandomAccessFile auslesen
8.1.3 Ablauf einer Ausnahmesituation
8.1.4 Wiederholung abgebrochener Bereiche
8.1.5 throws im Methodenkopf angeben
8.1.6 Abschlussbehandlung mit finally
8.1.7 Nicht erreichbare catch-Klauseln

8.2 Die Klassenhierarchie der Fehler

8.2.1 Die Exception-Hierarchie
8.2.2 Oberausnahmen auffangen
8.2.3 Alles geht als Exception durch
8.2.4 RuntimeException muss nicht aufgefangen werden
8.2.5 Harte Fehler: Error

8.3 Auslösen eigener Exceptions

8.3.1 Mit throw Ausnahmen auslösen
8.3.2 Neue Exception-Klassen deklarieren
8.3.3 Abfangen und Weiterleiten
8.3.4 Geschachtelte Ausnahmen
8.3.5 Rückgabewerte bei ausgelösten Ausnahmen

8.4 Der Stack-Trace

8.4.1 Stack-Trace erfragen

8.5 Assertions

8.5.1 Assertions in eigenen Programmen nutzen
8.5.2 Assertions aktivieren
Galileo Computing - Zum Seitenanfang

9 Die Funktionsbibliothek

9.1 Die Java-Klassenphilosophie

9.1.1 Übersicht über die Pakete der Standardbibliothek

9.2 Object ist die Mutter aller Oberklassen

9.2.1 Klassenobjekte
9.2.2 Objektidentifikation mit toString()
9.2.3 Objektgleichheit mit equals() und Identität
9.2.4 Klonen eines Objekts mit clone()
9.2.5 Hashcodes über hashCode() liefern
9.2.6 Aufräumen mit finalize()
9.2.7 Synchronisation

9.3 Klassenlader (Class Loader)

9.3.1 Woher die kleinen Klassen kommen
9.3.2 Setzen des Klassenpfades
9.3.3 Die wichtigsten drei Typen von Klassenladern
9.3.4 Der java.lang.ClassLoader
9.3.5 Hot Deployment mit dem URL-ClassLoader
9.3.6 Das jre/lib/endorsed-Verzeichnis
9.3.7 getContextClassLoader() vom Thread

9.4 Die Utility-Klasse System und Properties

9.4.1 Systemeigenschaften der Java-Umgebung
9.4.2 line.separator
9.4.3 Browser-Version abfragen
9.4.4 Property von der Konsole aus setzen
9.4.5 Umgebungsvariablen des Betriebssystems
9.4.6 Einfache Zeitmessung und Profiling

9.5 Ausführen externer Programme und Skripte

9.5.1 ProcessBuilder und Prozesskontrolle mit Process
9.5.2 Einen Browser/E-Mail-Client/Editor aufrufen
9.5.3 Ausführen von Skripten

9.6 Benutzereinstellungen

9.6.1 Benutzereinstellungen in Windows-Registry oder XML-Dokumenten
9.6.2 Einträge einfügen, auslesen und löschen
9.6.3 Auslesen der Daten und Schreiben in anderem Format
9.6.4 Auf Ereignisse horchen
9.6.5 Zugriff auf die gesamte Windows-Registry

9.7 Musik abspielen

9.7.1 Die Arbeit mit AudioClip
9.7.2 Java Sound API

9.8 Annotationen

9.8.1 Annotationstypen
9.8.2 Common Annotations
9.8.3 Annotationen für Web-Services
9.8.4 Annotationen für XML-Mapping

9.9 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

10 Threads und nebenläufige Programmierung

10.1 Nebenläufigkeit

10.1.1 Threads und Prozesse
10.1.2 Wie parallele Programme die Geschwindigkeit steigern können
10.1.3 Was Java für Nebenläufigkeit alles bietet

10.2 Threads erzeugen

10.2.1 Threads über die Schnittstelle Runnable implementieren
10.2.2 Thread mit Runnable starten
10.2.3 Der Name eines Threads
10.2.4 Die Klasse Thread erweitern
10.2.5 Wer bin ich?

10.3 Die Zustände eines Threads

10.3.1 Threads schlafen
10.3.2 Mit yield() auf Rechenzeit verzichten
10.3.3 Das Ende eines Threads
10.3.4 UncaughtExceptionHandler für unbehandelte Ausnahmen
10.3.5 Einen Thread höflich mit Interrupt beenden
10.3.6 Der stop() von außen und die Rettung mit ThreadDeath
10.3.7 Ein Rendezvous mit join()
10.3.8 Barrier und Austausch mit Exchanger
10.3.9 Arbeit niederlegen und wieder aufnehmen
10.3.10 Priorität
10.3.11 Der Thread ist ein Dämon

10.4 Der Ausführer (Executor) kommt

10.4.1 Die Schnittstelle Executor
10.4.2 Die Thread-Pools
10.4.3 Threads mit Rückgabe über Callable
10.4.4 Mehrere Callable abarbeiten
10.4.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen

10.5 Synchronisation über kritische Abschnitte

10.5.1 Gemeinsam genutzte Daten
10.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
10.5.3 Punkte parallel initialisieren
10.5.4 i++ sieht atomar aus, ist es aber nicht
10.5.5 Kritische Abschnitte schützen
10.5.6 Schützen mit ReentrantLock
10.5.7 Synchronisieren mit synchronized
10.5.8 Synchronized-Methoden der Klasse StringBuffer
10.5.9 Mit synchronized synchronisierte Blöcke
10.5.10 Dann machen wir doch gleich alles synchronisiert!
10.5.11 Lock-Freigabe im Fall von Exceptions
10.5.12 Mit synchronized nachträglich synchronisieren
10.5.13 Monitore sind reentrant – gut für die Geschwindigkeit
10.5.14 Synchronisierte Methodenaufrufe zusammenfassen
10.5.15 Deadlocks

10.6 Synchronisation über Warten und Benachrichtigen

10.6.1 Die Schnittstelle Condition
10.6.2 Beispiel: Erzeuger-Verbraucher-Programm
10.6.3 Warten mit wait() und Aufwecken mit notify()
10.6.4 Falls der Lock fehlt: IllegalMonitorStateException
10.6.5 Semaphor

10.7 Atomare Operationen und frische Werte mit volatile

10.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
10.7.2 Das Paket java.util.concurrent.atomic

10.8 Mit dem Thread verbundene Variablen

10.8.1 ThreadLocal
10.8.2 InheritableThreadLocal

10.9 Gruppen von Threads in einer Thread-Gruppe

10.9.1 Aktive Threads in der Umgebung
10.9.2 Etwas über die aktuelle Thread-Gruppe herausfinden
10.9.3 Threads in einer Thread-Gruppe anlegen
10.9.4 Methoden von Thread und ThreadGroup im Vergleich

10.10 Zeitgesteuerte Abläufe

10.10.1 Die Klassen Timer und TimerTask
10.10.2 Job-Scheduler Quartz

10.11 Einen Abbruch der virtuellen Maschine erkennen

10.12 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

11 Raum und Zeit

11.1 Weltzeit

11.2 Wichtige Datum-Klassen im Überblick

11.3 Sprachen der Länder

11.3.1 Sprachen und Regionen über Locale-Objekte

11.4 Internationalisierung und Lokalisierung

11.4.1 ResourceBundle-Objekte und Ressource-Dateien
11.4.2 Ressource-Dateien zur Lokalisierung
11.4.3 Die Klasse ResourceBundle
11.4.4 Ladestrategie für ResourceBundle-Objekte

11.5 Zeitzonen

11.5.1 Zeitzonen durch die Klasse TimeZone repräsentieren

11.6 Die Klasse Date

11.6.1 Objekte erzeugen und Methoden nutzen

11.7 Calendar und GregorianCalendar

11.7.1 Die abstrakte Klasse Calendar
11.7.2 Der gregorianische Kalender
11.7.3 Ostertage
11.7.4 Abfragen und Setzen von Datumselementen

11.8 Formatieren und Parsen von Datumsangaben

11.8.1 Ausgaben mit printf()
11.8.2 Mit DateFormat und SimpleDateFormat formatieren
11.8.3 Parsen von Datumswerten

11.9 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

12 Datenstrukturen und Algorithmen

12.1 Datenstrukturen und die Collection-API

12.1.1 Designprinzip mit Schnittstellen, abstrakten Klassen, konkreten Klassen
12.1.2 Die Basis-Schnittstellen Collection und Map
12.1.3 Das erste Programm mit Container-Klassen
12.1.4 Die Schnittstelle Collection
12.1.5 Schnittstellen, die Collection erweitern, und Map
12.1.6 Konkrete Container-Klassen
12.1.7 Welche Klasse nehmen?
12.1.8 Generische Datentypen in der Collection-API
12.1.9 Die Schnittstelle Iterable und das erweiterte for

12.2 Mit einem Iterator durch die Daten wandern

12.2.1 Die Schnittstellen Enumeration und Iterator
12.2.2 Iteratoren von Sammlungen und das erweiterte for
12.2.3 Fail-Fast Iterator und die ConcurrentModificationException

12.3 Listen

12.3.1 ArrayList oder LinkedList? Speicherung im Feld oder in einer verketteten Liste
12.3.2 Die Schnittstelle List
12.3.3 ArrayList
12.3.4 LinkedList
12.3.5 Der Feld-Adapter Arrays.asList()
12.3.6 toArray() von Collection verstehen – die Gefahr einer Falle erkennen
12.3.7 Primitive Elemente in den Collection-Datenstrukturen

12.4 Vergleichen von Objekten

12.4.1 Die Schnittstellen Comparator und Comparable
12.4.2 Algorithmen mit Such- und Sortiermöglichkeiten
12.4.3 Den größten und kleinsten Wert einer Collection finden
12.4.4 Sortieren

12.5 Mengen (Sets)

12.5.1 HashSet
12.5.2 TreeSet – die Menge durch Bäume
12.5.3 LinkedHashSet

12.6 Stack (Kellerspeicher, Stapel)

12.6.1 Die Methoden von Stack
12.6.2 Ein Stack ist ein Vector – aha!

12.7 Queues (Schlangen) und Deques

12.7.1 Die Schnittstelle Queue
12.7.2 Blockierende Queues und Prioritätswarteschlangen
12.7.3 Deque-Klassen

12.8 Assoziative Speicher

12.8.1 Die Klassen HashMap und TreeMap
12.8.2 Einfügen und Abfragen der Datenstruktur
12.8.3 Die Bedeutung von equals(), hashCode() und IdentityHashMap
12.8.4 Elemente im Assoziativspeicher müssen unveränderbar bleiben
12.8.5 Aufzählungen und Sichten auf den Assoziativspeicher
12.8.6 Der Gleichheitstest, Hash-Wert und Klon einer Hash-Tabelle
12.8.7 Die Arbeitsweise einer Hash-Tabelle
12.8.8 Multi-Maps

12.9 Die Properties-Klasse

12.9.1 Properties setzen und lesen
12.9.2 Properties verketten
12.9.3 Eigenschaften ausgeben
12.9.4 Hierarchische Eigenschaften
12.9.5 Properties speichern
12.9.6 Klassenbeziehungen: Properties und Hashtable

12.10 Algorithmen in Collections

12.10.1 Listenoperationen: Ersetzen, Kopieren, Füllen, Umdrehen, Rotieren, Durchmischen
12.10.2 Mit der Halbierungssuche nach Elementen fahnden
12.10.3 Nicht-änderbare Datenstrukturen
12.10.4 Häufigkeit eines Elements
12.10.5 nCopies()
12.10.6 Singletons

12.11 Synchronisation der Datenstrukturen

12.11.1 Lock-Free-Algorithmen aus java.util.concurrent
12.11.2 Wrapper zur Synchronisation
12.11.3 CopyOnWriteArrayList und CopyOnWriteArraySet

12.12 Die Klasse BitSet für Bitmengen

12.12.1 Ein BitSet anlegen, füllen und erfragen
12.12.2 Mengenorientierte Operationen
12.12.3 Funktionsübersicht
12.12.4 Primzahlen in einem BitSet verwalten
Galileo Computing - Zum Seitenanfang

13 Dateien und Datenströme

13.1 Datei und Verzeichnis

13.1.1 Dateien und Verzeichnisse mit der Klasse File
13.1.2 Verzeichnis oder Datei? Existiert es?
13.1.3 Verzeichnis- und Dateieigenschaften/-attribute
13.1.4 Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher
13.1.5 Umbenennen und Verzeichnisse anlegen
13.1.6 Verzeichnisse listen und Dateien filtern
13.1.7 Dateien berühren, neue Dateien anlegen, temporäre Dateien
13.1.8 Dateien und Verzeichnisse löschen
13.1.9 Verzeichnisse nach Dateien iterativ durchsuchen
13.1.10 URL- und URI-Objekte aus einem File-Objekt ableiten
13.1.11 Mit Locking Dateien sperren
13.1.12 Sicherheitsprüfung
13.1.13 Mime-Typen mit dem JavaBeans Activation Framework (JAF)
13.1.14 Zugriff auf SMB-Server mit jCIFS

13.2 Dateien mit wahlfreiem Zugriff

13.2.1 Ein RandomAccessFile zum Lesen und Schreiben öffnen
13.2.2 Aus dem RandomAccessFile lesen
13.2.3 Schreiben mit RandomAccessFile
13.2.4 Die Länge des RandomAccessFile
13.2.5 Hin und her in der Datei
13.2.6 Wahlfreier Zugriff und Pufferung mit Unified I/O

13.3 Stream-Klassen und Reader/Writer am Beispiel von Dateien

13.3.1 Mit dem FileWriter Texte in Dateien schreiben
13.3.2 Zeichen mit der Klasse FileReader lesen
13.3.3 Kopieren mit FileOutputStream und FileInputStream
13.3.4 Das FileDescriptor-Objekt

13.4 Basisklassen für die Ein-/Ausgabe

13.4.1 Die abstrakten Basisklassen
13.4.2 Übersicht über Ein-/Ausgabeklassen
13.4.3 Die abstrakte Basisklasse OutputStream
13.4.4 Die Schnittstellen Closeable und Flushable
13.4.5 Ein Datenschlucker
13.4.6 Die abstrakte Basisklasse InputStream
13.4.7 Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar–Archiven laden
13.4.8 Ströme mit SequenceInputStream zusammensetzen
13.4.9 Die abstrakte Basisklasse Writer
13.4.10 Die Schnittstelle Appendable
13.4.11 Die abstrakte Basisklasse Reader

13.5 Formatierte Textausgaben

13.5.1 Die Klassen PrintWriter und PrintStream
13.5.2 System.out, System.err und System.in
13.5.3 Geschützte Passwort-Eingaben mit der Klasse Console

13.6 Schreiben und Lesen aus Strings und Byte-Feldern

13.6.1 Mit dem StringWriter ein String-Objekt füllen
13.6.2 CharArrayWriter
13.6.3 StringReader und CharArrayReader
13.6.4 Mit ByteArrayOutputStream in ein Byte-Feld schreiben
13.6.5 Mit ByteArrayInputStream aus einem Byte-Feld lesen

13.7 Datenströme filtern und verketten

13.7.1 Streams als Filter verketten
13.7.2 Gepufferte Ausgaben mit BufferedWriter und BufferedOutputStream
13.7.3 Gepufferte Eingaben mit BufferedReader und BufferedInputStream
13.7.4 LineNumberReader zählt automatisch Zeilen mit
13.7.5 Daten mit der Klasse PushbackReader zurücklegen
13.7.6 DataOutputStream/DataInputStream
13.7.7 Basisklassen für Filter
13.7.8 Die Basisklasse FilterWriter
13.7.9 Ein LowerCaseWriter
13.7.10 Eingaben mit der Klasse FilterReader filtern

13.8 Vermittler zwischen Byte-Streams und Unicode-Strömen

13.8.1 Datenkonvertierung durch den OutputStreamWriter
13.8.2 Automatische Konvertierungen mit dem InputStreamReader

13.9 Kommunikation zwischen Threads mit Pipes

13.9.1 PipedOutputStream und PipedInputStream
13.9.2 PipedWriter und PipedReader

13.10 Datenkompression

13.10.1 Java-Unterstützung beim Komprimieren und Zusammenpacken
13.10.2 Datenströme komprimieren
13.10.3 Zip-Archive
13.10.4 Jar-Archive

13.11 Prüfsummen

13.11.1 Die Schnittstelle Checksum
13.11.2 Die Klasse CRC32
13.11.3 Die Adler32-Klasse

13.12 Persistente Objekte und Serialisierung

13.12.1 Objekte mit der Standard-Serialisierung speichern und lesen
13.12.2 Zwei einfache Anwendungen der Serialisierung
13.12.3 Die Schnittstelle Serializable
13.12.4 Nicht serialisierbare Attribute aussparen
13.12.5 Das Abspeichern selbst in die Hand nehmen
13.12.6 Tiefe Objektkopien
13.12.7 Versionenverwaltung und die SUID
13.12.8 Wie die ArrayList serialisiert
13.12.9 Probleme mit der Serialisierung
13.12.10 Serialisieren in XML-Dateien
13.12.11 JavaBeans Persistence
13.12.12 XStream

13.13 Tokenizer

13.13.1 StreamTokenizer
13.13.2 CSV-(Comma Separated Values-)Dateien verarbeiten

13.14 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

14 Die eXtensible Markup Language (XML)

14.1 Auszeichnungssprachen

14.1.1 Die Standard Generalized Markup Language (SGML)
14.1.2 Extensible Markup Language (XML)

14.2 Eigenschaften von XML-Dokumenten

14.2.1 Elemente und Attribute
14.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten
14.2.3 Schema – eine Alternative zu DTD
14.2.4 Namensraum (Namespace)
14.2.5 XML-Applikationen

14.3 Die Java-APIs für XML

14.3.1 Das Document Object Model (DOM)
14.3.2 Simple API for XML Parsing (SAX)
14.3.3 Pull-API StAX
14.3.4 Java Document Object Model (JDOM)
14.3.5 JAXP als Java-Schnittstelle zu XML
14.3.6 DOM-Bäume einlesen mit JAXP

14.4 Serielle Verarbeitung mit StAX

14.4.1 Unterschiede der Verarbeitungsmodelle
14.4.2 XML-Dateien mit dem Cursor-Verfahren lesen
14.4.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten
14.4.4 Mit Filtern arbeiten
14.4.5 XML-Dokumente schreiben

14.5 Serielle Verarbeitung von XML mit SAX

14.5.1 Schnittstellen von SAX
14.5.2 SAX-Parser erzeugen
14.5.3 Die wichtigsten Methoden der Schnittstelle ContentHandler
14.5.4 ErrorHandler und EntityResolver

14.6 XML-Dateien mit JDOM verarbeiten

14.6.1 JDOM beziehen
14.6.2 Paketübersicht
14.6.3 Die Document-Klasse
14.6.4 Eingaben aus der Datei lesen
14.6.5 Das Dokument im XML-Format ausgeben
14.6.6 Der Dokumenttyp
14.6.7 Elemente
14.6.8 Zugriff auf Elementinhalte
14.6.9 Liste mit Unterelementen erzeugen
14.6.10 Neue Elemente einfügen und ändern
14.6.11 Attributinhalte lesen und ändern
14.6.12 XPath

14.7 Transformationen mit XSLT

14.7.1 Templates und XPath als Kernelemente von XSLT
14.7.2 Umwandlung von XML-Dateien mit JDOM und JAXP

14.8 Java Architecture for XML Binding (JAXB)

14.8.1 Beans für JAXB aufbauen
14.8.2 JAXBContext und die Marshaller/ Unmarshaller

14.9 HTML-Dokumente einlesen

14.10 Zum Weiterlesen

Galileo Computing - Zum Seitenanfang

15 Grafische Oberflächen mit Swing

15.1 Das Abstract Window Toolkit und Swing

15.1.1 Abstract Window Toolkit (AWT)
15.1.2 Java Foundation Classes
15.1.3 Was Swing von AWT unterscheidet
15.1.4 Die Klasse Toolkit

15.2 Fenster unter grafischen Oberflächen

15.2.1 Swing-Fenster darstellen
15.2.2 AWT-Fenster darstellen
15.2.3 Sichtbarkeit des Fensters
15.2.4 Größe und Position des Fensters verändern
15.2.5 Unterklassen der Fenster-Klassen bilden
15.2.6 Fenster- und Dialog-Dekoration
15.2.7 Dynamisches Layout während einer Größenänderung

15.3 Beschriftungen (JLabel)

15.3.1 Mehrzeiliger Text, HTML in der Darstellung

15.4 Icon und ImageIcon für Bilder auf Swing-Komponenten

15.4.1 Die Schnittstelle Icon

15.5 Es tut sich was – Ereignisse beim AWT

15.5.1 Die Klasse AWTEvent
15.5.2 Events auf verschiedenen Ebenen
15.5.3 Swings Ereignisquellen und Horcher (Listener)
15.5.4 Listener implementieren
15.5.5 Listener bei dem Ereignisauslöser anmelden/abmelden
15.5.6 Aufrufen der Listener im AWT-Event-Thread
15.5.7 Adapterklassen nutzen
15.5.8 Innere Mitgliedsklassen und innere anonyme Klassen

15.6 Schaltflächen

15.6.1 Normale Schaltflächen (JButton)
15.6.2 Der aufmerksame ActionListener
15.6.3 Basisklasse AbstractButton
15.6.4 Wechselknopf (JToggleButton)

15.7 Swing Action

15.7.1 javax.swing.Action
15.7.2 Eigenschaften der Action-Objekte

15.8 JComponent und Component als Basis aller Komponenten

15.8.1 Tooltips
15.8.2 Rahmen (Border)
15.8.3 Fokus und Navigation
15.8.4 Ereignisse jeder Komponente
15.8.5 Die Größe und Position einer Komponente
15.8.6 Komponenten-Ereignisse
15.8.7 Hinzufügen von Komponenten
15.8.8 UI-Delegate – der wahre Zeichner
15.8.9 Undurchsichtige (opak) Komponente
15.8.10 Properties und Listener für Änderungen
15.8.11 Swing-Beschriftungen eine andere Sprache geben

15.9 Container

15.9.1 Standardcontainer (JPanel)
15.9.2 Bereich mit automatischen Rollbalken (JScrollPane)
15.9.3 Reiter (JTabbedPane)
15.9.4 Teilung-Komponente (JSplitPane)

15.10 Alles Auslegungssache: die Layoutmanager

15.10.1 Übersicht über Layoutmanager
15.10.2 Zuweisen eines Layoutmanagers
15.10.3 Im Fluss mit FlowLayout
15.10.4 Mit BorderLayout in allen Himmelsrichtungen
15.10.5 Rasteranordnung mit GridLayout
15.10.6 Der GridBagLayout-Manager
15.10.7 Null-Layout
15.10.8 BoxLayout
15.10.9 Weitere Layoutmanager

15.11 Rollbalken und Schieberegler

15.11.1 Schieberegler (JSlider)
15.11.2 Rollbalken (JScrollBar)

15.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen

15.12.1 Kontrollfelder (JCheckBox)
15.12.2 ItemSelectable, ItemListener und das ItemEvent
15.12.3 Sich gegenseitig ausschließende Optionen (JRadioButton)

15.13 Fortschritte bei Operationen überwachen

15.13.1 Fortschrittsbalken (JProgressBar)
15.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)

15.14 Menüs und Symbolleisten

15.14.1 Die Menüleisten und die Einträge
15.14.2 Menüeinträge definieren
15.14.3 Einträge durch Action-Objekte beschreiben
15.14.4 Mit der Tastatur: Mnemonics und Shortcut
15.14.5 Der Tastatur-Shortcut (Accelerator)
15.14.6 Tastenkürzel (Mnemonics)
15.14.7 Symbolleisten alias Toolbars