1371.book Seite 1 Mittwoch, 17. Dezember 2008 1:39 13 Christian Ullenboom Java ist auch eine Insel Programmieren mit der Java Platform, Standard Edition 6 1371.book Seite 3 Mittwoch, 17. Dezember 2008 1:39 13 Auf einen Blick 1 Java ist auch eine Sprache .................................................................... 55 2 Sprachbeschreibung ............................................................................. 87 3 Klassen und Objekte ............................................................................ 181 4 Der Umgang mit Zeichenketten ........................................................... 237 5 Mathematisches ................................................................................... 299 6 Eigene Klassen schreiben ..................................................................... 327 7 Angewandte Objektorientierung ......................................................... 429 8 Exceptions ............................................................................................ 455 9 Generics, innere Klassen ...................................................................... 481 10 Die Klassenbibliothek .......................................................................... 501 11 Threads und nebenläufige Programmierung ........................................ 557 12 Datenstrukturen und Algorithmen ....................................................... 637 13 Raum und Zeit ...................................................................................... 713 14 Dateien und Datenströme .................................................................... 743 15 Die eXtensible Markup Language (XML) ............................................. 855 16 Grafische Oberflächen mit Swing ......................................................... 913 17 Grafikprogrammierung ......................................................................... 1075 18 Netzwerkprogrammierung ................................................................... 1145 19 Verteilte Programmierung mit RMI und Web-Services ....................... 1207 20 JavaServer Pages und Servlets ............................................................. 1231 21 Applets ................................................................................................. 1267 22 Midlets und die Java ME ...................................................................... 1283 23 Datenbankmanagement mit JDBC ....................................................... 1291 24 Reflection und Annotationen ............................................................... 1339 25 Logging und Monitoring ...................................................................... 1385 26 Sicherheitskonzepte ............................................................................. 1401 27 Java Native Interface (JNI) ................................................................... 1423 28 Dienstprogramme für die Java-Umgebung .......................................... 1435 1371.book Seite 5 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt Vorwort ...................................................................................................................... 39 1 Java ist auch eine Sprache ................................................................... 55 1.1 1.2 1.3 55 55 57 57 58 59 59 60 60 61 62 62 63 64 65 66 66 66 67 68 68 68 69 69 69 71 71 72 74 74 75 75 75 76 77 77 1.4 1.5 1.6 1.7 1.8 1.9 Der erste Kontakt ..................................................................................... Historischer Hintergrund .......................................................................... 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 benutzerdefinierten überladenen Operatoren ................... 1.3.9 Java als Sprache, Laufzeitumgebung und Bibliothek ................... 1.3.10 Wofür sich Java weniger eignet .................................................. 1.3.11 Java im Vergleich zu anderen Sprachen ...................................... 1.3.12 Java ist Open Source .................................................................. Die Rolle von Java im Web ....................................................................... 1.4.1 Vollwertige Applikationen statt Applets ..................................... Java-Plattformen: Java SE, Java EE und Java ME ........................................ 1.5.1 Java SE-Plattform ....................................................................... 1.5.2 Java für die Kleinen .................................................................... 1.5.3 Java für die Großen .................................................................... Installation von Suns Java Platform Standard Edition (Java SE) .................. 1.6.1 Das Java SE von Sun .................................................................. 1.6.2 Download vom JDK ................................................................... 1.6.3 Java SE unter Windows installieren ............................................ Das erste Programm compilieren und testen ............................................. 1.7.1 Ein Quadratzahlen-Programm .................................................... 1.7.2 Der Compilerlauf ....................................................................... 1.7.3 Die Laufzeitumgebung ............................................................... 1.7.4 Häufige Compiler- und Interpreterprobleme .............................. Entwicklungsumgebungen im Allgemeinen ............................................... 1.8.1 Die Entwicklungsumgebung Eclipse ........................................... 1.8.2 NetBeans von Sun ..................................................................... 1.8.3 Ein Wort zu Microsoft, Java und zu J++ ...................................... Eclipse im Speziellen ................................................................................ 1.9.1 Eclipse starten ........................................................................... 5 1371.book Seite 6 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 1.9.2 Das erste Projekt anlegen .......................................................... 1.9.3 Eine Klasse hinzufügen ............................................................... 1.9.4 Übersetzen und Ausführen ......................................................... 1.9.5 JDK statt JRE ............................................................................. 1.9.6 Start eines Programms ohne Speicheraufforderung ..................... 1.9.7 Projekt einfügen, Workspace für die Programme wechseln ........ 1.9.8 Plugins für Eclipse ...................................................................... Zum Weiterlesen ...................................................................................... 78 80 81 82 82 83 84 84 Sprachbeschreibung ............................................................................ 87 1.10 2 2.1 2.2 2.3 2.4 6 Elemente der Programmiersprache Java .................................................... 2.1.1 Token ........................................................................................ 2.1.2 Textkodierung durch Unicode-Zeichen ....................................... 2.1.3 Literale ...................................................................................... 2.1.4 Bezeichner ................................................................................. 2.1.5 Reservierte Schlüsselwörter ........................................................ 2.1.6 Kommentare .............................................................................. 2.1.7 Die API-Dokumentation ............................................................ 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 Funktionsaufrufe als Anweisungen ............................................. 2.2.5 print(), println() und printf() für Bildschirmausgaben .................. 2.2.6 Ausdrucksanweisung .................................................................. 2.2.7 Erste Idee der Objektorientierung .............................................. 2.2.8 Modifizierer ............................................................................... 2.2.9 Anweisungen und Blöcke ........................................................... Datentypen, Typisierung, Variablen und Zuweisungen .............................. 2.3.1 Primitive Datentypen im Überblick ............................................ 2.3.2 Variablendeklarationen .............................................................. 2.3.3 Zuweisungsoperator .................................................................. 2.3.4 Variablendeklaration mit Wertinitialisierung .............................. 2.3.5 Wahrheitswerte ......................................................................... 2.3.6 Ganzzahlige Datentypen ............................................................ 2.3.7 Die Fließkommazahlen float und double .................................... 2.3.8 Alphanumerische Zeichen .......................................................... 2.3.9 Gute Namen, schlechte Namen .................................................. Blöcke, Initialisierung und Sichtbarkeit ..................................................... 2.4.1 Blöcke und Anweisungen ........................................................... 2.4.2 Initialisierung von lokalen Variablen .......................................... 2.4.3 Sichtbarkeit und Gültigkeitsbereich ............................................ 87 87 88 90 90 92 93 94 95 95 96 97 98 98 100 100 101 102 102 103 105 106 106 108 108 110 111 112 113 113 113 114 1371.book Seite 7 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 2.5 2.6 2.7 2.8 2.9 Ausdrücke, Operanden und Operatoren ................................................... 2.5.1 Arithmetische Operatoren ......................................................... 2.5.2 Unäres Minus und Plus .............................................................. 2.5.3 Zuweisung mit Operation .......................................................... 2.5.4 Präfix- oder Postfix-Inkrement und -Dekrement ......................... 2.5.5 Die relationalen Operatoren und die Gleichheitsoperatoren ....... 2.5.6 Logische Operatoren Und, Oder, Xor, Nicht .............................. 2.5.7 Rang der Operatoren in der Auswertungsreihenfolge ................. 2.5.8 Die Typanpassung (das Casting) ................................................. 2.5.9 Überladenes Plus für Strings ....................................................... Bedingte Anweisungen oder Fallunterscheidungen ................................... 2.6.1 Die if-Anweisung ....................................................................... 2.6.2 Die Alternative mit einer if/else-Anweisung wählen ................... 2.6.3 Die switch-Anweisung bietet die Alternative ............................. Schleifen .................................................................................................. 2.7.1 Die while-Schleife ...................................................................... 2.7.2 Die do-while-Schleife ................................................................ 2.7.3 Die for-Schleife .......................................................................... 2.7.4 Schleifenbedingungen und Vergleiche mit == ............................ 2.7.5 Ausbruch planen mit break und Wiedereinstieg mit continue .... 2.7.6 break und continue mit Sprungmarken ...................................... Methoden einer Klasse ............................................................................. 2.8.1 Bestandteil einer Funktion ......................................................... 2.8.2 Signatur-Beschreibung in der Java-API ....................................... 2.8.3 Aufruf einer Methode ................................................................ 2.8.4 Methoden ohne Parameter deklarieren ...................................... 2.8.5 Statische Methoden (Klassenmethoden) .................................... 2.8.6 Parameter, Argument und Wertübergabe .................................. 2.8.7 Methoden vorzeitig mit return beenden .................................... 2.8.8 Nicht erreichbarer Quellcode bei Funktionen ............................. 2.8.9 Rückgabewerte .......................................................................... 2.8.10 Methoden überladen ................................................................. 2.8.11 Vorgegebener Wert für nicht aufgeführte Argumente ................ 2.8.12 Finale lokale Variablen ............................................................... 2.8.13 Rekursive Methoden .................................................................. Weitere Operatoren ................................................................................. 2.9.1 Bits und Bytes ............................................................................ 2.9.2 Operationen auf Bit-Ebene ........................................................ 2.9.3 Die Verschiebeoperatoren ......................................................... 2.9.4 Ein Bit setzen, löschen, umdrehen und testen ............................ 2.9.5 Bit-Funktionen der Integer- und Long-Klasse ............................. 2.9.6 Der Bedingungsoperator ............................................................ 115 116 119 120 120 122 123 124 126 132 133 133 135 137 140 141 142 143 146 148 151 152 153 153 155 155 156 157 159 159 160 163 165 165 167 169 169 170 172 174 175 176 7 1371.book Seite 8 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 2.10 2.11 3 Klassen und Objekte ........................................................................... 181 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 8 2.9.7 Operator vermisst ...................................................................... 177 Einfache Benutzereingaben ....................................................................... 178 Zum Weiterlesen ...................................................................................... 179 Objektorientierte Programmierung ........................................................... 3.1.1 Warum überhaupt OOP? ........................................................... 3.1.2 Denk ich an Java, denk ich an Wiederverwendbarkeit ................ Eigenschaften einer Klasse ........................................................................ 3.2.1 Die Klasse Point ......................................................................... Die UML (Unified Modeling Language) ..................................................... 3.3.1 Hintergrund und Geschichte zur UML ........................................ 3.3.2 Wichtige Diagrammtypen der UML ............................................ 3.3.3 UML-Werkzeuge ....................................................................... 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 ................................................................ Pakete und import-Deklarationen nutzen ................................................. 3.5.1 Volle Qualifizierung und import-Deklaration .............................. 3.5.2 import * ..................................................................................... Mit Referenzen arbeiten ........................................................................... 3.6.1 Zuweisungen bei Referenzen ..................................................... 3.6.2 Methoden mit nicht-primitiven Parametern ............................... Identität und Gleichheit ........................................................................... 3.7.1 Identität von Objekten .............................................................. 3.7.2 Gleichheit und die Methode equals() ......................................... 3.7.3 Die null-Referenz ....................................................................... Wrapper-Klassen und Autoboxing ............................................................ 3.8.1 Erzeugen von Wrapper-Objekten ............................................... 3.8.2 Konvertierungen in eine String-Repräsentation .......................... 3.8.3 Die Klasse Integer ...................................................................... 3.8.4 Die Klassen Double und Float für Fließkommazahlen ................. 3.8.5 Die Basisklasse Number für numerische Wrapper-Objekte ......... 3.8.6 Die Boolean-Klasse .................................................................... 3.8.7 Autoboxing: Boxing und Unboxing ............................................ Compilationseinheiten und eigene Pakete schnüren ................................. 3.9.1 Die package-Anweisung ............................................................. 3.9.2 Importieren von Klassen mit import ........................................... 3.9.3 Hierarchische Strukturen und das Default-Package ..................... 3.9.4 Paketnamen ............................................................................... 181 181 182 183 183 184 184 185 186 187 187 189 189 192 193 193 194 195 195 196 197 197 198 200 201 202 203 204 205 206 207 208 211 211 211 212 213 1371.book Seite 9 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 3.10 3.11 3.12 4 3.9.5 Klassen mit gleichen Namen in unterschiedlichen Paketen ......... 3.9.6 Compilationseinheit (Compilation Unit) ..................................... 3.9.7 Statischer Import ....................................................................... 3.9.8 Eine Verzeichnisstruktur für eigene Projekte .............................. Arrays ....................................................................................................... 3.10.1 Deklaration von Arrays .............................................................. 3.10.2 Arrays mit Inhalt ........................................................................ 3.10.3 Die Länge eines Arrays über das Attribut length ......................... 3.10.4 Zugriff auf die Elemente über den Index .................................... 3.10.5 Array-Objekte mit new erzeugen ............................................... 3.10.6 Fehler bei Arrays ........................................................................ 3.10.7 Die erweiterte for-Schleife ......................................................... 3.10.8 Arrays mit nicht-primitiven Elementen ....................................... 3.10.9 Mehrdimensionale Arrays .......................................................... 3.10.10 Vorinitialisierte Arrays ................................................................ 3.10.11 Mehrere Rückgabewerte ............................................................ 3.10.12 Methode mit variabler Argumentanzahl (Vararg) ........................ 3.10.13 Klonen kann sich lohnen – Arrays vermehren ............................. 3.10.14 Feldinhalte kopieren .................................................................. 3.10.15 Die Klasse Arrays zum Vergleichen, Füllen und Suchen .............. Der Einstiegspunkt für das Laufzeitsystem: main() ..................................... 3.11.1 Kommandozeilen-Argumente verarbeiten .................................. 3.11.2 Der Rückgabewert von main() und System.exit() ........................ Zum Weiterlesen ...................................................................................... 213 213 213 214 215 215 216 216 216 217 218 219 221 222 224 226 226 228 228 229 235 235 236 236 Der Umgang mit Zeichenketten .......................................................... 237 4.1 4.2 4.3 4.4 Einzelne Zeichen mit der Character-Klasse behandeln ............................... 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 .......................... Konvertieren zwischen Primitiven und Strings .......................................... 4.3.1 Unterschiedliche Typen in String-Repräsentationen konvertieren 4.3.2 String in primitives Element konvertieren ................................... Veränderbare Zeichenketten mit StringBuilder/StringBuffer ...................... 4.4.1 Anlegen von StringBuilder-/StringBuffer-Objekten ..................... 4.4.2 Die Länge eines StringBuilder-/StringBuffer-Objekts .................. 237 238 242 242 243 245 247 249 251 253 256 256 257 259 259 260 9 1371.book Seite 10 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 4.5 4.6 4.7 4.8 4.9 4.10 5 261 262 263 264 264 264 267 269 269 269 271 273 273 274 275 276 277 278 283 285 288 288 289 289 290 291 291 294 295 297 Mathematisches .................................................................................. 299 5.1 5.2 5.3 5.4 10 4.4.3 Daten anhängen ........................................................................ 4.4.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen ........... 4.4.5 Vergleichen von String/StringBuilder/StringBuffer ...................... 4.4.6 hashCode() bei StringBuffer/StringBuilder .................................. 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 .......................................................................... Reguläre Ausdrücke .................................................................................. 4.6.1 Arbeiten mit der Fassade: String.matches() ................................ 4.6.2 Die Klassen Pattern und Matcher ............................................... 4.6.3 Quantifizierer und Wiederholungen ........................................... 4.6.4 Finden und nicht matchen ......................................................... 4.6.5 Gierige und nicht gierige Operatoren ......................................... 4.6.6 Mit MatchResult alle Ergebnisse einsammeln ............................. Zerlegen von Zeichenketten ...................................................................... 4.7.1 Splitten von Zeichenketten mit split() ........................................ 4.7.2 Die Klasse Scanner ..................................................................... 4.7.3 StringTokenizer .......................................................................... 4.7.4 BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner ......... 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 ..................................................................... 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 ....................................................... Zum Weiterlesen ...................................................................................... Repräsentation ganzer Zahlen – das Zweierkomplement ........................... Fließkommaarithmetik in Java ................................................................... 5.2.1 Mantisse und Exponent ............................................................. 5.2.2 Spezialwerte Unendlich, Null, NaN ............................................ Wertebereich eines Typs und Überlaufkontrolle ........................................ 5.3.1 Behandlung des Überlaufs .......................................................... Die Eigenschaften der Klasse Math ........................................................... 5.4.1 Attribute .................................................................................... 5.4.2 Absolutwerte und Maximum/Minimum ..................................... 299 300 300 301 303 304 305 307 307 1371.book Seite 11 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 5.5 5.6 5.7 5.8 6 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 .............................................................................. Mathe bitte strikt ..................................................................................... 5.5.1 Strikt Fließkomma mit strictfp .................................................... 5.5.2 Die Klassen Math und StrictMath .............................................. Die Random-Klasse .................................................................................. 5.6.1 Objekte aufbauen und der Seed ................................................. 5.6.2 Zufallszahlen erzeugen ............................................................... 5.6.3 Pseudo-Zufallszahlen in der Normalverteilung ............................ Große Zahlen ............................................................................................ 5.7.1 Die Klasse BigInteger ................................................................. 5.7.2 Methoden 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 .... Zum Weiterlesen ...................................................................................... 308 309 311 311 312 313 313 314 314 314 315 315 316 316 316 319 321 322 324 325 Eigene Klassen schreiben .................................................................... 327 6.1 6.2 6.3 Eigene Klassen mit Eigenschaften deklarieren ........................................... 6.1.1 Attribute deklarieren ................................................................. 6.1.2 Methoden deklarieren ............................................................... 6.1.3 Die this-Referenz ....................................................................... Privatsphäre und Sichtbarkeit ................................................................... 6.2.1 Für die Öffentlichkeit: public ..................................................... 6.2.2 Kein Public Viewing – Passwörter sind privat ............................. 6.2.3 Wieso nicht freie Methoden und Variablen für alle? ................... 6.2.4 Privat ist nicht ganz privat: Es kommt darauf an, wer’s sieht ....... 6.2.5 Zugriffsmethoden für Attribute deklarieren ................................ 6.2.6 Setter und Getter nach der JavaBeans-Spezifikation ................... 6.2.7 Paketsichtbar ............................................................................. 6.2.8 Zusammenfassung zur Sichtbarkeit ............................................. 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 Variablen zum Datenaustausch .................................... 6.3.6 Statische Eigenschaften und Objekteigenschaften ...................... 327 327 328 332 335 335 336 337 337 338 339 341 342 344 344 345 346 346 347 348 11 1371.book Seite 12 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 12 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)sichere Aufzählungen ..................................................... 6.4.4 Aufzählungen mit enum ............................................................. Objekte anlegen und zerstören ................................................................. 6.5.1 Konstruktoren schreiben ............................................................ 6.5.2 Der Default-Konstruktor ............................................................ 6.5.3 Parametrisierte und überladene Konstruktoren .......................... 6.5.4 Copy-Konstruktor ...................................................................... 6.5.5 Einen anderen Konstruktor der gleichen Klasse aufrufen ............ 6.5.6 Ihr fehlt uns nicht – der Garbage-Collector ................................. 6.5.7 Private Konstruktoren, Utility-Klassen, Singleton, Fabriken ........ Klassen- und Objektinitialisierung ............................................................ 6.6.1 Initialisierung von Objektvariablen ............................................. 6.6.2 Statische Blöcke als Klasseninitialisierer ..................................... 6.6.3 Initialisierung von Klassenvariablen ............................................ 6.6.4 Exemplarinitialisierer (Instanzinitialisierer) .................................. 6.6.5 Finale Werte im Konstruktor und in statischen Blöcken setzen ... Assoziationen zwischen Objekten ............................................................. 6.7.1 Unidirektionale 1:1-Beziehung ................................................... 6.7.2 Bidirektionale 1:1-Beziehungen ................................................. 6.7.3 Unidirektionale 1:n-Beziehung ................................................... Vererbung ................................................................................................ 6.8.1 Vererbung in Java ...................................................................... 6.8.2 Spielobjekte modelliert .............................................................. 6.8.3 Implizite Basisklasse java.lang.Object ......................................... 6.8.4 Einfach- und Mehrfachvererbung ............................................... 6.8.5 Sichtbarkeit protected ............................................................... 6.8.6 Konstruktoren in der Vererbung und super ................................ Typen in Hierarchien ................................................................................ 6.9.1 Automatische und explizite Typanpassung ................................. 6.9.2 Das Substitutionsprinzip ............................................................ 6.9.3 Typen mit dem binären Operator instanceof testen .................... Methoden überschreiben ......................................................................... 6.10.1 Methoden in Unterklassen mit neuem Verhalten ausstatten ....... 6.10.2 Mit super an die Eltern .............................................................. 6.10.3 Finale Klassen und finale Methoden .......................................... 6.10.4 Kovariante Rückgabetypen ........................................................ 6.10.5 Array-Typen und Kovarianz ........................................................ Dynamisches Binden/Polymorphie ............................................................ 6.11.1 Unpolymorph bei privaten, statischen und finalen Methoden .... 6.11.2 Polymorphie bei Konstruktoraufrufen ........................................ 349 349 350 351 352 355 355 356 357 359 360 362 364 366 366 368 368 369 371 373 373 374 375 377 378 378 380 380 380 381 385 385 387 389 390 390 393 395 396 397 398 401 403 1371.book Seite 13 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 6.12 6.13 6.14 7 Abstrakte Klassen und abstrakte Methoden .............................................. 6.12.1 Abstrakte Klassen ...................................................................... 6.12.2 Abstrakte Methoden .................................................................. Schnittstellen ........................................................................................... 6.13.1 Deklarieren von Schnittstellen ................................................... 6.13.2 Implementieren von Schnittstellen ............................................. 6.13.3 Markierungsschnittstellen .......................................................... 6.13.4 Ein Polymorphie-Beispiel mit Schnittstellen ............................... 6.13.5 Die Mehrfachvererbung bei Schnittstellen .................................. 6.13.6 Keine Kollisionsgefahr bei Mehrfachvererbung ........................... 6.13.7 Erweitern von Interfaces – Subinterfaces .................................... 6.13.8 Vererbte Konstanten bei Schnittstellen ...................................... 6.13.9 Abstrakte Klassen und Schnittstellen im Vergleich ..................... 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) Typen und Eigenschaften ........................ 404 405 406 409 409 410 411 412 413 416 417 418 419 420 421 423 423 423 424 425 426 Angewandte Objektorientierung ........................................................ 429 7.1 7.2 7.3 7.4 Schnittstellen in der Anwendung .............................................................. 7.1.1 CharSequence als Beispiel einer Schnittstelle ............................. 7.1.2 Die Schnittstelle Iterable ............................................................ 7.1.3 Funktionszeiger ......................................................................... Design-Pattern (Entwurfsmuster) .............................................................. 7.2.1 Motivation für Design-Pattern ................................................... 7.2.2 Das Beobachter-Pattern (Observer/Observable) ......................... 7.2.3 Ereignisse über Listener ............................................................. Service-Factory ......................................................................................... 7.3.1 Arbeiten mit dem ServiceLoader ................................................ 7.3.2 Utility-Klasse Lookup als ServiceLoader-Fassade ........................ JavaBean .................................................................................................. 7.4.1 Properties (Eigenschaften) ......................................................... 7.4.2 Einfache Eigenschaften .............................................................. 7.4.3 Indizierte Eigenschaften ............................................................. 7.4.4 Gebundene Eigenschaften .......................................................... 7.4.5 Veto-Eigenschaften – dagegen! .................................................. 429 429 431 433 435 435 436 439 443 443 444 445 446 446 447 447 450 13 1371.book Seite 14 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 8 Exceptions ........................................................................................... 455 8.1 8.2 8.3 8.4 8.5 8.6 9 455 455 456 458 458 459 462 465 466 466 467 468 469 470 471 471 473 474 475 476 476 477 478 479 480 Generics, innere Klassen ..................................................................... 481 9.1 9.2 14 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 ............................................... 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 ..................................................................... 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 ......................................................... Rückgabewerte bei ausgelösten Ausnahmen ............................................. Der Stack-Trace ........................................................................................ 8.5.1 Stack-Trace erfragen .................................................................. Assertions ................................................................................................. 8.6.1 Assertions in eigenen Programmen nutzen ................................. 8.6.2 Assertions aktivieren .................................................................. Generische Datentypen ............................................................................ 9.1.1 Einfache Klassenschablonen ....................................................... 9.1.2 Einfache Methodenschablonen .................................................. 9.1.3 Umsetzen der Generics, Typlöschung und Raw-Types ................ 9.1.4 Generics und Arrays ................................................................... 9.1.5 Einschränken der Typen ............................................................. 9.1.6 Generics und Vererbung, Invarianz ............................................ 9.1.7 Wildcards .................................................................................. Geschachtelte (innere) Klassen, Schnittstellen, Aufzählungen .................... 9.2.1 Statische innere Klassen und Schnittstellen ................................ 9.2.2 Mitglieds- oder Elementklassen ................................................. 9.2.3 Lokale Klassen ........................................................................... 481 482 483 484 486 487 488 489 490 491 492 496 1371.book Seite 15 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 9.2.4 9.2.5 Anonyme innere Klassen ............................................................ 496 this und Vererbung .................................................................... 499 10 Die Klassenbibliothek ......................................................................... 501 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 Die Java-Klassenphilosophie ..................................................................... 10.1.1 Übersicht über die Pakete der Standardbibliothek ...................... Object ist die Mutter aller Klassen ............................................................ 10.2.1 Klassenobjekte ........................................................................... 10.2.2 Objektidentifikation mit toString() ............................................. 10.2.3 Objektgleichheit mit equals() und Identität ................................ 10.2.4 Klonen eines Objekts mit clone() ............................................... 10.2.5 Hashcodes über hashCode() liefern ............................................ 10.2.6 Aufräumen mit finalize() ............................................................ 10.2.7 Synchronisation ......................................................................... Die Spezial-Oberklasse Enum ................................................................... 10.3.1 Methoden auf Enum-Objekten .................................................. 10.3.2 enum mit eigenen Konstruktoren und Methoden ...................... Klassenlader (Class Loader) ....................................................................... 10.4.1 Woher die kleinen Klassen kommen .......................................... 10.4.2 Setzen des Klassenpfades ........................................................... 10.4.3 Die wichtigsten drei Typen von Klassenladern ............................ 10.4.4 Der java.lang.ClassLoader .......................................................... 10.4.5 Hot Deployment mit dem URL-Classloader ................................ 10.4.6 Das jre/lib/endorsed-Verzeichnis ............................................... Die Utility-Klasse System und Properties .................................................. 10.5.1 Systemeigenschaften der Java-Umgebung .................................. 10.5.2 line.separator ............................................................................. 10.5.3 Property von der Konsole aus setzen ......................................... 10.5.4 Umgebungsvariablen des Betriebssystems .................................. 10.5.5 Einfache Zeitmessung und Profiling ............................................ Ausführen externer Programme und Skripte ............................................. 10.6.1 ProcessBuilder und Prozesskontrolle mit Process ....................... 10.6.2 Einen Browser/E-Mail-Client/Editor aufrufen ............................. 10.6.3 Ausführen von Skripten ............................................................. Benutzereinstellungen .............................................................................. 10.7.1 Benutzereinstellungen speichern ................................................ 10.7.2 Einträge einfügen, auslesen und löschen .................................... 10.7.3 Auslesen der Daten und Schreiben in anderem Format .............. 10.7.4 Auf Ereignisse horchen .............................................................. 10.7.5 Zugriff auf die gesamte Windows-Registry ................................. Musik abspielen ....................................................................................... 10.8.1 Die Arbeit mit AudioClip ........................................................... 501 501 508 508 509 510 514 517 520 522 522 523 525 528 528 529 530 531 532 535 535 536 537 538 539 540 540 541 544 545 547 547 548 550 550 551 552 552 15 1371.book Seite 16 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 10.8.2 Java Sound API .......................................................................... 10.9 Annotationen ........................................................................................... 10.9.1 Annotationstypen @Override, @Deprecated, @SuppressWarnings .................................................................. 10.9.2 Annotationen für Web-Services ................................................. 10.10 Zum Weiterlesen ...................................................................................... 552 554 554 556 556 11 Threads und nebenläufige Programmierung ....................................... 557 11.1 11.2 11.3 11.4 11.5 16 Nebenläufigkeit ........................................................................................ 11.1.1 Threads und Prozesse ................................................................ 11.1.2 Wie parallele Programme die Geschwindigkeit steigern können . 11.1.3 Was Java für Nebenläufigkeit alles bietet ................................... Threads erzeugen ..................................................................................... 11.2.1 Threads über die Schnittstelle Runnable implementieren ........... 11.2.2 Thread mit Runnable starten ...................................................... 11.2.3 Der Name eines Threads ............................................................ 11.2.4 Die Klasse Thread erweitern ...................................................... 11.2.5 Wer bin ich? .............................................................................. Die Zustände eines Threads ...................................................................... 11.3.1 Threads schlafen ........................................................................ 11.3.2 Mit yield() auf Rechenzeit verzichten ......................................... 11.3.3 Das Ende eines Threads ............................................................. 11.3.4 UncaughtExceptionHandler für unbehandelte Ausnahmen ......... 11.3.5 Einen Thread höflich mit Interrupt beenden ............................... 11.3.6 Der stop() von außen und die Rettung mit ThreadDeath ............ 11.3.7 Ein Rendezvous mit join() .......................................................... 11.3.8 Barrier und Austausch mit Exchanger ......................................... 11.3.9 Arbeit niederlegen und wieder aufnehmen ................................ 11.3.10 Priorität ..................................................................................... 11.3.11 Der Thread als Dämon ............................................................... Der Ausführer (Executor) kommt .............................................................. 11.4.1 Die Schnittstelle Executor .......................................................... 11.4.2 Die Thread-Pools ....................................................................... 11.4.3 Threads mit Rückgabe über Callable .......................................... 11.4.4 Mehrere Callable abarbeiten ...................................................... 11.4.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen ......................................................................... Synchronisation über kritische Abschnitte ................................................. 11.5.1 Gemeinsam genutzte Daten ....................................................... 11.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte ... 11.5.3 Punkte parallel initialisieren ....................................................... 11.5.4 i++ sieht atomar aus, ist es aber nicht ........................................ 557 557 559 560 561 561 562 563 563 566 566 567 569 569 570 571 573 574 576 577 577 578 580 580 581 583 585 586 586 586 587 588 589 1371.book Seite 17 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 11.5.5 Kritische Abschnitte schützen .................................................... 11.5.6 Schützen mit ReentrantLock ...................................................... 11.5.7 Synchronisieren mit synchronized .............................................. 11.5.8 Synchronized-Methoden der Klasse StringBuffer ........................ 11.5.9 Mit synchronized synchronisierte Blöcke .................................... 11.5.10 Dann machen wir doch gleich alles synchronisiert! ..................... 11.5.11 Lock-Freigabe im Fall von Exceptions ......................................... 11.5.12 Mit synchronized nachträglich synchronisieren .......................... 11.5.13 Monitore sind reentrant – gut für die Geschwindigkeit .............. 11.5.14 Synchronisierte Methodenaufrufe zusammenfassen ................... 11.5.15 Deadlocks .................................................................................. 11.6 Synchronisation über Warten und Benachrichtigen ................................... 11.6.1 Die Schnittstelle Condition ........................................................ 11.6.2 It’s Disco-Time .......................................................................... 11.6.3 Warten mit wait() und Aufwecken mit notify() ........................... 11.6.4 Falls der Lock fehlt: IllegalMonitorStateException ...................... 11.6.5 Semaphor .................................................................................. 11.7 Atomare Operationen und frische Werte mit volatile ................................ 11.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen ............... 11.7.2 Das Paket java.util.concurrent.atomic ........................................ 11.8 Mit dem Thread verbundene Variablen .................................................... 11.8.1 ThreadLocal ............................................................................... 11.8.2 InheritableThreadLocal .............................................................. 11.9 Gruppen von Threads in einer Thread-Gruppe .......................................... 11.9.1 Aktive Threads in der Umgebung ............................................... 11.9.2 Etwas über die aktuelle Thread-Gruppe herausfinden ................ 11.9.3 Threads in einer Thread-Gruppe anlegen ................................... 11.9.4 Methoden von Thread und ThreadGroup im Vergleich ............... 11.10 Zeitgesteuerte Abläufe ............................................................................. 11.10.1 Die Klassen Timer und TimerTask .............................................. 11.10.2 Job-Scheduler Quartz ................................................................ 11.11 Einen Abbruch der virtuellen Maschine erkennen ..................................... 11.12 Zum Weiterlesen ...................................................................................... 590 591 596 597 598 599 600 600 601 602 603 605 606 609 613 615 616 619 619 620 621 622 624 625 626 626 628 631 632 633 634 635 636 12 Datenstrukturen und Algorithmen ...................................................... 637 12.1 Datenstrukturen und die Collection-API ................................................... 12.1.1 Designprinzip mit Schnittstellen, abstrakten und 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 ...................... 637 638 639 639 640 642 17 1371.book Seite 18 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 12.2 12.3 12.4 12.5 12.6 12.7 12.8 18 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 ......................... 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 ....... Listen ....................................................................................................... 12.3.1 Auswahlkriterium ArrayList oder LinkedList ............................... 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 ............... 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 .................................................................................... Mengen (Sets) .......................................................................................... 12.5.1 HashSet ..................................................................................... 12.5.2 TreeSet – die Menge durch Bäume ............................................. 12.5.3 LinkedHashSet ........................................................................... Stack (Kellerspeicher, Stapel) .................................................................... 12.6.1 Die Methoden von Stack ........................................................... 12.6.2 Ein Stack ist ein Vector – aha! .................................................... Queues (Schlangen) und Deques .............................................................. 12.7.1 Die Schnittstelle Queue ............................................................. 12.7.2 Blockierende Queues und Prioritätswarteschlangen ................... 12.7.3 Deque-Klassen ........................................................................... Assoziative Speicher ................................................................................. 12.8.1 Die Klassen HashMap und TreeMap .......................................... 12.8.2 Einfügen und Abfragen der Datenstruktur .................................. 12.8.3 equals(), hashCode() und IdentityHashMap ................................ 12.8.4 Das Problem von veränderbaren Elementen ............................... 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 ............................................................................... 644 645 645 646 647 647 649 651 651 652 652 659 661 662 663 666 666 666 669 669 671 674 676 677 680 680 680 681 682 682 683 684 684 684 686 689 691 691 694 694 697 1371.book Seite 19 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 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 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 Methodenübersicht ................................................................... 12.12.4 Primzahlen in einem BitSet verwalten ........................................ 697 697 697 699 699 699 701 701 702 703 705 705 705 706 707 707 708 709 709 709 710 711 712 13 Raum und Zeit ..................................................................................... 713 13.1 13.2 13.3 13.4 13.5 13.6 Weltzeit ................................................................................................... Wichtige Datum-Klassen im Überblick ...................................................... Sprachen der Länder ................................................................................. 13.3.1 Sprachen und Regionen über Locale-Objekte ............................. Internationalisierung und Lokalisierung .................................................... 13.4.1 ResourceBundle-Objekte und Ressource-Dateien ...................... 13.4.2 Ressource-Dateien zur Lokalisierung .......................................... 13.4.3 Die Klasse ResourceBundle ........................................................ 13.4.4 Ladestrategie für ResourceBundle-Objekte ................................ Die Klasse Date ........................................................................................ 13.5.1 Objekte erzeugen und Methoden nutzen ................................... 13.5.2 Date-Objekte nicht immutable .................................................. Calendar und GregorianCalendar .............................................................. 13.6.1 Die abstrakte Klasse Calendar .................................................... 13.6.2 Der gregorianische Kalender ...................................................... 13.6.3 Ostertage ................................................................................... 13.6.4 Abfragen und Setzen von Datumselementen .............................. 713 714 714 715 718 719 719 719 720 722 722 723 724 724 726 728 729 19 1371.book Seite 20 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 13.7 13.8 Formatieren und Parsen von Datumsangaben ........................................... 13.7.1 Ausgaben mit printf() ................................................................. 13.7.2 Mit DateFormat und SimpleDateFormat formatieren ................. 13.7.3 Parsen von Datumswerten ......................................................... Zum Weiterlesen ...................................................................................... 735 735 735 740 742 14 Dateien und Datenströme ................................................................... 743 14.1 14.2 14.3 14.4 20 Datei und Verzeichnis ............................................................................... 14.1.1 Dateien und Verzeichnisse mit der Klasse File ............................ 14.1.2 Verzeichnis oder Datei? Existiert es? .......................................... 14.1.3 Verzeichnis- und Dateieigenschaften/-attribute ......................... 14.1.4 Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher ................ 14.1.5 Umbenennen und Verzeichnisse anlegen ................................... 14.1.6 Verzeichnisse listen und Dateien filtern ...................................... 14.1.7 Dateien berühren, neue Dateien anlegen, temporäre Dateien .... 14.1.8 Dateien und Verzeichnisse löschen ............................................ 14.1.9 Verzeichnisse nach Dateien iterativ durchsuchen ....................... 14.1.10 URL- und URI-Objekte aus einem File-Objekt ableiten .............. 14.1.11 Mit Locking Dateien sperren ...................................................... 14.1.12 Sicherheitsprüfung ..................................................................... Dateien mit wahlfreiem Zugriff ................................................................. 14.2.1 Ein RandomAccessFile zum Lesen und Schreiben öffnen ............ 14.2.2 Aus dem RandomAccessFile lesen .............................................. 14.2.3 Schreiben mit RandomAccessFile ............................................... 14.2.4 Die Länge des RandomAccessFile ............................................... 14.2.5 Hin und her in der Datei ............................................................ Stream-Klassen und Reader/Writer am Beispiel von Dateien ..................... 14.3.1 Mit dem FileWriter Texte in Dateien schreiben .......................... 14.3.2 Zeichen mit der Klasse FileReader lesen ..................................... 14.3.3 Kopieren mit FileOutputStream und FileInputStream ................. 14.3.4 Das FileDescriptor-Objekt .......................................................... Basisklassen für die Ein-/Ausgabe ............................................................. 14.4.1 Die abstrakten Basisklassen ........................................................ 14.4.2 Übersicht über Ein-/Ausgabeklassen .......................................... 14.4.3 Die abstrakte Basisklasse OutputStream ..................................... 14.4.4 Die Schnittstellen Closeable und Flushable ................................ 14.4.5 Ein Datenschlucker .................................................................... 14.4.6 Die abstrakte Basisklasse InputStream ........................................ 14.4.7 Ressourcen aus dem Klassenpfad und aus Jar-Archiven laden ..... 14.4.8 Ströme mit SequenceInputStream zusammensetzen ................... 14.4.9 Die abstrakte Basisklasse Writer ................................................. 14.4.10 Die Schnittstelle Appendable ..................................................... 744 744 746 747 749 752 752 755 756 758 759 759 760 761 762 762 764 765 765 766 767 768 769 772 773 773 773 775 776 777 777 778 779 781 782 1371.book Seite 21 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 14.4.11 Die abstrakte Basisklasse Reader ................................................ 14.5 Formatierte Textausgaben ........................................................................ 14.5.1 Die Klassen PrintWriter und PrintStream ................................... 14.5.2 System.out, System.err und System.in ........................................ 14.5.3 Geschützte Passwort-Eingaben mit der Klasse Console ............... 14.6 Schreiben und Lesen aus Strings und Byte-Feldern ................................... 14.6.1 Mit dem StringWriter ein String-Objekt füllen ........................... 14.6.2 CharArrayWriter ........................................................................ 14.6.3 StringReader und CharArrayReader ............................................ 14.6.4 Mit ByteArrayOutputStream in ein Byte-Feld schreiben ............. 14.6.5 Mit ByteArrayInputStream aus einem Byte-Feld lesen ................ 14.7 Datenströme filtern und verketten ............................................................ 14.7.1 Streams als Filter verketten ........................................................ 14.7.2 Gepufferte Ausgaben mit BufferedWriter/BufferedOutputStream 14.7.3 Gepufferte Eingaben mit BufferedReader/BufferedInputStream .. 14.7.4 LineNumberReader zählt automatisch Zeilen mit ....................... 14.7.5 Daten mit der Klasse PushbackReader zurücklegen .................... 14.7.6 DataOutputStream/DataInputStream ......................................... 14.7.7 Basisklassen für Filter ................................................................. 14.7.8 Die Basisklasse FilterWriter ........................................................ 14.7.9 Ein LowerCaseWriter ................................................................. 14.7.10 Eingaben mit der Klasse FilterReader filtern ............................... 14.8 Vermittler zwischen Byte-Streams und Unicode-Strömen ......................... 14.8.1 Datenkonvertierung durch den OutputStreamWriter ................. 14.8.2 Automatische Konvertierungen mit dem InputStreamReader ..... 14.9 Kommunikation zwischen Threads mit Pipes ............................................ 14.9.1 PipedOutputStream und PipedInputStream ............................... 14.9.2 PipedWriter und PipedReader ................................................... 14.10 Datenkompression ................................................................................... 14.10.1 Java-Unterstützung beim Komprimieren .................................... 14.10.2 Datenströme komprimieren ....................................................... 14.10.3 Zip-Archive ................................................................................ 14.10.4 Jar-Archive ................................................................................ 14.11 Prüfsummen ............................................................................................. 14.11.1 Die Schnittstelle Checksum ........................................................ 14.11.2 Die Klasse CRC32 ...................................................................... 14.11.3 Die Adler32-Klasse .................................................................... 14.12 Persistente Objekte und Serialisierung ...................................................... 14.12.1 Objekte mit der Standard-Serialisierung speichern und lesen ..... 14.12.2 Zwei einfache Anwendungen der Serialisierung .......................... 14.12.3 Die Schnittstelle Serializable ...................................................... 14.12.4 Nicht serialisierbare Attribute aussparen .................................... 783 785 785 790 792 792 793 794 795 796 797 797 798 798 800 802 803 805 805 806 807 808 809 809 810 812 812 814 815 816 817 821 827 827 827 828 830 830 831 834 835 836 21 1371.book Seite 22 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 14.12.5 Das Abspeichern selbst in die Hand nehmen ............................ 14.12.6 Tiefe Objektkopien .................................................................. 14.12.7 Versionenverwaltung und die SUID ......................................... 14.12.8 Wie die ArrayList serialisiert ..................................................... 14.12.9 Probleme mit der Serialisierung ............................................... 14.12.10 Serialisieren in XML-Dateien .................................................... 14.12.11 JavaBeans Persistence .............................................................. 14.12.12 XStream ................................................................................... 14.13 Tokenizer ................................................................................................. 14.13.1 StreamTokenizer ...................................................................... 14.13.2 CSV-Dateien verarbeiten ......................................................... 14.14 Zum Weiterlesen ...................................................................................... 838 841 843 845 845 846 846 848 849 849 852 853 15 Die eXtensible Markup Language (XML) ............................................ 855 15.1 15.2 15.3 15.4 15.5 22 Auszeichnungssprachen ............................................................................ 15.1.1 Die Standard Generalized Markup Language (SGML) ................. 15.1.2 Extensible Markup Language (XML) ........................................... Eigenschaften von XML-Dokumenten ....................................................... 15.2.1 Elemente und Attribute ............................................................. 15.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten ... 15.2.3 Schema – eine Alternative zu DTD ............................................. 15.2.4 Namensraum (Namespace) ........................................................ 15.2.5 XML-Applikationen ................................................................... Die Java-APIs für XML .............................................................................. 15.3.1 Das Document Object Model (DOM) ........................................ 15.3.2 Simple API for XML Parsing (SAX) .............................................. 15.3.3 Pull-API StAX ............................................................................ 15.3.4 Java Document Object Model (JDOM) ...................................... 15.3.5 JAXP als Java-Schnittstelle zu XML ............................................. 15.3.6 DOM-Bäume einlesen mit JAXP ................................................. Serielle Verarbeitung mit StAX .................................................................. 15.4.1 Unterschiede der Verarbeitungsmodelle .................................... 15.4.2 XML-Dateien mit dem Cursor-Verfahren lesen ........................... 15.4.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten ................ 15.4.4 Mit Filtern arbeiten .................................................................... 15.4.5 XML-Dokumente schreiben ....................................................... Serielle Verarbeitung von XML mit SAX .................................................... 15.5.1 Schnittstellen von SAX ............................................................... 15.5.2 SAX-Parser erzeugen .................................................................. 15.5.3 Operationen der Schnittstelle ContentHandler ........................... 15.5.4 ErrorHandler und EntityResolver ................................................ 855 855 856 856 856 858 861 863 865 865 866 866 866 866 867 867 868 868 870 872 873 874 876 877 877 878 880 1371.book Seite 23 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 15.6 XML-Dateien mit JDOM verarbeiten ........................................................ 15.6.1 JDOM beziehen ......................................................................... 15.6.2 Paketübersicht ........................................................................... 15.6.3 Die Document-Klasse ................................................................ 15.6.4 Eingaben aus der Datei lesen ..................................................... 15.6.5 Das Dokument im XML-Format ausgeben .................................. 15.6.6 Der Dokumenttyp ...................................................................... 15.6.7 Elemente ................................................................................... 15.6.8 Zugriff auf Elementinhalte .......................................................... 15.6.9 Liste mit Unterelementen erzeugen ........................................... 15.6.10 Neue Elemente einfügen und ändern ......................................... 15.6.11 Attributinhalte lesen und ändern ............................................... 15.6.12 XPath ........................................................................................ 15.7 Transformationen mit XSLT ...................................................................... 15.7.1 Templates und XPath als Kernelemente von XSLT ...................... 15.7.2 Umwandlung von XML-Dateien mit JDOM und JAXP ................ 15.8 Java Architecture for XML Binding (JAXB) ................................................. 15.8.1 Beans für JAXB aufbauen ........................................................... 15.8.2 JAXBContext und die Marshaller/Unmarshaller .......................... 15.8.3 Weitere JAXB-Annotationen ...................................................... 15.9 HTML-Dokumente einlesen ...................................................................... 15.10 Zum Weiterlesen ...................................................................................... 881 881 882 883 884 885 885 886 889 891 891 894 896 899 899 901 902 902 904 905 910 912 16 Grafische Oberflächen mit Swing ....................................................... 913 16.1 16.2 16.3 16.4 Das Abstract Window Toolkit und Swing .................................................. 16.1.1 SwingSet-Demos ....................................................................... 16.1.2 Abstract Window Toolkit (AWT) ................................................ 16.1.3 Java Foundation Classes ............................................................. 16.1.4 Was Swing von AWT unterscheidet ........................................... 16.1.5 Die Klasse Toolkit ...................................................................... Fenster unter grafischen Oberflächen ....................................................... 16.2.1 Swing-Fenster darstellen ............................................................ 16.2.2 Fenster schließbar machen – setDefaultCloseOperation() ........... 16.2.3 AWT-Fenster darstellen ............................................................. 16.2.4 Sichtbarkeit des Fensters ............................................................ 16.2.5 Größe und Position des Fensters verändern ............................... 16.2.6 Unterklassen der Fenster-Klassen bilden .................................... 16.2.7 Fenster- und Dialog-Dekoration, Transparenz ............................ 16.2.8 Dynamisches Layout während einer Größenänderung ................ Beschriftungen (JLabel) ............................................................................. 16.3.1 Mehrzeiliger Text, HTML in der Darstellung ............................... Icon und ImageIcon für Bilder auf Swing-Komponenten ........................... 913 913 913 914 917 918 918 919 920 920 921 921 923 923 924 924 928 928 23 1371.book Seite 24 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 16.5 Es tut sich was – Ereignisse beim AWT ...................................................... 16.5.1 Die Klasse AWTEvent ................................................................ 16.5.2 Events auf verschiedenen Ebenen .............................................. 16.5.3 Swings Ereignisquellen und Horcher (Listener) ........................... 16.5.4 Listener implementieren ............................................................ 16.5.5 Listener bei dem Ereignisauslöser anmelden/abmelden .............. 16.5.6 Aufrufen der Listener im AWT-Event-Thread .............................. 16.5.7 Adapterklassen nutzen ............................................................... 16.5.8 Innere Mitgliedsklassen und innere anonyme Klassen ................ 16.6 Schaltflächen ............................................................................................ 16.6.1 Normale Schaltflächen (JButton) ................................................ 16.6.2 Der aufmerksame ActionListener ............................................... 16.6.3 Basisklasse AbstractButton ......................................................... 16.6.4 Wechselknopf (JToggleButton) ................................................... 16.7 Swing Action ............................................................................................ 16.8 JComponent und Component als Basis aller Komponenten ....................... 16.8.1 Tooltips ..................................................................................... 16.8.2 Rahmen (Border) ....................................................................... 16.8.3 Fokus und Navigation ................................................................ 16.8.4 Ereignisse jeder Komponente ..................................................... 16.8.5 Die Größe und Position einer Komponente ................................ 16.8.6 Komponenten-Ereignisse ........................................................... 16.8.7 Hinzufügen von Komponenten .................................................. 16.8.8 UI-Delegate – der wahre Zeichner .............................................. 16.8.9 Undurchsichtige (opake) Komponente ....................................... 16.8.10 Properties und Listener für Änderungen ..................................... 16.9 Container ................................................................................................. 16.9.1 Standardcontainer (JPanel) ......................................................... 16.9.2 Bereich mit automatischen Rollbalken (JScrollPane) ................... 16.9.3 Reiter (JTabbedPane) ................................................................. 16.9.4 Teilungs-Komponente (JSplitPane) ............................................. 16.10 Alles Auslegungssache: die Layoutmanager ............................................... 16.10.1 Übersicht über Layoutmanager .................................................. 16.10.2 Zuweisen eines Layoutmanagers ................................................ 16.10.3 Im Fluss mit FlowLayout ............................................................ 16.10.4 Mit BorderLayout in allen Himmelsrichtungen ........................... 16.10.5 Rasteranordnung mit GridLayout ............................................... 16.10.6 Der GridBagLayout-Manager ..................................................... 16.10.7 Null-Layout ............................................................................... 16.10.8 BoxLayout ................................................................................. 16.10.9 Weitere Layoutmanager ............................................................. 24 930 930 931 933 934 936 937 937 939 940 941 942 944 946 947 948 949 949 951 952 955 956 957 957 960 960 960 961 961 962 964 964 964 965 966 968 970 972 976 977 978 1371.book Seite 25 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 16.11 Rollbalken und Schieberegler ................................................................... 16.11.1 Schieberegler (JSlider) ................................................................ 16.11.2 Rollbalken (JScrollBar) ................................................................ 16.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen ................................... 16.12.1 Kontrollfelder (JCheckBox) ......................................................... 16.12.2 ItemSelectable, ItemListener und das ItemEvent ........................ 16.12.3 Sich gegenseitig ausschließende Optionen (JRadioButton) ......... 16.13 Fortschritte bei Operationen überwachen ................................................. 16.13.1 Fortschrittsbalken (JProgressBar) ................................................ 16.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor) ....................... 16.14 Menüs und Symbolleisten ........................................................................ 16.14.1 Die Menüleisten und die Einträge .............................................. 16.14.2 Menüeinträge definieren ........................................................... 16.14.3 Einträge durch Action-Objekte beschreiben ............................... 16.14.4 Mit der Tastatur: Mnemonics und Shortcut ................................ 16.14.5 Der Tastatur-Shortcut (Accelerator) ........................................... 16.14.6 Tastenkürzel (Mnemonics) ......................................................... 16.14.7 Symbolleisten alias Toolbars ...................................................... 16.14.8 Popup-Menüs ............................................................................ 16.14.9 System-Tray nutzen .................................................................. 16.15 Das Model-View-Controller-Konzept ....................................................... 16.16 Auswahlmenüs, Listen und Spinner .......................................................... 16.16.1 Auswahlmenü (JComboBox) ...................................................... 16.16.2 Zuordnung einer Taste mit einem Eintrag ................................... 16.16.3 Datumsauswahl ......................................................................... 16.16.4 Listen (JList) ............................................................................... 16.16.5 Drehfeld (JSpinner) .................................................................... 16.17 Texteingabefelder ..................................................................................... 16.17.1 Text in einer Eingabezeile .......................................................... 16.17.2 Die Oberklasse der Text-Komponenten (JTextComponent) ........ 16.17.3 Geschützte Eingaben (JPasswordField) ....................................... 16.17.4 Validierende Eingabefelder (JFormattedTextField) ...................... 16.17.5 Einfache mehrzeilige Textfelder (JTextArea) ............................... 16.17.6 Editor-Klasse (JEditorPane) ........................................................ 16.18 Tabellen (JTable) ...................................................................................... 16.18.1 Ein eigenes Tabellen-Model ....................................................... 16.18.2 Basisklasse für eigene Modelle (AbstractTableModel) ................ 16.18.3 Vorgefertigtes Standard-Modell (DefaultTableModel) ................ 16.18.4 Ein eigener Renderer für Tabellen .............................................. 16.18.5 Zell-Editoren .............................................................................. 16.18.6 Größe und Umrandung der Zellen .............................................. 16.18.7 Spalteninformationen ................................................................ 978 978 980 984 985 986 987 989 989 991 991 991 993 994 995 996 997 998 1000 1004 1005 1007 1007 1010 1011 1011 1016 1017 1018 1019 1020 1021 1022 1024 1027 1028 1029 1032 1033 1036 1037 1038 25 1371.book Seite 26 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 16.19 16.20 16.21 16.22 16.23 16.24 16.25 16.26 16.27 16.28 16.29 26 16.18.8 Tabellenkopf von Swing-Tabellen ............................................ 16.18.9 Selektionen einer Tabelle ......................................................... 16.18.10 Automatisches Sortieren und Filtern mit RowSorter ................. Bäume (JTree) ........................................................................................... 16.19.1 JTree und sein TreeModel und TreeNode ................................. 16.19.2 Selektionen bemerken ............................................................. 16.19.3 Das TreeModel von JTree ........................................................ JRootPane und JDesktopPane ................................................................... 16.20.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane) 16.20.2 JDesktopPane und die Kinder JInternalFrame .......................... Dialoge und Window-Objekte .................................................................. 16.21.1 JWindow und JDialog .............................................................. 16.21.2 Modal oder nicht-modal .......................................................... 16.21.3 Standarddialoge mit JOptionPane ............................................ 16.21.4 Der Dateiauswahldialog ........................................................... Flexibles Java-Look-and-Feel .................................................................... 16.22.1 Look and Feel global setzen ..................................................... 16.22.2 UIManager .............................................................................. 16.22.3 Windowsoptik mit JGoodies Looks verbessern ......................... Die Zwischenablage (Clipboard) ................................................................ 16.23.1 Clipboard-Objekte ................................................................... 16.23.2 Auf den Inhalt zugreifen mit Transferable ................................. 16.23.3 DataFlavor ist das Format der Daten in der Zwischenablage ..... 16.23.4 Einfügungen in der Zwischenablage erkennen .......................... 16.23.5 Drag & Drop ............................................................................ Undo durchführen .................................................................................... AWT, Swing und die Threads .................................................................... 16.25.1 Ereignisschlange (EventQueue) und AWT-Event-Thread ........... 16.25.2 Swing ist nicht Thread-sicher ................................................... 16.25.3 invokeLater() und invokeAndWait() ......................................... 16.25.4 SwingWorker ........................................................................... 16.25.5 Eigene Ereignisse in die Queue setzen ..................................... 16.25.6 Auf alle Ereignisse hören .......................................................... Barrierefreiheit mit der Java Accessibility API ............................................ Zeitliches Ausführen mit dem javax.swing.Timer ....................................... Alternativen zu AWT und Swing ............................................................... 16.28.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor ....... 16.28.2 SWT (Standard Widget Toolkit) ............................................... Zum Weiterlesen ...................................................................................... 1039 1039 1040 1041 1041 1043 1043 1045 1046 1046 1048 1048 1048 1049 1051 1054 1054 1055 1056 1056 1056 1057 1058 1060 1060 1061 1063 1063 1064 1065 1066 1068 1069 1069 1070 1071 1071 1072 1073 1371.book Seite 27 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 17 Grafikprogrammierung ........................................................................ 1075 17.1 17.2 17.3 17.4 17.5 17.6 Grundlegendes zum Zeichnen ................................................................... 17.1.1 Die paint()-Methode für das AWT-Frame ................................... 17.1.2 Zeichnen von Inhalten mit JFrame ............................................. 17.1.3 Auffordern zum Neuzeichnen mit repaint() ................................ 17.1.4 Grundbegriffe: Koordinaten, Punkte, Pixel ................................. 17.1.5 Die ereignisorientierte Programmierung ändert Fensterinhalte ... 17.1.6 Java 2D-API ............................................................................... Einfache Zeichenmethoden ...................................................................... 17.2.1 Linien ........................................................................................ 17.2.2 Rechtecke .................................................................................. 17.2.3 Ovale und Kreisbögen ............................................................... 17.2.4 Polygone und Polylines .............................................................. Zeichenketten schreiben und Fonts .......................................................... 17.3.1 Zeichenfolgen schreiben ............................................................ 17.3.2 Die Font-Klasse ......................................................................... 17.3.3 Einen neuen Font aus einem gegebenen Font ableiten ............... 17.3.4 Zeichensätze des Systems ermitteln ........................................... 17.3.5 Neue TrueType-Fonts in Java nutzen .......................................... 17.3.6 Font-Metadaten durch FontMetrics ........................................... Geometrische Objekte .............................................................................. 17.4.1 Die Schnittstelle Shape .............................................................. 17.4.2 Kreisförmiges ............................................................................. 17.4.3 Kurviges .................................................................................... 17.4.4 Area und die konstruktive Flächengeometrie ............................. 17.4.5 Pfade ......................................................................................... 17.4.6 Punkt in einer Form, Schnitt von Linien, Abstand Punkt/Linie .... Das Innere und Äußere einer Form ........................................................... 17.5.1 Farben und die Paint-Schnittstelle ............................................. 17.5.2 Farben mit der Klasse Color ....................................................... 17.5.3 Die Farben des Systems über SystemColor ................................. 17.5.4 Composite und Xor .................................................................... 17.5.5 Dicke und Art der Linien von Formen bestimmen über Stroke ... Bilder ....................................................................................................... 17.6.1 Eine Übersicht über die Bilder-Bibliotheken ............................... 17.6.2 Bilder mit ImageIO lesen ........................................................... 17.6.3 Ein Bild zeichnen ....................................................................... 17.6.4 Programm-Icon/Fenster-Icon setzen .......................................... 17.6.5 Splash-Screen ............................................................................ 17.6.6 Bilder im Speicher erzeugen ....................................................... 17.6.7 Pixel für Pixel auslesen und schreiben ........................................ 17.6.8 Bilder skalieren .......................................................................... 1075 1075 1077 1078 1078 1079 1080 1081 1081 1082 1083 1084 1085 1085 1086 1088 1089 1089 1090 1094 1095 1096 1097 1097 1097 1100 1102 1102 1103 1107 1111 1111 1116 1116 1117 1119 1122 1123 1123 1125 1127 27 1371.book Seite 28 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 17.7 17.8 17.9 17.6.9 Schreiben mit ImageIO .............................................................. 17.6.10 Asynchrones Laden mit getImage() und dem MediaTracker ........ Weitere Eigenschaften von Graphics ......................................................... 17.7.1 Eine Kopie von Graphics erstellen .............................................. 17.7.2 Koordinatensystem verschieben ................................................. 17.7.3 Beschnitt (Clipping) ................................................................... 17.7.4 Zeichenhinweise durch RenderingHints ...................................... 17.7.5 Transformationen mit einem AffineTransform-Objekt ................. Drucken ................................................................................................... 17.8.1 Drucken der Inhalte ................................................................... 17.8.2 Bekannte Drucker ...................................................................... Zum Weiterlesen ...................................................................................... 1129 1133 1134 1134 1135 1135 1138 1139 1140 1140 1143 1144 18 Netzwerkprogrammierung .................................................................. 1145 18.1 18.2 18.3 18.4 18.5 18.6 18.7 28 Grundlegende Begriffe .............................................................................. 18.1.1 Internet-Standards und RFC ....................................................... URI und URL ............................................................................................ 18.2.1 URI ............................................................................................ 18.2.2 Die Klasse URL .......................................................................... 18.2.3 Informationen über eine URL ..................................................... 18.2.4 Der Zugriff auf die Daten über die Klasse URL ............................ 18.2.5 Verbindungen durch einen Proxy-Server .................................... Die Klasse URLConnection ....................................................................... 18.3.1 Methoden und Anwendung von URLConnection ....................... 18.3.2 Protokoll- und Content-Handler ................................................ 18.3.3 Im Detail: vom URL zur URLConnection ..................................... 18.3.4 Der Protokoll-Handler für Jar-Dateien ........................................ 18.3.5 Basic Authentication/Proxy-Authentifizierung ............................ Mit GET und POST Daten übergeben ....................................................... 18.4.1 Kodieren der Parameter für Serverprogramme ........................... 18.4.2 Eine Suchmaschine ansprechen .................................................. Host- und IP-Adressen ............................................................................. 18.5.1 Lebt der Rechner? ...................................................................... 18.5.2 IP-Adresse des lokalen Hosts ..................................................... 18.5.3 Das Netz ist Klasse … ................................................................ NetworkInterface ..................................................................................... Mit dem Socket zum Server ...................................................................... 18.7.1 Das Netzwerk ist der Computer ................................................. 18.7.2 Sockets ...................................................................................... 18.7.3 Eine Verbindung zum Server aufbauen ....................................... 18.7.4 Server unter Spannung: die Ströme ............................................ 18.7.5 Die Verbindung wieder abbauen ................................................ 1145 1145 1146 1146 1146 1149 1150 1152 1153 1153 1155 1156 1157 1159 1160 1161 1162 1163 1165 1166 1167 1167 1168 1168 1168 1169 1170 1171 1371.book Seite 29 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 18.8 18.9 18.10 18.11 18.12 18.13 18.14 18.7.6 Informationen über den Socket .................................................. 18.7.7 Reine Verbindungsdaten über SocketAddress ............................ Client-Server-Kommunikation .................................................................. 18.8.1 Warten auf Verbindungen .......................................................... 18.8.2 Ein Multiplikationsserver ........................................................... 18.8.3 Blockierendes Lesen .................................................................. 18.8.4 Von außen erreichbar sein ......................................................... Apache Jakarta Commons HttpClient und Net .......................................... 18.9.1 Jakarta Commons HttpClient ...................................................... 18.9.2 Jakarta Commons Net ................................................................ Arbeitsweise eines Webservers ................................................................. 18.10.1 Das Hypertext Transfer Protocol (HTTP) ..................................... 18.10.2 Anfragen an den Server .............................................................. 18.10.3 Die Antworten vom Server ......................................................... 18.10.4 Webserver mit com.sun.net.httpserver.HttpServer ..................... Datagram-Sockets .................................................................................... 18.11.1 Die Klasse DatagramSocket ........................................................ 18.11.2 Datagramme und die Klasse DatagramPacket ............................ 18.11.3 Auf ein hereinkommendes Paket warten .................................... 18.11.4 Ein Paket zum Senden vorbereiten ............................................. 18.11.5 Methoden der Klasse DatagramPacket ....................................... 18.11.6 Das Paket senden ...................................................................... E-Mail ...................................................................................................... 18.12.1 Wie eine E-Mail um die Welt geht ............................................. 18.12.2 Das Simple Mail Transfer Protocol und RFC 822 ........................ 18.12.3 POP (Post Office Protocol) ......................................................... 18.12.4 Die JavaMail API ....................................................................... 18.12.5 E-Mails mittels POP3 abrufen .................................................... 18.12.6 E-Mails versenden ..................................................................... 18.12.7 Ereignisse und Suchen ............................................................... Tiefer liegende Netzwerkeigenschaften ..................................................... 18.13.1 Internet Control Message Protocol (ICMP) ................................. 18.13.2 MAC-Adresse ............................................................................ Zum Weiterlesen ...................................................................................... 1171 1172 1173 1174 1175 1178 1179 1179 1180 1180 1181 1181 1181 1184 1187 1189 1190 1192 1192 1193 1194 1195 1196 1196 1196 1197 1197 1198 1201 1203 1204 1204 1204 1205 19 Verteilte Programmierung mit RMI und Web-Services ...................... 1207 19.1 19.2 Entfernte Objekte und Methoden ............................................................. 19.1.1 Stellvertreter helfen bei entfernten Methodenaufrufen .............. 19.1.2 Standards für entfernte Objekte ................................................. Java Remote Method Invocation .............................................................. 19.2.1 Zusammenspiel von Server, Registry und Client ......................... 19.2.2 Wie die Stellvertreter die Daten übertragen ............................... 1207 1207 1209 1209 1209 1209 29 1371.book Seite 30 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 19.3 19.4 19.5 19.6 19.7 19.8 19.9 19.2.3 Probleme mit entfernten Methoden .......................................... 1210 19.2.4 Nutzen von RMI bei Middleware-Lösungen ............................... 1211 19.2.5 Zentrale Klassen und Schnittstellen ............................................ 1212 19.2.6 Entfernte und lokale Objekte im Vergleich ................................. 1213 Auf der Serverseite ................................................................................... 1213 19.3.1 Entfernte Schnittstelle deklarieren ............................................. 1213 19.3.2 Remote-Objekt-Implementierung .............................................. 1214 19.3.3 Stellvertreterobjekte .................................................................. 1215 19.3.4 Der Namensdienst (Registry) ...................................................... 1215 19.3.5 Remote-Objekt-Implementierung exportieren und beim Namensdienst anmelden ............................................................ 1217 19.3.6 Einfaches Logging ...................................................................... 1219 19.3.7 Aufräumen mit dem DGC .......................................................... 1220 Auf der Clientseite .................................................................................... 1220 Entfernte Objekte übergeben und laden ................................................... 1221 19.5.1 Klassen vom RMI-Klassenlader nachladen .................................. 1222 Weitere Eigenschaften von RMI ................................................................ 1222 19.6.1 RMI und CORBA ........................................................................ 1222 19.6.2 RMI über HTTP getunnelt .......................................................... 1223 19.6.3 Automatische Remote-Objekt-Aktivierung ................................. 1223 Daily Soap ................................................................................................ 1224 19.7.1 SOAP-Protokoll ......................................................................... 1224 19.7.2 Die technische Realisierung ....................................................... 1225 19.7.3 SOAP-Implementierungen ......................................................... 1225 19.7.4 @WebService in Java 6 ............................................................. 1226 19.7.5 Einen Web-Service definieren .................................................... 1226 19.7.6 Web-Services veröffentlichen ..................................................... 1227 19.7.7 Einen JAX-WS-Client implementieren ........................................ 1228 Java Message Service (JMS) ...................................................................... 1229 Zum Weiterlesen ...................................................................................... 1230 20 JavaServer Pages und Servlets ............................................................ 1231 20.1 20.2 30 Dynamisch generierte Webseiten ............................................................. 20.1.1 Was sind Servlets? ..................................................................... 20.1.2 Was sind JavaServer Pages? ........................................................ Servlets und JSPs mit Tomcat entwickeln .................................................. 20.2.1 Servlet-Container ....................................................................... 20.2.2 Entwicklung der Servlet-/JSP-Spezifikationen ............................. 20.2.3 Webserver mit Servlet-Funktionalität ......................................... 20.2.4 Tomcat installieren .................................................................... 20.2.5 Ablageort für eigene JSPs ........................................................... 20.2.6 Web-Applikationen ................................................................... 1231 1231 1232 1233 1233 1234 1234 1234 1235 1236 1371.book Seite 31 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 20.2.7 Zuordnung von Web-Applikationen zu physikalischen Verzeichnissen ........................................................................... 20.2.8 Web-Projekt mit Eclipse IDE for Java EE Developers .................. 20.3 Statisches und Dynamisches ..................................................................... 20.3.1 Statischer Template-Code .......................................................... 20.3.2 Dynamische Inhalte ................................................................... 20.3.3 Kommentare .............................................................................. 20.4 Die Expression Language (EL) ................................................................... 20.4.1 Operatoren der EL ..................................................................... 20.4.2 Literale ...................................................................................... 20.4.3 Implizite EL-Objekte .................................................................. 20.5 Formulardaten .......................................................................................... 20.5.1 Einen Parameter auslesen .......................................................... 20.5.2 HTML-Formulare ....................................................................... 20.6 Auf Beans zurückgreifen ........................................................................... 20.6.1 Beans in JSPs anlegen ................................................................ 20.6.2 Properties einer Bean im EL-Ausdruck erfragen .......................... 20.6.3 Properties mit <jsp:setProperty> setzen ..................................... 20.6.4 Bean-Klasse zum Testen von E-Mail-Adressen ........................... 20.6.5 Parameterwerte in Bean übertragen ........................................... 20.7 JSP-Tag-Libraries ...................................................................................... 20.7.1 Standard Tag Library (JSTL) ........................................................ 20.8 Einbinden und Weiterleiten ...................................................................... 20.8.1 Einbinden von Inhalten .............................................................. 20.8.2 Forward und Redirect ................................................................ 20.8.3 Applets einbinden ..................................................................... 20.9 Scripting-Elemente in JSPs ........................................................................ 20.9.1 Scriptlets ................................................................................... 20.9.2 JSP-Ausdrücke ........................................................................... 20.9.3 JSP-Deklarationen ...................................................................... 20.9.4 Quoting ..................................................................................... 20.9.5 Entsprechende XML-Tags .......................................................... 20.9.6 Implizite Objekte für Scriptlets und JSP-Ausdrücke .................... 20.10 JSP-Direktiven .......................................................................................... 20.10.1 page-Direktiven im Überblick .................................................... 20.10.2 Mit JSPs Bilder generieren ......................................................... 20.11 Sitzungsverfolgung (Session Tracking) ....................................................... 20.11.1 Lösungen für Sitzungsverfolgung ................................................ 20.11.2 Auf Session-Dateien zurückgreifen ............................................. 20.12 Servlets .................................................................................................... 20.12.1 Servlets compilieren ................................................................... 20.12.2 Servlet-Mapping ........................................................................ 1237 1237 1238 1238 1239 1239 1240 1240 1241 1241 1242 1242 1242 1244 1244 1244 1244 1245 1246 1247 1247 1251 1251 1252 1253 1253 1254 1254 1254 1255 1255 1255 1256 1256 1257 1258 1259 1260 1260 1261 1262 31 1371.book Seite 32 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 20.12.3 Der Lebenszyklus eines Servlets ................................................. 20.12.4 Mehrere Anfragen beim Servlet und die Thread-Sicherheit ........ 20.12.5 Servlets und Sessions ................................................................. 20.12.6 Weiterleiten und Einbinden von Servlet-Inhalten ....................... 20.13 Zum Weiterlesen ...................................................................................... 1263 1263 1263 1264 1265 21 Applets ................................................................................................ 1267 21.1 21.2 21.3 Applets in der Wiege von Java .................................................................. 21.1.1 (J)Applet und Applikationen ...................................................... 21.1.2 Das erste Hallo-Applet ............................................................... 21.1.3 HTML Converter ........................................................................ 21.1.4 Fehler in Applets finden ............................................................. Die Applet-API ......................................................................................... 21.2.1 Die Zyklen eines Applets ............................................................ 21.2.2 Parameter an das Applet übergeben .......................................... 21.2.3 Wie das Applet den Browser-Inhalt ändern kann ....................... 21.2.4 Den Ursprung des Applets erfragen ............................................ 21.2.5 Datenaustausch zwischen Applets .............................................. 21.2.6 Was ein Applet alles darf ........................................................... 21.2.7 Ist Java im Browser aktiviert? ..................................................... 21.2.8 Applet unter Netscape oder Microsoft Internet Explorer? .......... Webstart .................................................................................................. 1267 1268 1268 1270 1272 1272 1272 1272 1274 1274 1275 1278 1279 1279 1280 22 Midlets und die Java ME ..................................................................... 1283 22.1 22.2 22.3 22.4 22.5 22.6 Java Platform, Micro Edition (Java ME) ..................................................... Konfigurationen ....................................................................................... 22.2.1 Connected Limited Device Configuration (CLDC) ....................... 22.2.2 Connected Device Configuration (CDC) ...................................... Profile ...................................................................................................... 22.3.1 Mobile Information Device Profile (MIDP) ................................. 22.3.2 Weitere Profile .......................................................................... Wireless Toolkits ...................................................................................... 22.4.1 Sun Java Wireless Toolkit for CLDC ............................................ 22.4.2 Eclipse-Plugin ............................................................................ Die Midlet-API ......................................................................................... 22.5.1 Paketstruktur Mobile Information Device Profile (2.0) ............... Zum Weiterlesen ...................................................................................... 1283 1283 1284 1284 1284 1285 1285 1285 1285 1286 1289 1289 1290 23 Datenbankmanagement mit JDBC ...................................................... 1291 23.1 32 Das relationale Modell ............................................................................. 1291 1371.book Seite 33 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 23.2 23.3 23.4 23.5 23.6 23.7 23.8 23.9 23.10 23.11 23.12 23.13 Datenbanken und Tools ........................................................................... 23.2.1 HSQLDB .................................................................................... 23.2.2 Weitere Datenbanken ................................................................ 23.2.3 Eclipse-Plugins zum Durchschauen von Datenbanken ................ JDBC und Datenbanktreiber ..................................................................... 23.3.1 Treibertypen .............................................................................. 23.3.2 JDBC-Versionen ......................................................................... Eine Beispielabfrage ................................................................................. 23.4.1 Schritte zur Datenbankabfrage ................................................... 23.4.2 Client für HSQLDB-Datenbank ................................................... Mit Java an eine Datenbank andocken ..................................................... 23.5.1 Der Treiber-Manager ................................................................. 23.5.2 Den Treiber laden ...................................................................... 23.5.3 Eine Aufzählung aller Treiber ..................................................... 23.5.4 Log-Informationen ..................................................................... 23.5.5 Verbindung zur Datenbank auf- und abbauen ............................ 23.5.6 DataSource ................................................................................ 23.5.7 Gepoolte Verbindungen ............................................................. Datenbankabfragen .................................................................................. 23.6.1 Abfragen über das Statement-Objekt ......................................... 23.6.2 Ergebnisse einer Abfrage in ResultSet ........................................ 23.6.3 Java und SQL-Datentypen .......................................................... 23.6.4 Unicode in der Spalte korrekt auslesen ...................................... 23.6.5 Eine SQL-NULL und wasNull() bei ResultSet .............................. 23.6.6 Wie viele Zeilen hat ein ResultSet? ............................................ Die Ausnahmen bei JDBC ......................................................................... Elemente einer Datenbank hinzufügen und aktualisieren .......................... 23.8.1 Batch-Updates ........................................................................... ResultSets in Bohnen durch RowSet ......................................................... 23.9.1 Die Schnittstelle RowSet ............................................................ 23.9.2 Implementierungen von RowSet ................................................ 23.9.3 Der Typ CachedRowSet ............................................................. 23.9.4 Der Typ WebRowSet ................................................................. Vorbereitete Anweisungen (Prepared Statements) .................................... 23.10.1 PreparedStatement-Objekte vorbereiten .................................... 23.10.2 Werte für die Platzhalter eines PreparedStatement .................... Transaktionen ........................................................................................... Metadaten ............................................................................................... 23.12.1 Metadaten über die Tabelle ....................................................... 23.12.2 Informationen über die Datenbank ............................................ Einführung in SQL .................................................................................... 23.13.1 Ein Rundgang durch SQL-Abfragen ............................................ 1292 1292 1293 1295 1297 1298 1299 1300 1300 1301 1302 1303 1303 1304 1305 1305 1308 1310 1311 1311 1313 1314 1317 1318 1318 1319 1320 1320 1322 1322 1322 1323 1324 1326 1326 1327 1328 1329 1329 1332 1333 1334 33 1371.book Seite 34 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 23.13.2 Datenabfrage mit der Data Query Language (DQL) .................... 1335 23.13.3 Tabellen mit der Data Definition Language (DDL) anlegen ......... 1337 23.14 Zum Weiterlesen ...................................................................................... 1337 24 Reflection und Annotationen .............................................................. 1339 24.1 24.2 24.3 24.4 24.5 24.6 24.7 34 Metadaten ............................................................................................... 24.1.1 Metadaten durch JavaDoc-Tags ................................................. Metadaten der Klassen mit dem Class-Objekt ........................................... 24.2.1 An ein Class-Objekt kommen ..................................................... 24.2.2 Was das Class-Objekt beschreibt ............................................... 24.2.3 Der Name der Klasse ................................................................. 24.2.4 instanceof mit Class-Objekten .................................................... 24.2.5 Oberklassen finden .................................................................... 24.2.6 Implementierte Interfaces einer Klasse oder eines Interfaces ...... 24.2.7 Modifizierer und die Klasse Modifier ......................................... 24.2.8 Die Arbeit auf dem Feld ............................................................. Attribute, Methoden und Konstruktoren .................................................. 24.3.1 Reflections – Gespür für Attribute einer Klasse ........................... 24.3.2 Methoden einer Klasse erfragen ................................................. 24.3.3 Properties einer Bean erfragen ................................................... 24.3.4 Konstruktoren einer Klasse ........................................................ 24.3.5 Annotationen ............................................................................ Objekte erzeugen und manipulieren ......................................................... 24.4.1 Objekte erzeugen ...................................................................... 24.4.2 Die Belegung der Variablen erfragen .......................................... 24.4.3 Eine generische toString()-Funktion ........................................... 24.4.4 Variablen setzen ........................................................................ 24.4.5 Private Attribute ändern ............................................................ Methoden aufrufen .................................................................................. 24.5.1 Statische Methoden aufrufen ..................................................... 24.5.2 Dynamische Methodenaufrufe bei festen Methoden beschleunigen ............................................................................ Annotationen ........................................................................................... 24.6.1 Neue Annotationen definieren ................................................... 24.6.2 Annotationen mit genau einem Element .................................... 24.6.3 Beliebige Schlüssel-Werte-Paare ................................................ 24.6.4 Vorbelegte Elemente ................................................................. 24.6.5 Annotieren von Annotationstypen ............................................. 24.6.6 Annotationen zur Laufzeit auslesen ............................................ 24.6.7 Mögliche Nachteile von Annotationen ....................................... 24.6.8 XDoclet ..................................................................................... Zum Weiterlesen ...................................................................................... 1339 1339 1340 1340 1342 1344 1346 1347 1348 1348 1350 1351 1351 1354 1358 1358 1360 1361 1361 1362 1364 1366 1368 1368 1369 1370 1372 1372 1372 1374 1377 1378 1380 1382 1383 1384 1371.book Seite 35 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 25 Logging und Monitoring ..................................................................... 1385 25.1 25.2 25.3 25.4 25.5 25.6 25.7 Logging mit Java ....................................................................................... 25.1.1 Logging-APIs ............................................................................. 25.1.2 Logging mit log4j ....................................................................... Überwachen von Systemzuständen ........................................................... MBean-Typen, MBean-Server und weitere Begriffe ................................... 25.3.1 MXBeans des Systems ................................................................ Geschwätzige Programme und JConsole ................................................... 25.4.1 JConsole .................................................................................... Der MBeanServer ..................................................................................... Eine eigene Standard-MBean .................................................................... 25.6.1 Management-Schnittstelle ......................................................... 25.6.2 Implementierung der Managed-Ressource ................................. 25.6.3 Anmeldung beim Server ............................................................. 25.6.4 Eigene Bean in JConsole ............................................................ Zum Weiterlesen ...................................................................................... 1385 1385 1386 1388 1389 1390 1392 1392 1393 1395 1395 1395 1396 1396 1399 26 Sicherheitskonzepte ............................................................................ 1401 26.1 26.2 26.3 26.4 26.5 26.6 Zentrale Elemente der Java-Sicherheit ...................................................... 26.1.1 Security-API der Java SE ............................................................. 26.1.2 Cryptographic Service Providers ................................................. Der Sandkasten (Sandbox) ........................................................................ Sicherheitsmanager (Security Manager) .................................................... 26.3.1 Der Sicherheitsmanager bei Applets ........................................... 26.3.2 Sicherheitsmanager aktivieren .................................................... 26.3.3 Rechte durch Policy-Dateien vergeben ...................................... 26.3.4 Erstellen von Rechtedateien mit dem grafischen Policy-Tool ...... 26.3.5 Kritik an den Policies ................................................................. Signierung ................................................................................................ 26.4.1 Warum signieren? ...................................................................... 26.4.2 Digitale Ausweise und die Zertifizierungsstelle ........................... 26.4.3 Mit keytool Schlüssel erzeugen .................................................. 26.4.4 Signieren mit jarsigner ............................................................... Digitale Unterschriften ............................................................................. 26.5.1 Die MDx-Reihe .......................................................................... 26.5.2 Secure Hash Algorithm (SHA) ..................................................... 26.5.3 Mit der Security-API einen Fingerabdruck berechnen ................ 26.5.4 Die Klasse MessageDigest .......................................................... Verschlüsseln von Daten(-strömen) .......................................................... 26.6.1 Den Schlüssel bitte .................................................................... 1401 1401 1402 1403 1404 1405 1406 1408 1410 1410 1412 1412 1412 1413 1414 1414 1415 1415 1416 1416 1418 1418 35 1371.book Seite 36 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 26.7 26.6.2 Verschlüsseln mit Cipher ............................................................ 1420 26.6.3 Verschlüsseln von Datenströmen ............................................... 1420 Zum Weiterlesen ...................................................................................... 1421 27 Java Native Interface (JNI) .................................................................. 1423 27.1 27.2 27.3 27.4 27.5 27.6 Java Native Interface und Invocation-API ................................................. Einbinden einer C-Funktion in ein Java-Programm .................................... 27.2.1 Schreiben des Java-Codes .......................................................... 27.2.2 Compilieren des Java-Programms ............................................... 27.2.3 Erzeugen der Header-Datei ........................................................ 27.2.4 Implementierung der Funktion in C ........................................... 27.2.5 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek .................................................................................. 27.2.6 Suchort der dynamischen Bibliothek .......................................... Nativ die Stringlänge ermitteln ................................................................. Erweiterte JNI-Eigenschaften .................................................................... 27.4.1 Klassendefinitionen .................................................................... 27.4.2 Zugriff auf Attribute ................................................................... Einfache Anbindung von existierenden Bibliotheken ................................. 27.5.1 C++ Klassen ansprechen ............................................................ 27.5.2 COM-Schnittstellen anzapfen .................................................... Zum Weiterlesen ...................................................................................... 1423 1424 1424 1425 1425 1426 1427 1429 1429 1430 1430 1431 1433 1433 1433 1434 28 Dienstprogramme für die Java-Umgebung ......................................... 1435 28.1 28.2 28.3 28.4 28.5 36 Die Werkzeuge im Überblick .................................................................... Java-Compiler ........................................................................................... 28.2.1 Bytecode-Compiler javac ........................................................... 28.2.2 Native Compiler ......................................................................... 28.2.3 Java-Programme in ein natives ausführbares Programm einpacken .................................................................................. Der Java-Interpreter java .......................................................................... 28.3.1 Der Unterschied zwischen java.exe und javaw.exe ..................... Das Archivformat Jar ................................................................................ 28.4.1 Das Dienstprogramm Jar benutzen ............................................. 28.4.2 Das Manifest ............................................................................. 28.4.3 Applikationen in Jar-Archiven starten ........................................ 28.4.4 Applets in Jar-Archiven .............................................................. Monitoringprogramme ............................................................................. 28.5.1 jps ............................................................................................. 28.5.2 jstat ........................................................................................... 28.5.3 jmap .......................................................................................... 28.5.4 jstack ......................................................................................... 1435 1435 1435 1436 1437 1437 1439 1439 1440 1442 1442 1443 1444 1444 1444 1445 1445 1371.book Seite 37 Mittwoch, 17. Dezember 2008 1:39 13 Inhalt 28.6 28.7 28.8 Ant ........................................................................................................... 28.6.1 Bezug und Installation von Ant .................................................. 28.6.2 Properties .................................................................................. 28.6.3 Externe und vordefinierte Properties .......................................... 28.6.4 Weitere Ant-Tasks ..................................................................... 28.6.5 Das Obfuscator-Programm ProGuard ......................................... Weitere Dienstprogramme ....................................................................... 28.7.1 Sourcecode Beautifier ................................................................ 28.7.2 Java-Programme als Systemdienst ausführen .............................. Zum Weiterlesen ...................................................................................... 1446 1446 1448 1449 1449 1450 1451 1451 1452 1453 Index ........................................................................................................................... 1455 37 1371.book Seite 55 Mittwoch, 17. Dezember 2008 1:39 13 Wir produzieren heute Informationen en masse, so wie früher Autos. – John Naisbitt 1 Java ist auch eine Sprache 1.1 Der erste Kontakt Java ist mittlerweile zum Modewort geworden und in aller Munde – doch nicht so sehr, weil Java1 eine schöne Insel, eine reizvolle Wandfarbe oder eine Pinte mit brasilianischen Rhythmen in Paris ist, sondern vielmehr, weil es sich um eine robuste objektorientierte Programmiersprache mit einem großen Satz von Bibliotheken handelt. Um im Mainstream der Softwareentwicklung unter den vielen konkurrierenden Sprachen die bevorzugte Sprache zu sein, muss Java schon einiges zu bieten haben, insbesondere wenn über 6 Millionen Softwareentwickler mit der Sprache ihre Brötchen verdienen und es 10 Millionen Downloads von Suns Laufzeitumgebung in der Woche gibt.2 Im ersten Kapitel sollen daher kurz die wesentlichen Konzepte der »Internetprogrammiersprache« vorgestellt werden. 1.2 Historischer Hintergrund In den 1970er Jahren wollte Bill Joy eine Programmiersprache schaffen, die alle Vorteile von MESA und C vereinigt. Diesen Wunsch konnte sich Joy zunächst nicht erfüllen, und erst Anfang der 1990er Jahre beschrieb er in dem Artikel »Further«, wie eine neue objektorientierte Sprache aussehen könnte; sie sollte in den Grundzügen auf C++ aufbauen. Erst später wurde ihm bewusst, dass C++ als Basissprache ungeeignet und für große Programme unhandlich ist. Zu jener Zeit arbeitete James Gosling am SGML-Editor »Imagination«. Er entwickelte in C++ und war mit dieser Sprache ebenfalls nicht zufrieden. Aus diesem Unmut heraus entstand die neue Sprache Oak. Der Name fiel Gosling ein, als er aus dem Fenster seines Arbeitsraums schaute – und eine Eiche erblickte (engl. oak). Doch vielleicht ist das nur eine Legende. Patrick Naughton startete im Dezember 1990 das Green-Projekt, in das Gosling und Mike Sheridan involviert waren. Überbleibsel aus dem Green-Projekt ist der Duke, der zum bekannten Symbol wurde.3 1 Nicht wieder ein anderes Akronym (Just Another Vague Acronym). 2 Quelle: http://de.sun.com/sunnews/events/2007/20071203/pdf/TD_FRA_GoslingKeynote.pdf 3 Er sieht ein bisschen wie ein Zahn aus und könnte deshalb auch die Werbung eines Zahnarztes sein. Das Design stammt übrigens von Joe Palrang. 55 1371.book Seite 56 Mittwoch, 17. Dezember 2008 1:39 13 1 Java ist auch eine Sprache Die Idee hinter diesem Projekt war die Entwicklung von Software für interaktives Fernsehen und andere Geräte der Konsumelektronik. Bestandteile dieses Projekts waren das Betriebssystem Green-OS, Goslings Interpreter Oak und einige Hardwarekomponenten. Joy zeigte den Mitgliedern des Green-Projekts seinen Further-Aufsatz und begann mit der Implementierung einer grafischen Benutzeroberfläche. Gosling schrieb den Originalcompiler in C, und anschließend entwarfen Naughton, Gosling und Sheridan den Runtime-Interpreter ebenfalls in C – die Sprache C++ kam nie zum Einsatz. Oak führte die ersten Programme im August 1991 aus. So entwickelte das Green-Dream-Team ein Gerät mit der Bezeichnung *7 (Star Seven), das es im Herbst 1992 intern vorstellte. SunChef Scott McNealy war von *7 beeindruckt, und aus dem Team wurde im November die Firma First Person, Inc. Nun ging es um die Vermarktung von Star Seven. Anfang 1993 hörte das Team von einer Anfrage von Time Warner bezüglich eines Systems für Set-Top-Boxen. (Set-Top-Boxen sind elektronische Geräte für Endbenutzer.) First Person richtete den Blick vom Consumer-Markt auf die Set-Top-Boxen. Leider zeigte sich Time Warner später nicht mehr interessiert, aber First Person entwickelte (sich) weiter. Nach vielen Richtungswechseln konzentrierte sich die Entwicklung auf das World Wide Web (kurz Web genannt, selten W3). Die Programmiersprache sollte Programmcode über das Netzwerk empfangen können, und fehlerhafte Programme sollten keinen Schaden anrichten. Damit konnten die meisten Konzepte aus C(++) schon abgehakt werden – Zugriffe über ungültige Zeiger, die wild den Speicher beschreiben, sind ein Beispiel. Die Mitglieder des ursprünglichen Projektteams erkannten, dass Oak alle Eigenschaften aufwies, die nötig waren, um es im Web einzusetzen – perfekt, obwohl ursprünglich für einen ganz anderen Zweck entwickelt. Die Sprache Oak erhielt den Namen »Java«, da der Name »Oak«, wie sich später herausstellte, aus Gründen des Copyrights nicht verwendet werden konnte: Eine andere Programmiersprache schmückte sich bereits mit diesem Namen. Nach der Überlieferung fiel die Entscheidung für den Namen Java in einem Coffeeshop. In Java führte Patrick Naughton den Prototyp des Browsers »WebRunner« vor, der an einem Wochenende entstanden sein soll. Nach geringfügiger Überarbeitung durch Jonathan Payne wurde der Browser »HotJava« getauft und im Mai auf der SunWorld ’95 der Öffentlichkeit vorgestellt. Zunächst konnten sich nur wenige Anwender mit HotJava anfreunden. So war es ein großes Glück, dass Netscape sich entschied, die Java-Technologie zu lizenzieren. Sie wurde in der Version 2.0 des Netscape Navigators implementiert. Der Navigator kam im Dezember 1995 auf den Markt. Im Januar 1996 wurde das JDK 1.0 freigegeben, was den Programmierern die erste Möglichkeit gab, Java-Applikationen und Web-Applets (Applet: »A Mini Application«) zu programmieren. Kurz vor der Fertigstellung des JDK 1.0 gründeten die verbliebenen Mitglieder des Green-Teams die Firma JavaSoft. Und so begann der Siegeszug. 56 1371.book Seite 57 Mittwoch, 17. Dezember 2008 1:39 13 Eigenschaften von Java 1.3 Eigenschaften von Java Java ist eine objektorientierte Programmiersprache, die sich durch einige zentrale Eigenschaften auszeichnet. Diese machen sie universell einsetzbar und für die Industrie als robuste Programmiersprache interessant. Da Java objektorientiertes Programmieren ermöglicht, können Entwickler moderne und wiederverwertbare Softwarekomponenten programmieren. 1.3.1 Bytecode und die virtuelle Maschine Zunächst ist Java eine Programmiersprache wie jede andere. Doch im Gegensatz zu herkömmlichen Übersetzern einer Programmiersprache, die Maschinencode für eine spezielle Plattform und einen bestimmten Prozessor generieren, erzeugt der Java-Compiler Programmcode, den so genannten Bytecode, für eine virtuelle Maschine. Bytecode ist vergleichbar mit Mikroprozessorcode für einen erdachten Prozessor, der Anweisungen wie arithmetische Operationen, Sprünge und weiteres kennt. Der Java-Compiler von Sun und der Java-Compiler der Entwicklungsumgebung Eclipse sind selbst in Java implementiert und generieren diesen Bytecode. (Es gibt aber auch Java-Compiler in C++, wie den Jikes-Compiler4.) Damit der Programmcode des virtuellen Prozessors ausgeführt werden kann, führt nach der Übersetzungsphase die Laufzeitumgebung (auch Runtime-Interpreter genannt), die Java Virtual Machine (JVM), den Bytecode aus.5 Somit ist Java eine compilierte, aber auch interpretierte Programmiersprache – von der Hardwaremethode einmal abgesehen. 4 http://tutego.com/go/jikes 5 Die Idee des Bytecodes (FrameMaker schlägt hier als Korrekturvorschlag »Bote Gottes« vor) ist schon alt. Die Firma Datapoint schuf um 1970 die Programmiersprache PL/B, die Programme auf Bytecode abbildet. Auch verwendet die Originalimplementierung von UCSD-Pascal, die etwa Anfang 1980 entstand, einen Zwischencode – kurz p-code. 57 1.3 1371.book Seite 58 Mittwoch, 17. Dezember 2008 1:39 13 1 Java ist auch eine Sprache Das pure Interpretieren bereitet natürlich Geschwindigkeitsprobleme, da das Erkennen, Dekodieren und Ausführen der Befehle Zeit kostet. Java-Programme der ersten Stunde waren deutlich langsamer als übersetzte C(++)-Programme. Die Technik der Just-in-Time-(JIT-)Compiler6 löste das Problem. Ein JIT-Compiler beschleunigt die Ausführung der Programme, indem er zur Laufzeit die Programmanweisungen der virtuellen Maschine in Maschinencode der jeweiligen Plattform übersetzt. Anschließend steht ein an die Architektur angepasstes Programm im Speicher, das der physikalische Prozessor ohne Interpretation schnell ausführt. Mit dieser Technik entspricht die Geschwindigkeit der anderer übersetzter Sprachen. Java on a chip Neben einer Laufzeitumgebung, die den Java-Bytecode interpretiert und in den Maschinencode eines Wirtssystems übersetzt, wurde auch ein Prozessor in Silizium gegossen, der in der Hardware Bytecode ausführt. Die Entwicklung ging verstärkt von Sun aus, und einer der ersten Prozessoren war PicoJava. Bei der Entwicklung des Prozessors stand nicht die maximale Geschwindigkeit im Vordergrund, sondern die Kosten pro Chip, um ihn in jedes Haushaltsgerät einbauen zu können. Das Interesse an Java auf einem Chip zieht nach einer Flaute wieder an, denn viele mobile Endgeräte wollen mit schnellen Ausführungseinheiten versorgt werden. Die ARM-Technologie des Unternehmens ARM Limited erlaubt über Jazelle DBX eine sehr schnelle Ausführung von Java-Bytecode. Mit dem Prozessor S5L8900 hat Samsung die ARMTechnologie ARM1176JZ(F)-S zusammen mit Speicherschnittstellen und Teile für Connectivity, Peripherie und Multimedia-Möglichkeiten in Silizium gegossen, und als 667-MHz-Prozessor sitzt er nun in Apples iPhone. Ironie des Schicksals ist jedoch, dass Apple im iPhone bisher keine Java-Unterstützung vorsieht. Der aJ-100 von aJile Systems Inc. ist ein weiterer Prozessor. Und wenn wir den Pressemitteilungen von Azul Systems7 glauben können, gibt es auch bald einen 64-Bit-Prozessor mit 48 Kernen, der Java- und auch .NET-Bytecode ausführt. Ein Doppelherz tut auch Java gut. 1.3.2 Objektorientierung in Java Die Sprache Java ist nicht bis zur letzten Konsequenz objektorientiert, so wie Smalltalk es vorbildlich demonstriert. Primitive Datentypen wie Ganzzahlen oder Fließkommazahlen werden nicht als Objekte verwaltet. Der Design-Grund war vermutlich, dass der Compiler und die Laufzeitumgebung mit der Trennung besser in der Lage waren, die Programme zu optimieren. Allerdings zeigt die virtuelle Maschine von Microsoft für die .NET-Plattform deutlich, dass auch ohne die Trennung eine gute Performance möglich ist. Java ist als Sprache entworfen worden, die es einfach machen soll, fehlerfreie Software zu schreiben. In C-Programmen erwartet uns statistisch gesehen alle 55 Programmzeilen ein Fehler. Selbst in großen Softwarepaketen (ab einer Million Codezeilen) findet sich, unabhängig 6 Diese Idee ist auch schon alt: HP hatte um 1970 JIT-Compiler für BASIC-Maschinen. 7 http://www.azulsystems.com/ 58 1371.book Seite 59 Mittwoch, 17. Dezember 2008 1:39 13 Eigenschaften von Java von der zugrundeliegenden Programmiersprache, im Schnitt alle 200 Programmzeilen ein Fehler. Selbstverständlich gilt es, diese Fehler zu beheben, obwohl bis heute noch keine umfassende Strategie für die Softwareentwicklung im Großen gefunden wurde. Viele Arbeiten der Informatik beschäftigen sich mit der Frage, wie Tausende Programmierer über Jahrzehnte miteinander arbeiten und Software entwerfen können. Dieses Problem ist nicht einfach zu lösen und wurde im Zuge der Softwarekrise in den 1960er Jahren heftig diskutiert. 1.3.3 Java-Security-Modell Das Java-Security-Modell gewährleistet den sicheren Programmablauf auf den verschiedensten Ebenen. Der Verifier liest Code und überprüft die strukturelle Korrektheit und Typsicherheit. Der Klassenlader (engl. class loader) lädt Dateien entweder von einem externen Medium wie der Festplatte oder auch einem Netzwerk und überträgt die Java-Binärdaten zum Interpreter. Dort überwacht ein Security-Manager Zugriffe auf das Dateisystem, die NetzwerkPorts, externe Prozesse und die Systemressourcen. Treten Sicherheitsprobleme auf, werden diese durch Exceptions zur Laufzeit gemeldet. Das Sicherheitsmodell ist vom Programmierer erweiterbar. 1.3.4 Zeiger und Referenzen In Java gibt es keine Zeiger (engl. pointer), wie sie aus anderen Programmiersprachen bekannt und gefürchtet sind. Da eine objektorientierte Programmiersprache ohne Verweise aber nicht funktioniert, werden Referenzen eingeführt. Eine Referenz repräsentiert ein Objekt, und eine Variable speichert diese Referenz. Die Referenz hat einen Typ, der sich nicht ändern kann. Ein Auto bleibt ein Auto und kann nicht als Laminiersystem angesprochen werden. Eine Referenz unter Java ist nicht als Zeiger auf Speicherbereiche zu verstehen. Beispiel Das folgende Programm zeigt, dass das Pfuschen in C++ leicht möglich ist und wir Zugriff auf private Elemente über eine Zeigerarithmetik bekommen können. Für uns Java-Programmierer ist dies ein abschreckendes Beispiel. #include <string.h> #include <iostream.h> class Ganz_unsicher { public: Ganz_unsicher() { strcpy(passwort, "geheim"); } private: char passwort[100]; }; void main() { Ganz_unsicher gleich_passierts; char *boesewicht = (char*)&gleich_passierts; cout << "Passwort: " << boesewicht << endl; } 59 1.3 1371.book Seite 1455 Mittwoch, 17. Dezember 2008 1:39 13 Index #ifdef 61 #IMPLIED 861 #REQUIRED 860 $, innere Klasse 492, 497 %%, Format-Spezifizierer 291 %, Modulo-Operator 117 %, Operator 312 %b, Format-Spezifizierer 291 %c, Format-Spezifizierer 291 %d, Format-Spezifizierer 291 %e, Format-Spezifizierer 291 %f, Format-Spezifizierer 291 %n, Format-Spezifizierer 291 %s, Format-Spezifizierer 291 %t, Format-Spezifizierer 291 %tD, Format-Spezifizierer 735 %tR, Format-Spezifizierer 735 %tT, Format-Spezifizierer 735 %x, Format-Spezifizierer 291 &&, logischer Operator 123 &, Generics 488 &amp 858 &apos 858 &gt 858 &lt 858 &quot 858 *, Multiplikationsoperator 116 *7, Projekt 56 +, Additionsoperator 116 , Ant 1428 -, Subtraktionsoperator 116 .class 508, 1340 .java.policy 1409 .keystore 1413 .NET Remoting 1209 /, Divisionsoperator 116 //, Zeilenkommentar 96 =, Zuweisungsoperator 106 ==, Vergleichsoperator 197 ?, Generics 489 @author, JavaDoc 422 @category, JavaDoc 422 @code, JavaDoc 422 @Deprecated, Annotation 428, 554, 1339 @deprecated, JavaDoc 427 @deprecated, JavaDoc-Tag 555 @Documented, Annotation 1379 @exception, JavaDoc 422 @javax.management.MXBean 1395 @link, JavaDoc 422 @linkplain, JavaDoc 422 @literal, JavaDoc 422 @OneWay, Annotation 1226 @Override, Annotation 392, 411, 554, 1372 @param, JavaDoc 422 @Retention, Annotation 1379 @return, JavaDoc 422 @see, JavaDoc 422 @SOAPBinding, Annotation 1226 @SuppressWarnings, Annotation 554, 639, 1372 @Target, Annotation 1378 @throws, JavaDoc 422 @version, JavaDoc 422 @WebMethod, Annotation 1226 @WebParam, Annotation 1226 @WebResult, Annotation 1226 @WebService, Annotation 1226 @XmlElement, Annotation 903 @XmlRootElement, Annotation 903 [L 1345 ^, logischer Operator 123 ||, logischer Operator 123 …, variable Argumentlisten 226 1099, Port rmiregistry 1216 200, OK HTTP-Statuscode 1185 404, Not Found HTTP-Statuscode 1185 500, Internal Server Error 1185 80, HTTP-Port 1181 8080, HTTP-Port 1181 A Abrunden 309 abs(), Math 307 Absolutwert 176 Abstract Syntax Notation One 1413 Abstract Window Toolkit 913 abstract, Schlüsselwort 405–406 AbstractAction, Klasse 947 AbstractBorder, Klasse 950 AbstractButton, Klasse 944 AbstractTableModel, Klasse 1029 abstrakte Klasse 404 abstrakte Methode 406 Absturz der Ariane 5 131 Accelerator 995 accept(), ServerSocket 1174 Access Controller 1401 Accessibility 915 Accessible, Schnittstelle 1070 AccessibleObject, Klasse 1352, 1368 Action, Schnittstelle 947, 994 ACTION_PERFORMED, ActionEvent 930 Action-Command 946 ActionListener, Schnittstelle 933, 941–942 Activatable, Klasse 1224 Activation Daemon 1224 activation.jar 1198 Adapter 663 Adapter, MBean 1389 Adapterklasse 937 add(), Container 925, 957 addActionListener(), JButton 942 addItem(), JComboBox 1008 Addition 116 addKeyListener(), Component 953 addWindowListener() 936 Adjazenzmatrize 224 Adjustable, Schnittstelle 981 AdjustmentEvent, Klasse 980 AdjustmentListener, Schnittstelle 982 Adleman, Leonard M. 1415 Adler32, Klasse 830 Affine Transformation 1139 AffineTransform, Klasse 1139 Age, Response-Header 1186 Aggregationsfunktion 1336 Ahead-Of-Time Compiler 1436 1455 1371.book Seite 1456 Mittwoch, 17. Dezember 2008 1:39 13 Index AIFF 552 Aktor 185 aktueller Parameter 158 Al-Chwârismî, Ibn Mûsâ 637 AlgorithmParameterSpec, Schnittstelle 1419 Algorithmus 637 Alias 195 -alias, keytool 1413 allgemeines Semaphor 616 allowSystemProperty 1409 AllPermission 1410 AlphaComposite, Klasse 1111 AlreadyBoundException 1218 AM_PM, Calendar 731 Amigos 185 Android 1283 Anführungszeichen 111 angehäufte if-Anweisung 137 angepasster Exponent 300 Anmelde-/Versendesystem 1229 AnnotatedElement, Schnittstelle 1360, 1380 Annotation 554 Annotation, Schnittstelle 1381 Annotiert 1339 anonyme innere Klasse 496 Anpassung 445 Ant 1446 Antialiasing 1081, 1138 Anweisung 95 Anweisungssequenz 102 Anwendungsfall 185 Anwendungsfalldiagramm 185 ANY 860 Anzahl Einträge 1337 Apache Axis 1226 Apache Commons CLI 236 Apache Commons Codec 290 Apache Commons Collections 697 Apache Commons Compress 817 Apache Commons DBCP 1311 Apache Commons IO 755, 772 Apache Commons Logging 1385 Apache Commons Net 1180 Apache Harmony 67 Apache Jakarta HttpClient 1180 append(), StringBuffer/StringBuilder 261 1456 Appendable, Schnittstelle 261, 782 Apple, Look-and-Feel 1055 Applet 56, 66, 1268 AppletContext 552, 1272, 1274 appletviewer 1435 Applikations-Klassenlader 530 APRIL, Calendar 726 Ära 739 Arc2D, Klasse 1095–1096 Arcus-Funktionen 308 Area, Klasse 1097 AreaAveragingScaleFilter 1129 Argument der Funktion 158 ArithmeticException 117, 317, 469 arithmetische Typen 103 arithmetischer Operator 116 Array 215 Array, Klasse 1350 arraycopy(), System 228 Array-Grenze 61 ArrayIndexOutOfBoundsException 469 ArrayList, Klasse 375, 638, 643–644, 651, 659 ArrayStoreException 398, 664 Array-Typen 189 Artefakte 1131 Aschermittwoch 728 ASCII-Zeichen 88 asin(), Math 308 asList(), Arrays 233, 662, 672 ASN.1 1413 assert, Schlüsselwort 479 Assertion 479 AssertionError 479 Assignment 106 assistive technology 1069 Assoziation 373 assoziativer Speicher 644 Astronomie 713 Atlantic City 64 atomar 587 atomare Komponente 924 Atomuhr 714 Attribut 183, 856 Attributinhalte 894 AU 552 AudioClip, Klasse 552 aufgeschobene Initialisierung 165 Aufrunden 309 AUGUST, Calendar 726 Ausdruck 115 Ausdrucksanweisung 100 Ausführungsstrang 557 Ausgabeformatierung 714 Ausnahmenbehandlung 60 Ausprägung 183 Ausprägungsspezifikation 185 Ausprägungsvariable 189 ausschließendes Oder 123 äußere Schleife 145 Auswahlmenü 1007 Auszeichnungssprache 855 authentication required 1153 Authenticator, Klasse 1159 Authentifizierung 1412 Autoboxing 208 Auto-Commit 1328 automatische Typanpassung 127, 385 Autorisierung 1412 await(), Condition 606 AWT 913 AWTEvent, Klasse 930 AWTEventListener, Schnittstelle 1069 AWT-Event-Thread 937, 1063 AWT-Input 579 AWT-Motif 579 B barrier 576 Base64, Encoding 290, 1197 baseline 1085 Basic Multilingual Plane 88 BasicStroke, Klasse 1112 BatchUpdateException 1321 Beautifier 1451 bedingte Compilierung 61 Bedingungsoperator 125, 176 Behinderung, Accessibility 915 Beispielprogramme der Insel 49 benutzerdefinierter Klassenlader 531 Beobachter-Pattern 436 Berkeley-Socket-Interface 1168 Berners-Lee, Tim 1181 1371.book Seite 1457 Mittwoch, 17. Dezember 2008 1:39 13 Index Betrag 307 BevelBorder, Klasse 950 Bezeichner 90 Bézier-Kurve 1097 Bias 300 biased exponent 300 bidirektionale Beziehung 373 BigDecimal 316 BigDecimal, Klasse 322 Big-Endian 318 BigInteger, Klasse 316 Bilder skalieren 1127 Bildlaufleiste 978 binäre Suche (binary search) 704 binärer Operator 115 binäres Semaphor 616 Binary Floating-Point Arithmetic 300 binarySearch(), Arrays 233, 669 bind(), Registry 1218 Binnenmajuskel 91 bin-Pfad 73 biometrisches System 1412 Birrel 1207 Bitmenge 709 BitSet, Klasse 709 Bitttage 728 Bitweise Manipulation 709 bitweises Exklusives Oder 170 bitweises Komplement 125 bitweises Oder 125, 170 bitweises Und 125, 170 bitweises Xor 125 Block 113 BlockingQueue, Schnittstelle 683 Block-Tag 424 boolean, Datentyp 103 Boolean, Klasse 207 Bootstrap-Klassen 529 Bootstrap-Klassenlader 530 Border, Schnittstelle 949 BorderFactory, Klasse 951 BorderLayout, Klasse 965, 968 Bound Properties 446 bound properties 447 BoundedRangeModel, Schnittstelle 980 Boxing 208 BoxLayout 977 BoxLayout, Klasse 964, 977 break 148–149 BreakIterator, Klasse 285 brighter(), Color 1106 Brightness 1107 Bruch 325 Bruchzahl 300 Bucket, Hash-Tabelle 695 BufferedImage, Klasse 1124 BufferedInputStream, Klasse 774, 800 BufferedOutputStream 798 BufferedReader 774 BufferedReader, Klasse 800 BufferedWriter 798 build.xml 1447 ButtonGroup, Klasse 988 Byte 169 byte 299 byte, Datentyp 108 Byte, Klasse 207 ByteArrayInputStream, Klasse 797 ByteArrayOutputStream, Klasse 796 Bytecode 57 Bytecode Verifier 1401 BZip2 817 C C 55 C# 208 C++ 55, 182 Cache, Bilder 1133 Cache-Control 1186 CachedRowSet, Schnittstelle 1322 CachedRowSetImpl, Klasse 1323 CAG (Constructive Area Geometry) 1097 Calendar, Klasse 714, 724 Call by Reference 197 Call by Value 158, 197 Callable, Schnittstelle 583 CallableStatement, Schnittstelle 1311 CANON_EQ, Pattern 272 Canvas 1116 CAP_BUTT, BasicStroke 1112 CAP_ROUND, BasicStroke 1112, 1115 CAP_SQUARE, BasicStroke 1113 CardLayout, Klasse 965 Caret 1020 CASE_INSENSITIVE, Pattern 272 CASE_INSENSITIVE_ORDER, String 673 Cast, casten 125–126 catch 455 CDATA 860 CDC (Connected Device Configuration) 1284 ceil(), Math 309 CERN 1181 Certificate Authority, CA 1412 ChangeListener, Schnittstelle 979 char, Datentyp 103, 111 Character, Klasse 237 CharArrayReader, Klasse 795 CharArrayWriter, Klasse 794 CharSequence, Schnittstelle 243, 429 Checkbox, Klasse 985 checked exception 470 checkError() 785 Checksum, Schnittstelle 827 choice box 1007 Christi Himmelfahrt 728 Cipher, Klasse 1420 CipherInputStream, Klasse 1420 CipherOutputStream, Klasse 1420 class literal 508 Class Loader 528 class method 97 Class, Klasse 508, 1340 class, Schlüsselwort 327, 1348 ClassCastException 387, 469 ClassLoader, Klasse 531, 1403 ClassNotFoundException 1341–1342 CLASSPATH 530, 1437, 1443 -classpath 530, 1437 Class-Path-Wildcard 1438 Client 1209 Client-Server-Kommunikation 1173 Clip-Bereich 1076 Clipboard 997, 1056 Clipboard, Klasse 1056 Clipper 1415 clipping 1102 Clipping-Bereich 1135 1457 1371.book Seite 1458 Mittwoch, 17. Dezember 2008 1:39 13 Index clone() 514 clone(), Arrays 228 CloneNotSupportedException 515, 517 Closeable, Schnittstelle 776 closePath(),Path2D 1100 Cloudscape 1292 Clustering, Hash-Tabelle 695 cmd.exe 542 code point 88 Codebase 1408 CollationKey, Klasse 267 Collator, Klasse 264, 669, 673 Collection, Schnittstelle 639–640 Collection-API 637 Collections, Klasse 638 Color, Klasse 1103 com.sun.image.codec.jpeg, Paket 1117 com.sun.net.httpserver, Paket 1187 com4j 1433 combo box 1007 ComboBoxModel, Schnittstelle 1007 Command Model 933 Command not found 73 command.com 542 Comparable, Schnittstelle 414, 667 Comparator, Schnittstelle 667 compare(), Comparator 668 compareTo(), Comparable 668 compareTo(), String 246 compareToIgnoreCase(), String 246 Compilation Unit 96, 213 Compilationseinheit 96, 213 Compiler 72 Component, Klasse 948 ComponentEvent, Klasse 932 ComponentListener, Schnittstelle 956 ComponentUI, Klasse 1006 Composite Pattern 957 Composite, Schnittstelle 1111 CompoundBorder, Klasse 950 concat(), String 250 CONCUR_UPDATABLE, ResultSet 1318, 1323 ConcurrentHashMap, Klasse 707 1458 ConcurrentLinkedQueue, Klasse 707 ConcurrentMap, Schnittstelle 707 ConcurrentModificationException 651 ConcurrentSkipListMap, Klasse 644 ConcurrentSkipListSet, Klasse 707 Condition, Schnittstelle 606 Connected Limited Device Configuration (CDC) 1284 Connection 1186 Connection, Schnittstelle 1302 Connector/J 1293 Connector-Level 1389 Console, Klasse 792 const, Schlüsselwort 166 const-korrekt 166 Constraint-Properties 446 Constructor, Klasse 1358 Contact Port 1169 Container 637 contains(), Shapre 1101 contains(), String 243 containsKey(), Map 688 Content-Encoding 1187 contentEquals(), String 263 Content-Handler 1153, 1156 ContentHandler, Schnittstelle 877 Content-Pane 925 continue 148, 150 Controller 1005 Copy-Constructor 514 Copy-Konstruktor 359 copyOf(), Arrays 230 copyOfRange(), Arrays 230 CopyOnWriteArrayList, Klasse 652, 709 CopyOnWriteArraySet, Klasse 709 CORBA 1222 CORBA (Common Object Request Broker Architecture) 1209 cos(), Math 308 cosh(), Math 308 Cosinus 308 -cp 530, 1437–1438 Cp037 288 Cp850 288 CRC32, Klasse 828 CREATE TABLE 1337 createCompatibleImage(),GraphicsConfiguration 1124 createGraphics(), BufferedImage 1124 createRegistry(), LocateRegistry 1215 createScreenCapture(), Robot 1073 createStatement(), Connection 1311 Crimson 867 Cryptographic Service Providers 1402 CSV (Comma-separated Values) 852 CubicCurve2D, Klasse 1095 currency, Datentyp 111 currentThread(), Thread 566 currentTimeMillis(), System 540 curveTo(), GeneralPath 1098 custom tag library 1247 Customization 445 CVM 1284 cxxwrap 1433 CyberNeko 911 CyclicBarrier, Klasse 576 D -D 538 Dämon 578 dangling pointer 363 Dangling-Else-Problem 135 darker(), Color 1106 dash attribute 1111 Data Hiding 337 Data Query Language 1335 database management systems 1291 DatabaseMetaData, Schnittstelle 1332 DataFlavor, Klasse 1058 Datagramm 1190 DatagramPacket, Klasse 1191 Datagram-Socket 1189 DatagramSocket, Klasse 1189–1190 DataInput, Schnittstelle 764, 833 1371.book Seite 1459 Mittwoch, 17. Dezember 2008 1:39 13 Index DataInputStream, Klasse 805 DataOutput, Schnittstelle 764, 833 DataOutputStream, Klasse 805 Datapoint 57 DataSource 1308 DataSource, Schnittstelle 1308 DataTruncation, Klasse 1320 DATE, Calendar 730 Date, General Header Fields 1186 Date, Klasse 714, 722 DateFormat, Klasse 294, 714, 735, 740 Dateiauswahldialog 1051 Dateinamenendungen 247 Dateiverknüpfung 749 Datenbankausprägung 1291 Datenbankschema 1291 Datenbankverbindung 1306 Datenbankverwaltungssystem 1291 Datenbasis 1291 Datenkompression 815 Datenstrukturen 637 Datentyp 102 Datenzeiger 765 Datumswerte 714 DAY_OF_MONTH, Calendar 730 DAY_OF_WEEK, Calendar 731 DAY_OF_WEEK_IN_MONTH, Calendar 731 DAY_OF_YEAR, Calendar 731 dBase, JDBC 1302 DBMS 1291 -Dcom.sun.management. jmxremote 1392 Deadlock 558, 603 DECEMBER, Calendar 726 DecimalFormat, Klasse 296 Decrement 125 default 139 default, Schlüsselwort 1377 DefaultHandler, Klasse 877–878 Default-Konstruktor 192, 356 DefaultListCellRenderer, Klasse 1015 DefaultListModel, Klasse 1015 DefaultListModel, Schnittstelle 1012 DefaultMutableTreeNode, Klasse 1041 Default-Paket 212 defaultReadObject(), ObjectInputStream 840 DefaultTableCellRenderer, Klasse 1034 DefaultTableModel, Klasse 1032 defaultWriteObject(), ObjectOutputStream 840 DEK 315 Dekonstuktor 520 Dekoration 923 delegate 76 Delegation Model 933 delete() 60 delete(), StringBuffer/StringBuilder 262 DELETE, HTTP-Methode 1182 Delimiter 276, 284 Dependency Injection 443 Deployment-Descriptor 1236 deprecated 426, 1436 -deprecation 427 Deque 682 Deque, Schnittstelle 643 Derby 1292 dereferenced-Meldung 1220 Dereferenzierung 177 deriveFont(), Font 1088 DES (Data Encryption Standard) 1418 Design-Pattern 436 Desktop, Klasse 544 Dezimalpunkt 300 DGC 1220 Dialog 1048–1049 Digitale Unterschriften 1414 DirectX 76 Distributed Component Object Model (DCOM) 1209 distributed GC 1220 Dividend 116 Divider 961 Division 116 Divisionsoperator 116 Divisor 116 -Djava.rmi.dgc.leaseValue 1220 -Djava.rmi.server.codebase 1222 -Djava.security.debug 1406 -Djava.security.manager 1407 -Djava.security.policy 1409 -Djdbc.drivers 1303 dll-Dateien 1427 DnD, Drag & Drop 1060 DNS 1145, 1278 Doc Comment 421 Doclet 425, 1340 DOCTYPE 861 Document Object Model 866 Document Type Definition 859 Document, Klasse 883 DocumentBuilderFactory 868 Dokumentationskommentar 421 DOM 866 DOM Level 3 XPath 897 Domain Name Service 1145 Domain Name System 1190 Domain-Name-Server 1278 DOMBuilder, Klasse 884 Doppel-Pufferung, Swing 961 DOS-Programme 542 DOTALL, Pattern 272 double 300 double, Datentyp 103 Double, Klasse 207 Double-Buffering, Swing 961 doubleToLongBits(), Double 520 do-while-Schleife 142 DQL 1335 Drag & Drop 915, 1060 draw(Shape), Graphics2D 1094 draw3DRect(), Graphics 1106 drawImage(), Graphics 1119 drawLine(), Graphics 1081 drawString(), Graphics 1085 Drehfeld 1016 DriverManager, Klasse 1303, 1305 Drucken 1140 DSAPrivateKeySpec, Klasse 1420 DSN 1190 DST_OFFSET, Calendar 731 DTD 859 DTDHandler, Schnittstelle 877 Durchschnittswert 1336 Durchschuss 1092 -Duser.timezone 727 dynamic invocation 1368 dynamic linked libraries 1427 Dynamic MBeans 1389 Dynamische Datenstruktur 637 1459 1371.book Seite 1460 Mittwoch, 17. Dezember 2008 1:39 13 Index Dynamischer Methodenaufruf 1370 dynamisches Layout 924 E -ea 480, 1438 EBCDIC-Zeichensatz 288, 809 Echozeichen 1020 Eclipse 75 Eclipse Translation Packs 77 EclipseME 1286 ECML 1243 Editor-Kit 1024 Eigenschaft 445 einfache Eigenschaft 446 einfaches Hochkomma 111 Einfachvererbung 380 eingeschränkte Eigenschaft 446 einstelliger Operator 115 Electronic Commerce Modeling Language 1243 Element suchen 703, 705 Element, Klasse 886 Element, XML 856 elementare Anweisung 102 Elementklasse 492 ElementType, Aufzählung 1378 Ellipse2D, Klasse 1095 else, Schlüsselwort 135 Elternklasse 378 EmptyBorder, Klasse 950 EmptyStackException 470, 681 enable assertions 480 encoding 288 end caps 1112 Endlosschleife 141 endorsed-Verzeichnis 529, 535 Endpoint, Klasse 1227 endsWith(), String 247 ENGLISH, Locale 716 ensureCapacity(), List 661 Enterprise Edition 68 Entfernte Methoden 1207 Entfernte Methodenaufrufe 1207 Entfernte Objekte 1213 Entität 858 Entity 1186 Entity-Body 1186 Entity-Header 1184, 1186 EntityResolver, Schnittstelle 877 1460 entrySet(), Map 691 Entwurfsmuster 436 Enum, Klasse 522 enum, Schlüsselwort 352, 479 Enumeration, Schnittstelle 647 Enumerator 647 EnumMap, Klasse 435 EOFException 764 equals() 510–511, 1150 equals(), Arrays 229 equals(), Object 198, 510 equals(), Point 199 equals(), String 263 equalsIgnoreCase(), String 245–246 ERA, Calendar 730 Ereignis, GUI 930 Ereignisauslöser 933 Ereignisschlange 1063 Ereignisse 445 Ergebnistyp 153 erreichbar, catch 465 erreichbarer Quellcode 159 Error, Klasse 466, 470 ErrorHandler, Schnittstelle 877 erweiterte for-Schleife 220 Erweiterungs-Klassenlader 530 Escape-Sequenz 111 Escape-Zeichen 243 Escher, Maurits 179 EtchedBorder, Klasse 950 Eulersche Zahl 307 Euro-Zeichen 92 Event Queue 1063 Event-Dispatching-Thread 937 EventFilter, Schnittstelle 873 EventListener, Schnittstelle 441 EventObject, Klasse 440 Eventquelle 933 EventQueue, Klasse 1063, 1066, 1068 Events 445 Event-Source 933 Excelsior JET 1437 Exception 60 Exception, Klasse 466 Exchanger, Klasse 576 exec(), Runtime 541 executeQuery(), Statement 1312 executeUpdate(), Statement 1312 Executor, Schnittstelle 580 ExecutorService, Schnittstelle 581 Exemplar 183 Exemplarinitialisierer 369 Exemplarinitialisierungsblock 499 Exemplarvariable 189, 344 exit(), System 236 EXIT_ON_CLOSE, JFrame 920 Exklusives Oder 123 explizite Typanpassung 127 explizite Typumwandlung 387 explizites Klassenladen 529 Explorer 66 Exponent 300 Exponentialwert 311 exportObject(), UnicastRemoteObject 1218 expression 115 extend, Schlüsselwort 378 extends, Schlüsselwort 417 eXtensible Markup Language 856 Extension-Verzeichnis 529 F Fabrik 436 Fabrikmethode 365 Facelets 1266 Factory 436 Faden 557 Fakultät 321 Fall-Through 139 false 103 Farbe 1103 Farbmodell 1107 Farbsättigung 1107 FEBRUARY, Calendar 726 Federal Information Processing Standards Publication 1415 Fee, die gute 167 Fehler 466 Fehlercode 455 Feld 215 Feldtypen 189 fencepost error 144 Fenster 918 Fenstermenü 991 Field, Klasse 1351–1352, 1362 FIFO-Prinzip 643 File, Klasse 744 1371.book Seite 1461 Mittwoch, 17. Dezember 2008 1:39 13 Index file.encoding 809 File.separatorChar 745 FileChannel, Klasse 759 FileDescriptor, Klasse 772 FileFilter, Klasse 1051 FileFilter, Schnittstelle 753 FileInputStream, Klasse 770 FilenameFilter, Schnittstelle 753 FileNotFoundException 456, 467 FileOutputStream, Klasse 769 FilePermission 1410 FileReader, Klasse 768 FileWriter, Klasse 767 fill(), Arrays 230 fill(), Collections 702 fillInStackTrace(), Throwable 475 FilteredRowSet, Schnittstelle 1323 FilterInputStream, Klasse 805 FilterOutputStream, Klasse 805 FilterReader, Klasse 805 FilterWriter, Klasse 805 final 165 final, Schlüsselwort 345, 349, 395, 1348 finale Klasse 395 finale Methode 395 finale Werte 371 finalize() 520 Finalizer 520 finally, Schlüsselwort 462 findClass(), ClassLoader 531 Fingerabdruck 1414 FIPS 1415 Firewall 1223 First in, First out 643 First Person, Inc. 56 Fitts’s Law 966 Five-Nine System 1411 flache Kopie 694 flache Kopie, clone() 517 flache Objektkopie 517 Flaubert, Gustave 1435 Fließkommazahl 102, 110, 300 Fließpunktzahl 300 float, Datentyp 103, 300 Float, Klasse 207 floatToIntBits(), Float 520 floor(), Math 309 FlowLayout, Klasse 964, 966 Fluchtsymbole 111 Flushable, Schnittstelle 777 FocusEvent, Klasse 932 FocusListener, Schnittstelle 952 Fokus 951 Font, Klasse 926, 1086 FontFormatException 1090 FontMetrics, Klasse 1090 FontRenderContext, Klasse 1092 formaler Parameter 157 formaler Typ-Parameter 483 format() 785 format(), Format 294 format(), String 291 Format, Klasse 294 Formatierungsanweisungen 736 Formatierungsstrings 739–740 Format-Spezifizierer 291 Format-String 291 Formatter, Klasse 292 forName(), Klasse 1340 for-Schleife 143 Fortschaltausdruck 144 Fortschrittsbalken 989 Fragezeichenoperator 115 Frame 918 Frame, Klasse 920 FRANCE, Locale 716 free() 60 FRENCH, Locale 716 Fronleichnam 728 FULL, DateFormat 737 Füllfaktor 695 Füllmuster 1115 Füllung, Paint 1102 Funktion 155 Funktionsaufruf 98 Funktionszeiger 433 G Ganzzahl 102 ganzzahliger Datentyp 108 Garbage-Collector 60, 188, 192, 355, 362 Gauß-Normalverteilung 316 GC 60, 355 GC, Garbage-Collector 362 GCC 1427 gcj 1436 gebundene Eigenschaft 446–447 gebundene Property 960 Geburtsdatum 733 Geburtstagsparadoxon 1415 gegenseitiger Ausschluss 587, 591 Geltungsbereich 114 General Header 1184 GeneralPath, Klasse 1097 Generic Connection Framework 1284 Generics 482 generischer Typ 482 -genkey 1413 geordnete Liste 643 geprüfte Ausnahme 470 GERMAN, Locale 716 GERMANY, Locale 716 geschachtelte Alternativen 137 geschachtelte Ausnahme 475 geschachtelte Top-Level-Klasse 491 get(), List 652 get(), Map 687 GET, HTTP-Methode 1182 getBytes(), ResultSet 1317 getBytes(), String 288 getChars(), String 249 getColumnClass(), TableModel 1029 getColumnCount(), TableModel 1029 getColumnName(), TableModel 1029 getConnection(), DriverManager 1303 getContentPane(), JFrame 926 getDefaultToolkit(), Toolkit 918 getenv(), System 540 getInstance(), Calendar 726 GET-Methode 1161, 1181 getPriority(), Thread 577 getProperties(), System 536 getProperty(), Properties 697 getResource() 778 getResourceAsStream() 778 getRowCount(), TableModel 1029 getStackTrace(), Thread 477 GetStringUTFChars 1429 getTableCellEditorComponent(), TableCellEditor 1036 Getter 339 1461 1371.book Seite 1462 Mittwoch, 17. Dezember 2008 1:39 13 Index getText(), JLabel 926 getText(), JTextComponent 1019 getTimeInMillis(), Calendar 729 getValueAt(), TableModel 1029 ggT 317 GIF 1116 GlassFish 68 Glass-Pane 1046 Gleichheit 199 Gleitkommazahl 300 globale Variable 114 Glyphe 1085 GMST 713 GNU Classpath 67 Gosling, James 55 goto, Schlüsselwort 151 GradientPaint 1102 Grammatik 87 grant-Anweisung 1408 Granularität, Threads 578 Graphics Interchange Format 1116 Graphics, Klasse 1076 Graphics2D, Klasse 1076 GraphicsEnvironment, Klasse 1089 greedy operator, regulärer Ausdruck 274 Green-OS 56 Green-Projekt 55 Green-Team 56 Greenwich Mean Sidereal Time 713 GregorianCalendar, Klasse 724, 726 Gregorianischer Kalender 724 GridBagConstraints, Klasse 972 GridBagLayout, Klasse 965, 972 GridLayout, Klasse 965, 970 Groovy 546 Groß-/Kleinschreibung 91, 247, 250 Größter gemeinsamer Teiler 317 GroupLayout, Klasse 965 Grundlinie 1085 Grundton 1107 Gruppenfunktion 1336 guard 611 guarded action 611 guarded wait 611 GUI-Builder 1339 1462 gültig, XML 859 Gültigkeitsbereich 114 gzip 1187 GZIPInputStream, Klasse 817 GZIPOutputStream, Klasse 817 H Halbierungssuche 704 Hashcode 517, 694 hashCode(), Object 517 Hash-Funktion 517, 694 HashMap, Klasse 644, 684 HashSet, Klasse 643, 676 Hash-Tabelle 684 Hashtable, Klasse 684 Hash-Verfahren 1414 Hash-Wert 517 Hauptklasse 96 HEAD, HTTP-Methode 1182 Header-Datei 61, 1426 HEAD-Methode 1182 Heap 188 heavyweight component 914 Helligkeit 1107 hexadezimale Zahl 108 Hexadezimalform 108 Hibernate 1337 HierarchyEvent, Klasse 932 high-level event 932 Hilfsklasse 364 Hoare, C. A. R. 590 Horcher 933 Host 1145 Host-Adresse 1163 Hostname 1145 HotJava 56 HOUR, Calendar 731 HOUR_OF_DAY, Calendar 731 HP 58 HSB 1107 HSQLDB 1292 HTML 855, 1181 HTML Converter 1270 HTML-Formular 1243 HTTP 1146, 1181 HTTP 0.9 1184 HTTP 1.0 1181 http.proxyHost 1152 http.proxyPort 1152 HttpClient 1180 HttpHandler, Schnittstelle 1188 HTTP-Header 1155 https.ProxyHost 1153 https.ProxyPort 1153 HttpServer, Klasse 1187 Hue 1107 Hyperbolicus-Funktionen 308 Hypertext Transfer Protocol 1146, 1181 I i18n.jar 529 IBM 1207, 1339 ICCCM 1057 IcedTea 65 Ich-Ansatz 183 ICMP 1204 ICO 1117 Icon, Schnittstelle 928 Identifizierer 90 Identität 199, 510 identityHashCode(), System 519 IdentityHashMap, Klasse 691 IEEE 754 118, 300 IEEE-754 110 IEEEremainder(), Math 312 IETF 1145–1146 if, Schlüsselwort 133 IFC 915 if-Kaskade 137 ignorierter Statusrückgabewert 457 IIOP 1223 IllegalArgumentException 470–471, 473 IllegalMonitorStateException 470, 609, 615 IllegalThreadStateException 562 Image, Klasse 1116 ImageIcon, Klasse 928 ImageIO 1117 ImageIO, Klasse 1117 ImageObserver, Schnittstelle 1120 Imagination 55 immutable 240 imperative Programmiersprache 95 implizites Klassenladen 529 import, Schlüsselwort 193, 212 1371.book Seite 1463 Mittwoch, 17. Dezember 2008 1:39 13 Index Increment 125 Index 215, 217 Indexed Properties 446 indexierte Variablen 217 indexOf(), String 243 IndexOutOfBoundException 219 indizierte Eigenschaft 446 InetAddress 1164 InetAddress, Klasse 1164 InetSocketAddress, Klasse 1172 infinity 301 InheritableThreadLocal, Klasse 624 Inline-Tag 424 innere Klasse 490 innere Schleife 145 InputMethodEvent, Klasse 932 InputMismatchException 283 InputStream, Klasse 777 InputStreamReader, Klasse 289, 810 InstallShields 1280 instance method 97 instanceof, Schlüsselwort 408, 1346 InstantiationException 384, 1362 Instanz 183 Instanzinitialisierer 369 Instanzvariable 189 instrumentalisierte Objekte 1389 int 299 int, Datentyp 103, 108 Integer, Klasse 207 integraler Typ 103 Integritätsprüfung von Nachrichten 1415 Interaktionsdiagramm 186 Inter-Client Communication Convention Manual 1057 Interface 64, 404, 409 interface, Schlüsselwort 409 Interface/Implementation-Pair 1029 Interface-Typen 189 intermediate container 961 internal frame 1046 Internationalisierung 718 internes Fenster 1046 Internet Control Message Protocol 1204 Internet Engineering Task Force 1145–1146 Internet Explorer 66 Internet Foundation Classes 915 Internet Protocol 1146 Internet-Media-Types 1186 Inter-ORB Protocol 1223 Interrupt 571 interrupt(), Thread 571, 614 interrupted(), Thread 572 InterruptedException 544, 568, 572, 607, 614 InterruptedIOException 1175 Intersolv 1298 Intervall 148 Introspection 445, 1339 invalidate(), Component 959 InvalidClassException 832, 843 Invarianz 488 Inversion of Control 443 Invocation-API 1423 InvocationEvent, Klasse 1066 InvocationTargetException 1362 invoke(), Method 1368 invokeAndWait(), SwingUtilities 1065 invokeLater(), SwingUtilities 991, 1065 Invoker-Servlet 1262 IoC-Container 443 IOException 456, 467 IP 1146 IP-Adressen 1163 ipconfig 1204 iPhone 58, 1283 IP-Nummer 1145 isCellEditable(), TableModel 1029, 1031 isInterrupted(), Thread 571 is-Methode 339 isNaN(), Double/Float 302 ISO 8859-1 88 ISO Country Code 715 ISO Language Code 715 ISO-639-Code 715 ISO-Abkürzung 717 Ist-eine-Art-von-Beziehung 405 ITALIAN, Locale 716 ItemEvent, Klasse 985 ItemListener, Schnittstelle 985–986, 989, 1010 ItemSelectable, Schnittstelle 986 itemStateChanged(), ItemListener 986 Iterable, Schnittstelle 431, 646 Iterator 647 Iterator, Schnittstelle 431, 647 J J/Direct 76 J2EE 68 J2ME 68 JAAS 1402, 1411 Jacobson, Ivar 185 Jahr 730, 739 JAI 1117 Jakarta Commons Math 325 JANUARY, Calendar 726 JAPAN, Locale 716 JAPANESE, Locale 716 Jar 1439 jar, Dienstprogramm 1435, 1440 -jar, java 1443 Jar-Datei 1157 JarFile, Klasse 827, 1158 jarsigner 1435 jarsigner, Dienstprogramm 1414 JarURLConnection, Klasse 1158 Java 56, 1435 Java 2D API 915 Java 2D-API 1080 Java 6 Update 10 68 Java Accessibility 1070 Java API for XML Parsing 867 Java Authentication and Authorization Service 1411 Java Authentication and Authorization Service (JAAS) 1402 Java Cryptography Architecture 1401 Java Cryptography Extension (JCE) 1401 Java Database Connectivity 1297 Java DB 1292 Java Document Object Model 866 Java Foundation Classes 915 Java Foundation Classes (JFC) 1080 Java Image Management Interface 1117 1463 1371.book Seite 1464 Mittwoch, 17. Dezember 2008 1:39 13 Index Java Management Beans 1390 Java Management Extensions 1389 Java Message Service 1229 Java Native Interface 1423 Java Network Launcher Protocol 1281 Java Object Serialization 831 Java Persistence API (JPA) 1337 Java Runtime Environment 1442 Java Secure Socket Extension 1153, 1205 Java Service Wrapper 1452 Java Virtual Machine 57 Java Virtual Machine Process Status Tool 1444 Java Virtual Machine Statistics Monitoring Tool 1444 java, Dienstprogramm 1437 java, Paket 193 java.awt.event, Paket 930 java.awt.geom, Paket 1081 java.beans, Paket 847 java.endorsed.dirs 535 java.ext.dirs 530 java.lang.ref, Paket 1289 java.naming.factory.initial 1310 java.net, Paket 1145 java.nio.charset, Paket 289 java.prof 1438 java.rmi.server.codebase 1222 java.rmi.useCodebaseOnly 1222 java.security 1409 java.text, Paket 285 java.util.concurrent, Paket 708 java.util.concurrent.atomic, Paket 596, 621 java.util.concurrent.lock, Paket 591 java.util.jar, Paket 816, 1440 java.util.regex, Paket 269 java.util.zip, Paket 816–817 JavaBean 445 Java-Beans 1339 JavaBeans Activation Framework 1198 JavaBeans Persistence 831 javac, Dienstprogramm 1435 JavaCompiler 1436 Java-Cryptography-API 1401 JavaDoc 421 1464 javadoc 1435 javadoc, Dienstprogramm 423 JavaDoc-Tag 1339 javah, Dienstprogramm 1425 javah-Task, Ant 1425 Java–Look-and-Feel 1054 JavaMail API 1197 JavaScript 64, 1279 Java-Security-Model 59 JavaServer Faces 1266 JavaServer Page 1232 JavaSoft 56 javaw, Dienstprogramm 1439 javax, Paket 193, 507 javax.crypto, Paket 1402 javax.jws, Paket 556, 1226 javax.microedition.midlet, Paket 1289 javax.net, Paket 1205 javax.script, Paket 545 javax.sound 553 javax.sound, Paket 552 javax.sound.midi, Paket 553 javax.swing, Paket 919 javax.swing.text, Paket 1018 javax.swing.undo, Paket 1061 javax.xml.bind.annotation, Paket 903 javax.xml.ws, Paket 556 Jawin 1433 JAXB 902 JAXBContext, Klasse 904 Jaxen 883, 897 JAXP 867 JAX-WS 1226 JBP, JavaBeans Persistence 831 JButton, Klasse 941, 944 JCA 1401 JCheckBox, Klasse 944 JCheckBoxMenuItem, Klasse 993 jCIFS 760 JColorChooser, Klasse 1073 JComboBox, Klasse 1007 jconsole, Dienstprogramm 1392 jdb 1435 JDBC 1297 JDBC 1.0 1299 JDBC 2.0 API 1299 JDBC 2.0 Optional Package API 1299 JDBC 2.1 core API 1299 jdbc.drivers 1303 JDBC-ODBC-Bridge-Treiber 1298 JDBCRowSet, Schnittstelle 1322 JDesktopPane, Klasse 1046 JDialog, Klasse 1049 JDOM 866 JDOMResult, Klasse 901 JDOMSource, Klasse 901 JEditorPane, Klasse 1017, 1024 Jetty 1234 JFC 915 JFileChooser, Klasse 1051 JFormattedTextField, Klasse 1017, 1021 JFrame, Klasse 919, 1077 JGoodies Looks 1056 Jimi 1117 Jindent 1452 JIT 58 JLabel, Klasse 924 jlGui 553 JList, Klasse 1011 jmap, Dienstprogramm 1445 JMenu, Klasse 992–993 JMenuBar, Klasse 992 JMenuItem, Klasse 944, 993 JMS 1229 JMX 1389 JMXConnector, Schnittstelle 1399 JMXConnectorServer, Klasse 1398 JNDI 1308 jndi.properties 1309 JNI 1423 Joda Time 742 Joe Palrang 55 join(), Thread 574 JOIN_BEVEL, BasicStroke 1113 JOIN_MITER, BasicStroke 1113 JOIN_ROUND, BasicStroke 1113 JoinRowSet, Schnittstelle 1323 JOptionPane, Klasse 458, 1049 JOS, Java Object Serialization 831 JPA, Java Persistence API 1337 JPanel, Klasse 961 JPasswordField, Klasse 1017, 1020 JPEG 1116 JPopupMenu, Klasse 1001 1371.book Seite 1465 Mittwoch, 17. Dezember 2008 1:39 13 Index JProgressBar, Klasse 989, 1065 jps, Dienstprogramm 1392, 1444 JRadioButton, Klasse 944, 988 JRadioButtonMenuItem, Klasse 993 JRE 1442 JRMP (Java Remote Method Protocol) 1223 JRootPane, Klasse 1046 jrunscript, Dienstprogramm 545 JScrollBar, Klasse 961, 980 JScrollPane 962 JScrollPane, Klasse 961, 1013, 1024, 1028 JSlider, Klasse 978 JSmooth 1437 JSP 1232 JSpinner, Klasse 1016 JSplitPane, Klasse 961, 964 JSR 223 545 JSSE 1153 jstack, Dienstprogramm 1445 jstat, Dienstprogramm 1444 JSTL 1247 JTabbedPane, Klasse 961–962 JTable, Klasse 1027 JTableHeader, Klasse 1039 JTextArea, Klasse 1017 JTextComponent, Klasse 1019 JTextField, Klasse 1017–1018 JTextPane, Klasse 1017 JTidy 910 JToggleButton, Klasse 944, 946 JToolBar, Klasse 961, 998 JTree, Klasse 1041 JULY, Calendar 726 JUNE, Calendar 726 Just-in-Time Compiler 58 JViewport, Klasse 962 JWindow, Klasse 1048 JXPath 912 K Kanonischer Pfad 746 kanonischer Pfad 746 Kardinalität 373 Kaufmännische Rundung 309 kaufmännische Rundung 309 Keller 680 Kerberos 1412 Key 644 Key, Schnittstelle 1418 KeyEvent, Klasse 932, 953 KeyGenerator, Klasse 1419 KeyListener, Schnittstelle 953 KeyPairGenerator, Klasse 1419 KeySelectionManager, Schnittstelle 1010 keySet(), Map 691 Keystore 1414 keytool, Dienstprogramm 1413, 1435 Kindklasse 378 Klammerpaar 155 Klasse 183, 1129 Klassendiagramm 185 Klasseneigenschaft 344 Klassenhierarchie 378 Klasseninitialisierer 368 Klassenkonzept 64 Klassenlader 59, 528, 1403 Klassen-Literal 508 Klassenmethode 97, 156 Klassenobjekte 508 Klassentypen 189 Klassenvariable, Initialisierung 368 Klonen 514 Knuth, Donald E. 315 Kodierung, Zeichen 288 Kollision, Signatur 1415 Kollisionsangriff 1415 Kommandozeilenparameter 235 Kommaoperator 146 Kommentar 96 Komplement 170 komplexe Zahl 325 Kompressionsfunktion 1415 Kompressionsstufe 1131 Komprimierungsfaktor 1116 Konkatenation 240 konkrete Klasse 405 konstante Zeichenkette 242 Konstantenpool 255 Konstruktive Flächengeometrie 1097 Konstruktor 192, 355 Konstruktoraufruf 187 Konstruktoren in Vererbung 381 Konstruktorweiterleitung 381 Kontextmenü 1000 Kontraktionsfunktion 1415 Kontrollfeldgruppe 988 Kontrollstrukturen 133 koordinierte Weltzeit 714 Kopf 153 Kopfdefinition 858 KOREA, Locale 716 KOREAN, Locale 716 kovarianter Rückgabetyp 396 Kovarianz bei Arrays 397 Kreiszahl, Pi 307 kritischer Abschnitt 587 kryptografische Prüfsumme 1415 ktoolbar, Dienstprogramm 1285 Kubische Kurvensegmente 1097 Kurve 1097 Kurzschlussoperator 124 L lastIndexOf(), String 244 Last-in-First-out 680 Latin-1 809 Laufwerksname 750 Laufzeitumgebung 57 launch4j 1437 LayoutManager, Schnittstelle 966 lazy activation 1224 LCDUI 1289 LD_LIBRARY_PATH 1429 leading 1092 Lease 1220 Lebensdauer 114 leere Anweisung 102 leerer Block 113 leerer String 253 Leer-String 255 Leerzeichen 284 entfernen 251 Lempel-Ziv-Kodierung 1187 length(), String 242 Lexikalik 87 lib/security 1409 LIFO 680 lightweight component 917 line joins 1111, 1113 line.separator 538, 1406 Line2D, Klasse 1094–1095 lineare Algebra 325 lineare Kongruenzen 315 LinearGradientPaint 1102 1465 1371.book Seite 1466 Mittwoch, 17. Dezember 2008 1:39 13 Index LineBorder, Klasse 950 LineMetrics, Klasse 1092 LineNumberReader, Klasse 802 lineTo(), GeneralPath 1098 Linie 1081 Linienende 1112 Linien-Pattern 1111 Linienverbindung 1113 LinkedHashSet, Klasse 680 LinkedList, Klasse 643–644, 652, 661 Linking 528 linksassoziativ 126 Liskov, Barbara 388 Liskov’sches Substitutionsprinzip 388 List, Schnittstelle 643, 651 ListCellRenderer, Schnittstelle 1015 Liste 651 Liste füllen 702 Listener 439, 933 ListIterator, Schnittstelle 656 ListSelectionEvent, Klase 1013 ListSelectionEvent, Klasse 1014 ListSelectionListener, Schnittstelle 1013–1014 ListSelectionModel, Schnittstelle 1039 Load Factor 695 load(), System 1429 loadClass(), ClassLoader 531 loadLibrary(), System 1424 Locale 716 Locale, Klasse 715 LocateRegistry, Klasse 1216 Location, Response-Header 1186 Lock 590, 597 lock(), Lock 591 Locking 759 log(), Math 311 log4j 1385–1386 logClass 1219 Logging, RMI 1219 Login-Modul 1412 logisch atomar 608 logischer Operator 123 logisches Komplement 125 logisches Oder 125 logisches Und 125 logisches Xor 125 1466 lokale Klasse 496 lokale Objekte 1213 Lokaler Host 1166 lokalisierte Zahl, Scanner 283 Lokalisierung 718 LONG, DateFormat 737 long, Datentyp 103, 108 Long, Klasse 207 lower-bound wildcard 489 low-level event 931 Luxor 1072 LU-Zerlegung 325 LZ77 1187 M MAC 1415 MAC-Adresse 1204 magic number 350 magische Zahl 350 Magische Zahlenwerte 1349 Mail User Agent 1196 main() 97 main()-Funktion 74 Main-Class 1442 Makro 61 MalformedURLException 1148 Management Interface 1390 ManagementFactory, Klasse 1393 MANIFEST.MF 1442 Manipulation Detection Code 1415 Mantelklasse 201 Mantisse 300 Map, Schnittstelle 639, 644, 684 Map.Entry, Klasse 692 MARCH, Calendar 726 marker interface 411 Markierungsschnittstelle 411, 835 Marshaller, Schnittstelle 904 marshalling 1210 Matcher, Klasse 269 matches(), Pattern 269 matches(), String 269 MatchResult, Schnittstelle 275 Math, Klasse 305 MathContext, Klasse 324 Matisse 965 MatteBorder, Klasse 950 Mausrad 955 maven 1446 max(), Collections 669 max(), Math 307 MAX_PRIORITY, Thread 577 MAX_RADIX 238 Maximalwert 1337 Maximum 176, 307 MAY, Calendar 726 MBean 1389 MBean-Server 1389 McNealy, Scott 56 MD 1414 MD2 1415 MD4 1415 MD5 1415 MDC 1415 MediaTracker, Klasse 1133 MEDIUM, DateFormat 737 Megginson, David 866 mehrdimensionales Array 222 Mehrfachvererbung 413 Mehrfachverzweigung 137 member class 492 memory leak 363 Memory Map 1445 Menü 991 Menübalken 991 Menüeintrag 991 Menütrennlinie 994 Merant 1298 Merge-Sort 672 Meridian 713 MESA 55 Message Authentication Code 1415 Message Integrity Check 1415 Message Queues 1229 Message Store 1196 Message Transfer Agent 1196 Message Transfer System 1196 Message-Digest 1414 MessageDigest, Klasse 1416 MessageFormat, Klasse 294 Metadaten 1184, 1329 META-INF/MANIFEST.MF 1442 Meta-Information 1186 Metal, Look-and-Feel 1054 Meta-Objekte 1340 Meta-Programming 1339 Method, Klasse 1354 Methode des Aufrufes 1182 1371.book Seite 1467 Mittwoch, 17. Dezember 2008 1:39 13 Index Methoden 152 Methoden überladen 163 Methodenaufruf 155, 330 Methodenkopf 153 Methodenrumpf 153 MIC 1415 Microsoft 66 Microsoft Access 1294 Microsoft Development Kit 76 Microsoft SQL Server 1294 Middleware 1211 MIDI 553 MidiSystem, Klasse 553 Midlet 1289 MIDP (Mobile Information Device Profile) 1285 MILLISECOND, Calendar 731 Millisekunde 731 MIME 1197 MimeMultipart, javax.mail 1202 MIME-Nachrichten 1184 MIME-Typ 1156 min(), Collections 669 min(), Math 307 MIN_PRIORITY, Thread 577 MIN_RADIX 238 MIN_VALUE 303 Minimum 176 Minute 731 MINUTE, Calendar 731 Mitgliedsklasse 492 Mnemonic 995 Mobile Information Device Profile (MIDP) 1285 modal 1049 Model 1005 Model MBeans 1389 Model-View-Controller 436, 1005 Modifizierer 101, 1348 modifiziertes UTF-8 764 Modulo 118 Monat 730 Monitor 590 monitorenter 591 monitorexit 591 Monitoring 1388 MONTH, Calendar 730 mouse wheel 955 MouseEvent, Klasse 932 MouseListener, Schnittstelle 933 MouseMotionListener, Schnittstelle 933 MouseWheelEvent, Klasse 955 MS 1196 MTA 1196 MTS 1196 MUA 1196 multicast 76 Multicast-Kommunikation 1205 Multilevel continue 151 MULTILINE, Pattern 272 Multi-Map 697 MULTIPLE_INTERVAL_SELECTIO N, ListSelectionModel 1013 Multiplikation 116 Multiplizität 373 Multipurpose Internet Mail Extensions 1197 multitaskingfähig 557 multithreaded 558 Muster, regulärer Ausdruck 269 MutableTreeNode, Schnittstelle 1041 Mutex 591 MVC 1005 MXBeans 1390 MySQL 1293 N Namensdienst 1209, 1215 Namensraum 863 NaN 117, 301, 304 nanoTime(), System 540 narrowing conversion 128 native Methode 1423 Native Protocol All-Java Driver 1299 native, Schlüsselwort 1424 native2ascii, Dienstprogramm 289 Native-API Java Driver 1298 NativeCall 1433 nativer Compiler 1436 nativer Thread 558 natural ordering 667 Natürliche Ordnung 667 Naughton, Patrick 55 NavigableMap, Schnittstelle 644, 686 NavigableSet, Schnittstelle 678 Navigation 951 nearest neighbor algorithm 1129 Nebeneffekt 330 negative Zeichenklassen 271 NEGATIVE_INFINITY 304 negatives Vorzeichen 115 Nelson 1207 nested exception 475 nested top-level class 491 NetBeans 76 NetPermission 1410 Netscape 64, 915 netstat 1174 Network Filesystem 1190 Network Information Services 1145 NetworkInterface, Klasse 1167 Netz-Protokoll All-Java Driver 1299 new line 537 new, Schlüsselwort 187, 355, 1361 newInstance() 384 newInstance(), Array 1350 newInstance(), Constructor 1361 newLine(), BufferedWriter 800 NFS 1190 nicht ausführend 607 nicht geprüfte Ausnahme 470 nicht-primitives Feld 221 nicht-rechteckiges Feld 222 Nimbus, Look-and-Feel 1054 NIS 1145 NO_SUCH_PAGE, Printable 1142 No-Arg-Konstruktor 192 NoClassDefFoundError 1342 non-greedy operator, regulärer Ausdruck 274 non-static-method-Fehlermeldung 157 Normalizer, Klasse 269 Normalverteilung 316 NoSuchAlgorithmException 1417 NoSuchElementException 648, 683 NoSuchProviderException 1417 Not a Number 301, 304 Notation 184 notify(), Object 606, 613 notifyAll(), Object 608 1467 1371.book Seite 1468 Mittwoch, 17. Dezember 2008 1:39 13 Index NotSerializableException 832, 835, 837 NOVEMBER, Calendar 726 nowarn 1436 NULL 455 null, Schlüsselwort 200 NULL, SQL 1318 NullPointerException 200, 219, 470 Null-Referenz 200 Null-String 255 Number, Klasse 207 NumberFormat, Klasse 205, 294–295 NumberFormatException 258, 458 numeric promotion 116 numerische Umwandlung 116 numerischer Typ 116 O Oak 55 Oberklasse 378 Oberklasse finden 1347 Oberlänge 1092 Obfuscator 1342, 1450 Object Management Group 185, 1209, 1222 Object Serialization Stream Protocol 838 Object, Klasse 380, 508 ObjectInputStream, Klasse 832 Objective-C 64 ObjectName, Klasse 1396 ObjectOutputStream, Klasse 831 ObjectStreamField, Klasse 837 Objektansatz 183 Objektdiagramm 185 Objektgleichheit 510 Objektidentifikation 509 Objektmethode 97 Objektorientierung 58, 64, 100 Objektvariable 189 Objektvariable, Initialisierung 366 Observable, Klasse 436 Observer, Schnittstelle 436 Observer/Observable 436 Observer-Pattern 1005 Ocean, Look-and-Feel 1054 1468 OCTOBER, Calendar 726 ODBC 1294, 1297–1298 ODBC-DatenquellenAdministrator 1294 Oder 123 off-by-one error 144 Oktalform 108 Olson, Ken 1283 OMG 185, 1209 OMG (Object Management Group) 1209 OO-Methode 184 opak 960 Open Database Connectivity Standard 1298 Open MBeans 1390 OpenJDK 65 openStream(), URL 1151 Operator 116 Rang eines 125 operator precedence 124 Optionsfeld 988 Oracle 1293 OracleDriver 1304 Ordinalzahl, Aufzählung 524 Ordinalzahl, Enum 524 org.jdom, Paket 882 org.omg, Paket 507 Ostersonntag 728 OutOfMemoryError 188, 515 OutputStream, Klasse 775 OutputStreamWriter, Klasse 289, 809 OverlayLayout, Klasse 978 P P2P 1230 Pack200 816 package, Schlüsselwort 211 PAGE_EXISTS, Printable 1142 paint(), Frame 1075 Paint, Schnittstelle 1102 paintComponent() 1077 Paket 193, 1145 Paketsichtbarkeit 341 PalmOS 1283 Palmsonntag 728 Parameter 157 Parameterliste 153, 155 Parameterübergabemechanismus 158 parametrisierte Funktion 157 parametrisierter Typ 483 parseBoolean(), Boolean 258 Parsed Character Data 860 parseDouble(), Double 258 ParseException 295, 741 parseInt(), Integer 205, 257, 458 parseObject(), Format 294 partiell abstrakte Klasse 406 Passionssonntag 728 PATH 73 Pattern, Klasse 269 pattern, regulärer Ausdruck 269 Pattern-Matcher 269 Payne, Jonathan 56 PCDATA 860 p-code 57 PDA 68 PDAP 1285 Peer-Elemente 1064 Peer-Klassen 914 Permissions 1410 PersistenceDelegate, Klasse 848 Persistenz 446, 830 Personal Digital Assistant Profile 1285 Pfad 1097 Pfingstsonntag 728 phoneMe 68 PicoJava 58 Picture Element 1079 PipedInputStream, Klasse 812 PipedOutputStream, Klasse 812 PipedReader, Klasse 812 PipedWriter, Klasse 812 pissing on at every opportunity 76 Pixel 1079 Plattenspeicher 751 Pluggable Authentication Module (PAM) 1412 Pluggable Look & Feel 915 Plugins, Eclipse 84 PocketPC 1284 Point, Klasse 183, 187 Pointer 59 PointerInfo, Klasse 1073 Point-to-Point 1230 Polar-Methode 316 1371.book Seite 1469 Mittwoch, 17. Dezember 2008 1:39 13 Index Policy-Datei 1408 policytool 1435 policytool, Dienstprogramm 1410 Polygon 1084 Polygon, Klasse 1084, 1095 Polyline 1084 Polymorphie 400 POP before send 1202 POP3 1197 Popup-Menü 1000 Port 1234 1173 Port, RMI-Namensdienst 1216 Port-Adresse 1169 Position des Fensters 922 POSITIVE_INFINITY 304 POST, HTTP-Methode 1182 Post-Dekrement 121 Post-Inkrement 121 POST-Methode 1161, 1181 Potenz 311 Prä-Dekrement 121 Präfix 246 Pragma 1186 Prä-Inkrement 121 Preferences, Klasse 547 Preimage-Angriffe 1415 PreparedStatement, Schnittstelle 1311, 1326 primitiver Typ 103 Primzahlen 712 Principal 1408, 1412 print() 164, 785 Printable, Schnittstelle 1140 PrinterJob, Klasse 1140 printf() 99, 785 printf(), PrintWriter/PrintStream 292 PrintJob, Klasse 1140 println() 785 println(), print() 98 PrintService, Schnittstelle 1143 printStackTrace() 457 PrintStream 785 PrintWriter 785 Priorität, Thread 577 Prioritätswarteschlange 577 PriorityQueue, Klasse 643 private, Schlüsselwort 336, 1348 PrivateKey, Schnittstelle 1418 Privatsphäre 335 Process, Klasse 543 ProcessBuilder, Klasse 541 Profil, Java ME 1284 Profiler 540 Profiling 540 Profiling-Informationen 1438 Programm 96 Programm-Icon 1122 Programmieren gegen Schnittstellen 413 ProGuard 1450 Properties 445 Properties, Bean 446 Properties, Klasse 536, 697 Property 339 PropertyChangeEvent 453 PropertyChangeEvent, Klasse 447, 960 PropertyChangeListener, Schnittstelle 447 PropertyDescriptor, Klasse 1358 Property-Design-Pattern 445 PropertyPermission 1410 Property-Sheet 445 PropertyVetoException 450 Proposed Standard 1146 protected, Schlüsselwort 381, 1348 Protocol Handler 1156 Protocols 64 Protokoll 1146 Protokoll-Handler 1156 Proxy 1207 Proxy-Authenticate, ResponseHeader 1186 Proxy-Authorization 1160 Proxy-Server 1152 Prozess 557 Pseudo-Primzahltest 317 Public, Response-Header 1186 public, Schlüsselwort 335, 1348 PublicKey, Schnittstelle 1418 Publish-Subscribe 1230 Pulldown-Menü 991 Punktoperator 190 pure abstrakte Klasse 406 PushbackInputStream, Klasse 803 PushbackReader, Klasse 803 put(), Map 686 PUT, HTTP-Methode 1182 Q qNaNs 303 QuadCurve2D, Klasse 1095 Quadratische Kurvensegmente 1097 Quadratwurzel 311 quadTo(), GeneralPath 1098 Quantifizierer 270 QuantumDB 1295 Quartz 634 Quasiparallelität 557 Quellcodeverschönerer 1451 Query-String 1161 Queue, Schnittstelle 643, 682 Quicksort 672 Quiet NaN 303 Quoted Printing Encoding 1197 R race condition 589 race hazard 589 RadialGradientPaint 1102 Rahmen 949 Random 314 random(), Math 221, 313 Random, Klasse 314 RandomAccess, Schnittstelle 659 RandomAccessFile, Klasse 456, 762 Range-Checking 61 Rangordnung 124 Raw-Type 485 Reader, Klasse 783 readLine(), BufferedReader 802 readLine(), RandomAccessFile 456 readObject(), ObjectInputStream 833 readPassword(), Console 792 readResolve() 841 readUTF(), RandomAccessFile 764 ReadWriteLock, Schnittstelle 595 rebind(), Registry 1218 Rechenungenauigkeit 147 rechtsassoziativ 126 Record Management System 1290 Rectangle2D, Klasse 1095 1469 1371.book Seite 1470 Mittwoch, 17. Dezember 2008 1:39 13 Index RectangularShape, Klasse 1095 reentrant 601 ReentrantLock, Klasse 592 ReentrantLock, Schnittstelle 606 ReentrantReadWriteLock, Klasse 595 Reference Concrete Syntax 857 referenced-Meldung 1220 Referenz 59 Referenzierung 177 Referenztyp 103, 116 Referenztyp, Vergleich mit == 197 Referenzvariable 189 Reflection 1339 ReflectPermission 1410 reflexive Assoziation 374 reg 551 regionMatches(), String 247 Registry 547, 1209, 1215 REGISTRY_PORT, Registry 1216 regulärer Ausdruck 269 Reihung 215 reine abstrakte Klasse 406 Rekursionsform 168 rekursive Assoziation 374 Rekursive Methode 167 relational Operator 122 relationales Datenbanksystem 1297 Remainder Operator 117 Remote Manager 1389 Remote Object Activation 1224 Remote Procedure Call 1209 Remote, Schnittstelle 1213 RenderedImage, Schnittstelle 1129 Rendering-Algorithmus 1139 Renderpack Render Pipelines 1041 Rendezvous 574, 576 repaint() 1078 replace(), String 252 replaceAll(), Collections 702 replaceAll(), String 252 replaceFirst(), String 252 ReplicateScaleFilter, Klasse 1129 Request 1182 Request For Comment 1145 requestFocusInWindow(), JComponent 952 1470 Request-Header 1184 reservierte Schlüsselwörter 92 ResourceBundle, Klasse 719 Response-Header 1184, 1186 Rest der Division 312 Restwert-Operator 116–117 Restwertoperator 312 Result, Schnittstelle 901 Resultat 115 ResultSet, Schnittstelle 1313 ResultSetMetaData, Schnittstelle 1329 resume(), Thread 577 RetentionPolicy, Aufzählung 1379 Re-Throwing 474 Retry-After, Response-Header 1186 return, Schlüsselwort 159, 226 revalidate(), JComponent 959 Reverse-Engineering-Tool 186 RFC 1145 RFC 1521 290 RFC 1952 1187 RFC 2616 1181 RGB 1107 Rhino 545 Rich Text Format 1024 rint(), Math 310 RMI 1209 RMI Wire Protocol 1210 rmi:// 1218 rmic, Dienstprogramm 1215 RMIClassLoader, Klasse 1222 rmid, Dienstprogramm 1224 RMI-Klassenlader 1222 RMI-Logging 1220 rmiregistry, Dienstprogramm 1216, 1310 RMI-Transportschicht 1210 Robot, Klasse 1073 Rollbalken 978 Rollenbasierte Rechtevergabe 1411 Rollrad 955 Ron Rivest 1415 Rotation 1139 round(), Math 309 RoundingMode, Aufzählung 324 RoundRectangle2D, Klasse 1095 Roundtrip-Engineering 186 Router 1145 RowFilter, Klasse 1041 RowSet, Schnittstelle 1322 RPC 1209 rt.jar 529 RTF 1024 Rückgabetyp 153 Rückgabewert 155 Rumpf 153 run(), Runnable 561 Runden 309 Rundungsfehler 118 Rundungsmodi, BigDecimal 323 runFinalizersOnExit(), System 522 Runnable, Schnittstelle 498, 561 Runtime 541 Runtime Packages 1401 RuntimeException 469 Runtime-Interpreter 57 RuntimePermission 1410 S Sandbox 1403 Saturation 1107 SAX 866 SAXBuilder 884 SAXBuilder, Klasse 884 SAXParser, Klasse 878 SCALE_AREA_AVERAGING, Image 1128 SCALE_DEFAULT, Image 1127 SCALE_FAST, Image 1128 SCALE_REPLICATE, Image 1128 SCALE_SMOOTH, Image 1128 Scanner, Klasse 278 Schablonen-Muster 776 Schaltjahr 714 ScheduledThreadPoolExecutor, Klasse 580, 586 Scheduler 557, 587 Schema 861 Scherung 1139 Schieberegler 978 Schlange 643 Schleifen 140 Schleifenbedingung 142, 146 Schleifen-Inkrement 144 Schleifentest 144 Schleifenzähler 144 1371.book Seite 1471 Mittwoch, 17. Dezember 2008 1:39 13 Index Schlüssel 644 Schlüsselpaare 1413 Schlüsselspeicher 1414 Schlüsselwörter 92 Schnittstelle 64, 409 Schnittstellentypen 189 Schriftlinie 1085 Schurken 713 schwergewichtige Komponente 914 Schwyzerdütsch 721 Scope 114 Screen_Updater 579 ScriptEngine, Schnittstelle 546 ScriptEngineManager, Klasse 545 Scriptlet 1253 Scrollable, Schnittstelle 962 Scrollbar 978 ScrollPaneLayout, Klasse 978 sealing, Jar 495 SECOND, Calendar 731 SecretKey, Schnittstelle 1418 SecretKeySpec, Klasse 1419 Secure Hash Algorithm 1415 Secure Hash Standard 1415 Secure Sockets Layer 1205 SecureRandom, Klasse 315 SecurityException 1408 Security-Manager 59, 1404 SecurityManager, Klasse 1268, 1403–1404 SecurityPermission 1410 Seed 315 Seiteneffekt 331 Sekunde 731 Selbstbeobachtung 445 Semantik 87 semantisches Ereignis 932 Semaphore, Klasse 616 Separator 88 SEPTEMBER, Calendar 726 SEQUEL 1333 Sequence, Klasse 553 SequenceInputStream, Klasse 779 Sequencer 553 Sequencer, Schnittstelle 553 Sequenz 638, 643 Sequenzdiagramm 186 Serializable, Schnittstelle 835 SerializablePermission 1410 serialPersistentFields 837 serialver, Kommandozeilenprogramm 844 serialVersionUID 844 Server 1209 Server, Response-Header 1186 ServerSocket, Klasse 1173 Service 443 Service Provider Implementation 507 ServiceLoader, Klasse 1303 Service-Provider 443 Session, Klasse 1198, 1201 Set, Schnittstelle 643, 674 setBorder(), JComponent 949 setContentType(), JEditorPane 1024 setDefaultCloseOperation(), JFrame 920, 939 setDefaultRenderer(), JTable 1035 setDoInput(), URLConnection 1155 setDoOutput(), URLConnection 1155 setFont(), Graphics 1086 setLayout(), Container 965 setLookAndFeel(), UIManager 1055 setModel(), JSpinner 1016 setModel(), JTable 1030 setPaint(), Graphics2D 1102 setPriority(), Thread 577 setProperty(), Properties 697 setRenderingHint(), Graphics2D 1094 setSize(), Window 921 Setter 339 setText(), JButton 942 setText(), JLabel 926 setText(), JTextComponent 1019 Set-Top-Boxen 56 setVisible(), Window 921 SGML 856 SHA 1415 Shallow Copy 694 Shamir, Adi 1415 Shape, Schnittstelle 1094–1095 shared objects 1427 ShellFolder, Klasse 749 Sheridan, Mike 55 Shift 125 Shift-Operator 172 SHORT, DateFormat 737 short, Datentyp 103, 108, 299 Short, Klasse 207 Short-Circuit-Operator 124 showConfirmDialog(), JOptionPane 1050 showMessageDialog(), JOptionPane 1050 showOptionDialog(), JOptionPane 1050 SHS 1415 Shutdown-Hook 635 Sicherheitsmanager 1403–1404, 1407 Sichtbarkeit 114, 335, 381 Sichtbarkeitsmodifizierer 335 signal(), Condition 606 signaling NaN 303 Signatur 153 Signierung 1408, 1412 Simple API for XML Parsing 866 Simple Mail Transfer Protocol 1196 SimpleDateFormat, Klasse 736 SIMPLIFIED_CHINESE, Locale 716 SIMULA 64 Simula-67 181 sin(), Math 308 Single Inheritance 380 SINGLE_INTERVAL_SELECTION, ListSelectionModel 1013 SINGLE_SELECTION, ListSelectionModel 1013 Singleton 364, 706 sinh(), Math 308 Sinus 308 sizeof 177 Skalierung 1139 Skipjack 1415 Skript-Engine 545 Slash 744 sleep(), Thread 567 slider, Schieberegler 978 Slivka, Ben 76 Smalltalk 58, 181 Smart-Card 1412 Smiley 92 SMTP 1196 SMTP-Server 1197 1471 1371.book Seite 1472 Mittwoch, 17. Dezember 2008 1:39 13 Index sNaN 303 SOAP 1224 SOCK_DGRAM 1204 SOCK_STREAM 1204 Socket, Klasse 1169 SocketPermission 1410 Sockets 1168 SOCKS 1153 SoftBevelBorder, Klasse 950 Sommerzeitabweichung 731 sort(), Arrays 231, 669 sort(), Collections 671 SortedMap, Schnittstelle 686 SortedSet, Schnittstelle 678 Sortieren 671 Soundbank 553 Source, Schnittstelle 901 Source-Code Beautifier 1451 späte dynamische Bindung 400 SpinnerDateModel, Klasse 1016 SpinnerListModel, Klasse 1016 SpinnerModel, Schnittstelle 1016 SPI-Pakete 507 Splash-Screen 1123 split(), Pattern 277 split(), String 277 Spring-Framework 443 SpringLayout, Klasse 965 Sprungmarken 151 SQL 1333 SQL 2 1333 SQLException 1319 SQLWarning, Klasse 1319 SQuirreL 1295 SSL 1205 SSLSocket, Klasse 1205 SSLSocketFactory, Klasse 1205 stabil sortieren 671 stabiler Sortieralgorithmus 673 Stack 680 Stack, Klasse 680 Stack-Inhalt 478 Stack-Speicher 188 Stack-Trace 476 StackTraceElement, Klasse 477 Standard Extension API 507 Standard Generalized Markup Language 856 Standard MBeans 1389 Standard Tag Library 1247 Standard Widget Toolkit 1072 1472 Standardberechtigungen 1409 Standard-Konstruktor 192, 356 Standardserialisierung 831 Stapelspeicher 680 Star Seven 56 stark typisiert 102 start(), Thread 562 startsWith(), String 246 statement 95 Statement, Schnittstelle 1311 static final 410 static, Schlüsselwort 101, 345 statisch typisiert 102 statische Eigenschaft 344 statische innere Klasse 491 statische Methode 97, 156 statischer Block 368 statischer Import 213 Statusanzeige 989 Statuscode 1184 Statuszeile 1184 StAX 868 Stellvertreterobjekt 1207, 1215 Sternzeit 713 Steuerelement, Grafisches 913 stilles NaN 303 STL-Bibliothek 672 stop(), Thread 571 Store-and-Forward 1196 StreamEncoder 809 StreamFilter, Schnittstelle 873 StreamTokenizer, Klasse 849 streng typisiert 102 strictfp, Schlüsselwort 314 StrictMath, Klasse 314 String 99, 238 StringBuffer, Klasse 259 StringBuilder, Klasse 259 StringIndexOutOfBoundsException 247–248 Stringkonkatenation 125 Stringlänge 242 String-Literale 240 StringReader, Klasse 774, 795 Strings, Anhängen an 249 Stringteil vergleichen 247 Stringteile extrahieren 247 StringTokenizer, Klasse 283 StringWriter, Klasse 793 Stroke, Schnittstelle 1111–1112 Stroustrup, Bjarne 182 Structured English Query Language 1333 Subinterface 417 Subject 1412 Subklasse 378 Subprotokoll 1305 Substitutionsprinzip 388 substring(), String 248 Subtraktion 116 Suffix 247 SUID 844 Summe aller Einträge 1337 sun, Paket 193 sun.boot.class.path 530 sun.jdbc.odbc.JdbcOdbcDriver 1304 sun.nio.cs 809 SunWorld 56 super() 383, 385 super, Generics 488 super, Schlüsselwort 385, 393 Superklasse 378 Surrogate-Paar 88 suspend(), Thread 577 SWIG 1433 swing.properties 1054 SwingUtilities, Klasse 1066 SwingWorker, Klasse 1066 SwingWT 1073 switch-Anweisung 137 Swixml 1071 SWT 1072 symbolische Konstante 349 Symbolleiste 998 sync() 773 Synchronisation 522, 586 synchronized, Schlüsselwort 591, 596 SynerJ 76 Syntax 87 synthetische Methode 492 System.err 101, 790 System.in 541, 777, 790 System.out 101, 790 SystemColor, Klasse 1102, 1107 Systemeigenschaften 73, 536 Systemfarben 1107 System-Klassenlader 530 SystemTray, Klasse 1004 1371.book Seite 1473 Mittwoch, 17. Dezember 2008 1:39 13 Index T TableCellEditor, Schnittstelle 1036 TableCellRenderer, Schnittstelle 1033 TableColumn, Klasse 1038 TableLayout, Klasse 978 TableModel, Schnittstelle 1028, 1038 TableModelEvent, Klasse 1032 TableModelListener, Schnittstelle 1028 TableRowSorter, Klasse 1040 Tabulator 284 Tag 730, 855 Tag des Jahres 731 Tage im Monat 734 Tagesdatum 733 TagLib 1247 TagLib-Deskriptoren 1247 TAI 714 TAIWAN 716 Taj Mahal 64 tan(), Math 308 Tangens 308 tangle 421 Tango Desktop Projekt 930 tanh(), Math 308 Tar-Archiv 817 Tastatur-Shortcut 995 Tastenkürzel 995 TCP 1190 TCP/IP 1168 Tear-off-Menü 992 Teletubbies 1162 template pattern 776 Template-Code 1238 Terminiert 578 TextArea, Klasse 1022 TextLayout, Klasse 1092 TexturePaint 1102 this und Vererbung 499 this$0, innere Klasse 495 this() 385 this(), Beschränkungen 361 this(), Konstruktoraufruf 360 this-Referenz 332, 385 this-Referenz, innere Klasse 493 Thread 557 Thread, Klasse 498, 562 ThreadDeath, Klasse 573 ThreadGroup, Klasse 625 Thread-Gruppe 629 thread-local storage (TLS) 622 ThreadLocal, Klasse 622 thread-lokale Variablen 622 Thread-Pool 580 ThreadPoolExecutor, Klasse 580 Throwable, Klasse 466 throws, Schlüsselwort 459 tick marks 978 tiefe Kopie, clone() 517 tiefe Objektkopie 517, 841 timeout 1210 Timer, Klasse 633 Timer, Swing-Klasse 1070 TimerTask, Klasse 633 Timestamp, Klasse 1316 Titelleiste 920 TitledBorder, Klasse 950 TLS 1205 toArray(), Collection 663 Tödliche Umarmung 603 Token 87, 284 toLowerCase(), Character 238 toLowerCase(), String 250 Tomcat 1234 Toolkit, Klasse 918 Topic, JMS 1230 Top-Level-Container 918 Top-Level-Klassen 491 toString(), Arrays 232 toString(), Integer 256 toString(), Object 391, 509 toString(), Point 191 toUpperCase(), Character 238 toUpperCase(), String 250 Transferable, Schnittstelle 1057 Transfer-Encoding 1186 TransferHandler, Klasse 1061 Transformation 1102 transient, Schlüsselwort 837 translate(), Graphics 1135 Transparency, Schnittstelle 1102 TransparentLayout 977 Transport Layer Security 1205 Transportschicht 1210 TrayIcon, Klasse 1004 TreeMap, Klasse 638, 644, 684 TreeModel, Schnittstelle 1041, 1043 TreeNode, Schnittstelle 1043 TreeSelectionListener, Schnittstelle 1043 TreeSet, Klasse 677 Trennzeichen 88, 276 trim(), String 251 true, Schlüsselwort 103 TrueType-Zeichensatz 1090 TrueZIP 817 try, Schlüsselwort 455 Tupel 1291 Typanpassung 126 type erasure 484 TYPE_INT_RGB, BufferedImage 1125 TYPE_SCROLL_INSENSITIVE, ResultSet 1318 Typecast 127 Types, Klasse 1314 Typ-Variable 482 Typvergleich 125 U Überblendung, Grafik 1111 überdecken, Methoden 402 überladene Methode 99, 163 überladener Operator 62 überladenes Plus 132 überlagert, Methode 391 Überlauf 304 überschreiben, Methoden 390 Übersetzer 72 Überwachtes Warten 611 UCSD-Pascal 57 UDP-Protokoll 1189–1190 UIDefaults, Klasse 926 UI-Delegate 957 UIManager, Klasse 1055 UK, Locale 716 Umgebungsvariablen, Betriebssystem 539 Umkehrfunktionen 308 UML 184 Umlaut 91 Umrisslinie 1111 Umrisslinie, Stroke 1102 unärer Operator 115 unäres Minus 119 Unäres Plus/Minus 125 unbenanntes Paket 212 1473 1371.book Seite 1474 Mittwoch, 17. Dezember 2008 1:39 13 Index Unboxing 208 UncaughtExceptionHandler, Schnittstelle 570 unchecked 555 unchecked exception 470 Und 123 UNDECIMBER, Calendar 726 Undo/Redo 1061 UndoableEditEvent, Klasse 1063 UndoManager, Klasse 1061 Unendlich 301 UnicastRemoteObject, Klasse 1218 Unicast-Verbindung 1205 UNICODE_CASE, Pattern 272 Unicode-Escape 91 Unicode-Zeichen 88 unidirektionale Beziehung 373 Unified Method 184 Uniform Resource Locator 1146 Universal Time 713 UnknownHostException 1169 unlock(), Lock 591 Unmarshaller, Schnittstelle 904 unnamed package 212 UnsatisfiedLinkError 1424 UnsupportedOperationException 470, 476, 642, 649, 663, 705 Unterklasse 378 Unterlänge 1092 Untermenü 991 Unzahl 117 Upgrade 1186 upper-bound wildcard 489 URL 1146 URL, Klasse 1146 URLClassLoader, Klasse 531 URLConnection, Klasse 1153 URLDecoder, Klasse 1162 URLEncoder, Klasse 1161 US, Locale 716 Use-Cases-Diagramm 185 user.timezone 727 UTC 714 UTF-16-Kodierung 88, 858 UTF-8-Kodierung 764, 858 Utility-Klasse 364 UUencode 1197 1474 V valid, XML 859 valueOf() 202 valueOf(), String 256 values(), Map 691 Varargs 226 variable Argumentanzahl 226 Variablendeklaration 105 Variableninitialisierung 403 Vary, Response-Header 1186 Vector, Klasse 651 veränderbare Zeichenketten 259 Verbindungsloses Protokoll 1190 Verbindungsorientiert 1190 -verbose 1438 verbose 1436 Verbundoperator 120 Verdecken von Variablen 332 vererbte Konstante 418 Vererbung 377 Vergleichsoperator 122 Vergleichsstring 247 verkettete Liste 639, 661 Verklemmung 558, 604 Verlaufsbalken 989 Verschiebeoperator 172 Verschiebung 1139 Verzeichnis anlegen 752 Verzeichnis umbenennen 752 Vetorecht 446 View 1005 ViewPortLayout, Klasse 978 virtuelle Maschine 57 Visual Age for Java 75 Visual Basic 251 void, Schlüsselwort 156 volatile, Schlüsselwort 619 Vorschaubild 1117 Vorzeichenerweiterung 125 Vorzeichenumkehr 119 W Wahrheitswert 102 wait(), Object 606, 613 War-Archiv 1236 Warning, Response-Header 1186 Warning:Applet Window 1408 Watson, Thomas 1207 WAV 552 weave 421 WEB 421 Web Application Security 1266 Web-Applets 56 Webbrowser 1025 WebRowSet, Schnittstelle 1323– 1324 WebRunner 56 Webstart 1280 Wechselknopf 946 WEEK_OF_MONTH, Calendar 731 WEEK_OF_YEAR, Calendar 730 Weichzeichnen 1081, 1138 Well-known System Ports 1169 Wertebereich 338 Werte-Objekt 203 Wertoperation 115 Wertübergabe 157–158 Wettlaufsituation 589 while-Schleife 141 WHITE, Color 1105 Whitespace 88 widening conversion 127 Widget 913 Wiederholungsfaktor 270 Wiederverwendung per Copy & Paste 131 Wildcard 489 Win32-API 76 WinCE 1283 WIND_NON_ZERO, GeneralPath 1099 Winding Rule 1099 windowClosed(), WindowListener 939 windowClosing(), WindowListener 939 WindowEvent, Klasse 935 WindowListener, Schnittstelle 933 Windows Icon-Format 1117 Windows-NT Konsole 288 Windows-Registry 551 Windungsregel 1099 Winkelfunktionen 308 WinZip 71 Wireless Toolkit 1285 wissenschaftliche Notation 110 Woche 731 wohlgeformt 857 1371.book Seite 1475 Mittwoch, 17. Dezember 2008 1:39 13 Index WORA 66 Workbench, Eclipse 80 Worker-Thread 1068 Workspace 78 World Wide Web 56 Wrapper-Klasse 201 write once, run anywhere 66 writeObject(), ObjectOutputStream 832 Writer, Klasse 781 writeReplace() 841 writeUTF(), RandomAccessFile 764 wsimport, Dienstprogramm 1226, 1228 Wurzelelement 887 Wurzelverzeichnis 749 WWW-Authenticate, ResponseHeader 1186 X X.509 1413 XAML 1071 -Xbootclasspath 530 XDoclet 1383 Xerces 867 XHTML 865 XML 856 XML User Interface Language 1072 XMLDecoder, Klasse 846 XMLEncoder, Klasse 846 XMLEvent, Klasse 869 XMLEventFactory, Klasse 874 XMLEventReader, Klasse 872 XMLEventReader, Schnittstelle 874 XMLEventWriter, Klasse 869 XMLEventWriter, Schnittstelle 875 XMLInputFactory, Klasse 874 XMLOutputFactory, Klasse 874 XMLOutputter, Klasse 885 XMLStreamConstants, Schnittstelle 870 XMLStreamReader, Schnittstelle 869 XMLStreamWriter, Klasse 869 XMLStreamWriter, Schnittstelle 874 -Xms 1438 -Xmx 1438 -Xnoclassgc 1438 XOPEN-SQL-Status 1319 Xor 123, 172, 1076 Xor-Modus, Zeichnen 1111 XPath 896, 899 XPath, Klasse 897 XPath-Wurzel 896 -Xprof 1438 -Xrs 1438 XSLT 899 -Xss 1438 XStream 848 XUL 1072 Y YEAR, Calendar 730 yield(), Thread 569 Z Zeichen anhängen 260 Zeichen ersetzen 252 Zeichenbereich 1102 Zeichenkette 99 Zeichenklassen 270 Zeichenkodierung 288 Zeiger 59 Zeilenkommentar 96 Zeilentrenner 284 Zeilenumbruch 537 Zeitablauf 1210 Zeitgenauigkeit 722 Zeitmessung 540 Zeitzone 714, 739 Zeitzonenabweichung 731 Zertifizierungsstelle 1412 ZipEntry, Klasse 821 ZipFile, Klasse 821 zirkuläre Assoziation 374 ZONE_OFFSET, Calendar 731 Zufallszahl 313, 318 Zufallszahlengenerator 315 Zugriffsmethode 339 Zugriffsmodifizierer 1353 zusammengesetzte Bedingung 134 Zustände, Threads 566 Zustandsänderung 453 Zuweisung 108, 125 Zuweisung mit Operation 125 zweidimensionales Feld 222 Zweierkomplement 299 zweistelliger Operator 115 Zwischenablage 1056 zyklische Redundanzprüfung 828 Zahlenwert, Unicode-Zeichen 88 Zeichen 102, 111 1475