Christian Ullenboom Java ist auch eine Insel Programmieren mit der Java Platform, Standard Edition 6 Auf einen Blick 1 Java ist auch eine Sprache .................................................................... 55 2 Sprachbeschreibung ............................................................................. 85 3 Klassen und Objekte ............................................................................ 177 4 Der Umgang mit Zeichenketten ........................................................... 233 5 Mathematisches ................................................................................... 291 6 Eigene Klassen schreiben ..................................................................... 319 7 Angewandte Objektorientierung ......................................................... 439 8 Exceptions ............................................................................................ 465 9 Die Funktionsbibliothek ....................................................................... 491 10 Threads und nebenläufige Programmierung ........................................ 543 11 Raum und Zeit ...................................................................................... 623 12 Datenstrukturen und Algorithmen ....................................................... 655 13 Dateien und Datenströme .................................................................... 731 14 Die eXtensible Markup Language (XML) ............................................. 843 15 Grafische Oberflächen mit Swing ......................................................... 895 16 Grafikprogrammierung ......................................................................... 1069 17 Netzwerkprogrammierung ................................................................... 1143 18 Verteilte Programmierung mit RMI und Web-Services ................................................................................ 1205 19 JavaServer Pages und Servlets ............................................................. 1229 20 Applets ................................................................................................. 1267 21 Midlets und die Java ME ...................................................................... 1281 22 Datenbankmanagement mit JDBC ....................................................... 1289 23 Reflection und Annotationen ............................................................... 1339 24 Logging und Monitoring ...................................................................... 1385 25 Sicherheitskonzepte ............................................................................. 1401 26 Java Native Interface (JNI) ................................................................... 1423 27 Dienstprogramme für die Java-Umgebung .......................................... 1435 A Die Begleit-DVD ................................................................................... 1455 Inhalt 1 Vorwort ............................................................................................................... 39 Java ist auch eine Sprache ................................................................... 55 1.1 1.2 1.3 55 55 57 57 58 59 59 60 61 61 62 62 63 64 64 65 65 66 66 66 68 68 68 70 70 71 72 72 73 73 74 74 75 75 76 78 1.4 1.5 1.6 1.7 1.8 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 überladenen Operatoren .................................................. 1.3.9 Java als Sprache, Laufzeitumgebung und Bibliothek ................... 1.3.10 Wofür sich Java nicht eignet ...................................................... 1.3.11 Java im Vergleich zu anderen Sprachen ...................................... 1.3.12 Java ist Open Source .................................................................. Die Rolle von Java im Web ....................................................................... 1.4.1 Vollwertige Applikationen statt Applets ..................................... Die Java Platform Standard Edition (Java SE) ............................................. 1.5.1 JDK und JRE .............................................................................. 1.5.2 Java-Versionen .......................................................................... 1.5.3 Java für die Kleinen .................................................................... 1.5.4 Java für die Großen .................................................................... 1.5.5 Installationsanleitung für Java SE ............................................... Das erste Programm compilieren und testen ............................................. 1.6.1 Ein Quadratzahlen-Programm .................................................... 1.6.2 Der Compilerlauf ....................................................................... 1.6.3 Die Laufzeitumgebung ............................................................... 1.6.4 Häufige Compiler- und Interpreterprobleme .............................. Entwicklungsumgebungen im Allgemeinen ............................................... 1.7.1 Die Entwicklungsumgebung Eclipse ........................................... 1.7.2 NetBeans von Sun ..................................................................... 1.7.3 Ein Wort zu Microsoft, Java und zu J++ ...................................... Eclipse im Speziellen ................................................................................ 1.8.1 Eclipse starten ........................................................................... 1.8.2 Das erste Projekt anlegen .......................................................... 1.8.3 Eine Klasse hinzufügen .............................................................. 5 Inhalt 1.8.4 Übersetzen und Ausführen ......................................................... 1.8.5 JDK statt JRE ............................................................................. 1.8.6 Start eines Programms ohne Speicheraufforderung ..................... 1.8.7 Projekt einfügen oder Workspace für die Aufgaben wechseln .... 1.8.8 Plugins für Eclipse ...................................................................... 1.8.9 Eclipse Web Tools Platform (WTP) ............................................. Zum Weiterlesen ...................................................................................... 79 80 80 81 82 82 83 Sprachbeschreibung ............................................................................ 85 1.9 2 2.1 2.2 2.3 2.4 6 Elemente der Programmiersprache Java .................................................... 2.1.1 Textkodierung durch Unicode-Zeichen ....................................... 2.1.2 Literale ...................................................................................... 2.1.3 Bezeichner ................................................................................. 2.1.4 Reservierte Schlüsselwörter ........................................................ 2.1.5 Token ........................................................................................ 2.1.6 Kommentare .............................................................................. Anweisungen formen Programme ............................................................. 2.2.1 Anweisungen ............................................................................. 2.2.2 Eine Klasse bildet den Rahmen .................................................. 2.2.3 Die Reise beginnt am main() ...................................................... 2.2.4 Programme übersetzen und starten ............................................ 2.2.5 Funktionsaufrufe als Ausdrücke und Anweisungen ..................... 2.2.6 print(), println() und printf() für Bildschirmausgaben .................. 2.2.7 Modifizierer ............................................................................... 2.2.8 Anweisungen und Blöcke ........................................................... Datentypen .............................................................................................. 2.3.1 Primitive Datentypen im Überblick ............................................ 2.3.2 Wahrheitswerte ......................................................................... 2.3.3 Variablendeklarationen .............................................................. 2.3.4 Ganzzahlige Datentypen ............................................................ 2.3.5 Die Fließkommazahlen float und double .................................... 2.3.6 Alphanumerische Zeichen .......................................................... Ausdrücke, Operanden und Operatoren ................................................... 2.4.1 Zuweisungsoperator .................................................................. 2.4.2 Arithmetische Operatoren ......................................................... 2.4.3 Unäres Minus und Plus .............................................................. 2.4.4 Zuweisung mit Operation .......................................................... 2.4.5 Präfix- oder Postfix-Inkrement und -Dekrement ......................... 2.4.6 Die relationalen Operatoren und die Gleichheitsoperatoren ....... 2.4.7 Logische Operatoren Und, Oder, Xor, Nicht .............................. 2.4.8 Rang der Operatoren in der Auswertungsreihenfolge ................. 2.4.9 Die Typanpassung (das Casting) ................................................. 85 85 88 88 89 90 91 92 92 93 94 95 95 95 98 99 100 100 102 102 106 108 109 110 111 112 115 115 116 118 119 120 122 Inhalt 2.5 2.6 2.7 2.8 2.9 2.10 3 2.4.10 Überladenes Plus für Strings ....................................................... 2.4.11 Was C(++)-Programmierer vermissen könnten ........................... Bedingte Anweisungen oder Fallunterscheidungen ................................... 2.5.1 Die if-Anweisung ....................................................................... 2.5.2 Die Alternative mit einer if/else-Anweisung wählen ................... 2.5.3 Die switch-Anweisung bietet die Alternative ............................. Schleifen .................................................................................................. 2.6.1 Die while-Schleife ...................................................................... 2.6.2 Schleifenbedingungen und Vergleiche mit == ............................ 2.6.3 Die do-while-Schleife ................................................................ 2.6.4 Die for-Schleife .......................................................................... 2.6.5 Ausbruch planen mit break und Wiedereinstieg mit continue .... 2.6.6 break und continue mit Sprungmarken ...................................... Methoden einer Klasse ............................................................................. 2.7.1 Bestandteil einer Funktion ......................................................... 2.7.2 Beschreibungen in der Java-API ................................................. 2.7.3 Aufruf einer Methode ................................................................ 2.7.4 Methoden ohne Parameter ........................................................ 2.7.5 Statische Funktionen (Klassenmethoden) ................................... 2.7.6 Parameter, Argument und Wertübergabe .................................. 2.7.7 Methoden vorzeitig mit return beenden .................................... 2.7.8 Nicht erreichbarer Quellcode bei Funktionen ............................. 2.7.9 Rückgabewerte .......................................................................... 2.7.10 Methoden überladen ................................................................. 2.7.11 Vorgegebener Wert für nicht aufgeführte Argumente ................ 2.7.12 Finale lokale Variablen ............................................................... 2.7.13 Rekursive Funktionen ................................................................ 2.7.14 Die Türme von Hanoi ................................................................. Weitere Operatoren ................................................................................. 2.8.1 Bits und Bytes ............................................................................ 2.8.2 Operationen auf Bit-Ebene ........................................................ 2.8.3 Die Verschiebeoperatoren ......................................................... 2.8.4 Ein Bit setzen, löschen, umdrehen und testen ............................ 2.8.5 Bit-Funktionen der Integer- und Long-Klasse ............................. 2.8.6 Der Bedingungsoperator ............................................................ Einfache Benutzereingaben ....................................................................... Zum Weiterlesen ...................................................................................... 127 128 128 129 130 133 136 136 137 138 140 143 146 147 148 148 150 150 151 152 153 154 154 158 160 160 162 164 166 166 167 169 171 171 172 174 175 Klassen und Objekte ........................................................................... 177 3.1 Objektorientierte Programmierung ........................................................... 177 3.1.1 Warum überhaupt OOP? ........................................................... 177 3.1.2 Wiederverwertbarkeit ................................................................ 178 7 Inhalt 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 8 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 ............................................ Neue Objekte erzeugen ............................................................................ 3.4.1 Anlegen eines Exemplars einer Klasse mit dem new-Operator .... 3.4.2 Deklarieren von Referenzvariablen ............................................. 3.4.3 Zugriff auf Variablen und Methoden mit dem ».« ....................... 3.4.4 Konstruktoren nutzen ................................................................ 3.4.5 Die API-Dokumentation ............................................................ Import und Pakete ................................................................................... Mit Referenzen arbeiten ........................................................................... 3.6.1 Die null-Referenz ....................................................................... 3.6.2 Zuweisungen bei Referenzen ..................................................... 3.6.3 Funktionen mit nicht-primitiven Parametern .............................. Identität und Gleichheit ........................................................................... 3.7.1 Identität von Objekten .............................................................. 3.7.2 Gleichheit und die Methode equals() ......................................... Wrapper-Klassen und Autoboxing ............................................................ 3.8.1 Die Basisklasse Number für numerische Wrapper-Objekte ......... 3.8.2 Die Klasse Integer ...................................................................... 3.8.3 Unterschiedliche Ausgabeformate .............................................. 3.8.4 Autoboxing: Boxing und Unboxing ............................................ 3.8.5 Die Boolean-Klasse .................................................................... 3.8.6 Die Klassen Double und Float für Fließkommazahlen ................. Arrays ....................................................................................................... 3.9.1 Deklaration von Arrays .............................................................. 3.9.2 Arrays mit Inhalt ........................................................................ 3.9.3 Die Länge eines Arrays über das Attribut length ......................... 3.9.4 Zugriff auf die Elemente über den Index .................................... 3.9.5 Array-Objekte erzeugen ............................................................. 3.9.6 Fehler bei Arrays ........................................................................ 3.9.7 Vorinitialisierte Arrays ................................................................ 3.9.8 Die erweiterte for-Schleife ......................................................... 3.9.9 Arrays mit nicht-primitiven Elementen ....................................... 3.9.10 Mehrdimensionale Arrays .......................................................... 3.9.11 Die Wahrheit über die Array-Initialisierung ................................ 3.9.12 Mehrere Rückgabewerte ............................................................ 3.9.13 Methode mit variabler Argumentanzahl (Vararg) ........................ 3.9.14 Klonen kann sich lohnen – Arrays vermehren ............................. 3.9.15 Feldinhalte kopieren .................................................................. 3.9.16 Die Klasse Arrays zum Vergleichen, Füllen und Suchen .............. 179 179 180 180 181 181 182 183 183 186 186 187 188 188 190 191 193 193 193 195 197 198 199 200 202 203 204 205 205 206 206 207 209 210 211 212 213 215 216 217 218 219 220 Inhalt 3.10 3.11 3.12 4 Der Einstiegspunkt für das Laufzeitsystem main() ...................................... 3.10.1 Kommandozeilen-Argumente verarbeiten .................................. 3.10.2 Der Rückgabewert von main() und System.exit() ........................ Eigene Pakete schnüren ............................................................................ 3.11.1 Die package-Anweisung ............................................................ 3.11.2 Importieren von Klassen mit import ........................................... 3.11.3 Hierarchische Strukturen und das Default-Package ..................... 3.11.4 Paketnamen ............................................................................... 3.11.5 Klassen mit gleichen Namen in unterschiedlichen Paketen ......... 3.11.6 Statisches Import ....................................................................... 3.11.7 Eine Verzeichnisstruktur für eigene Projekte .............................. Zum Weiterlesen ...................................................................................... 227 227 228 228 229 229 229 230 231 231 232 232 Der Umgang mit Zeichenketten .......................................................... 233 4.1 4.2 4.3 4.4 4.5 4.6 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 Zeichenketten konvertieren .............. 4.3.2 String in primitives Element konvertieren ................................... Veränderbare Zeichenketten mit StringBuffer/StringBuilder ...................... 4.4.1 Anlegen von StringBuffer/StringBuilder-Objekten ...................... 4.4.2 Die Länge eines StringBuffer/-Builder-Objekts ........................... 4.4.3 Daten anhängen ........................................................................ 4.4.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen ........... 4.4.5 Vergleichen von String/StringBuffer/StringBuilder ...................... 4.4.6 hashCode() bei StringBuffer/StringBuilder .................................. 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 Die Klassen Pattern und Matcher ............................................... 4.6.2 Mit MatchResult alle Ergebnisse einsammeln ............................. 233 234 236 238 238 240 242 244 246 248 250 250 251 252 252 253 254 255 256 257 257 258 260 262 262 262 264 9 Inhalt 4.7 4.8 4.9 4.10 5 266 266 267 268 273 275 278 278 279 279 280 281 281 284 285 287 289 Mathematisches .................................................................................. 291 5.1 5.2 5.3 5.4 5.5 5.6 10 Zerlegen von Zeichenketten ...................................................................... 4.7.1 Splitten von Zeichenketten mit split() ........................................ 4.7.2 split() in Pattern ......................................................................... 4.7.3 Die Klasse Scanner ..................................................................... 4.7.4 StringTokenizer .......................................................................... 4.7.5 BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner ......... 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 ....................................................... 4.9.4 Ausgaben mit MessageFormat 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 ..................................... 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 ............................ 291 291 292 293 295 296 297 297 298 299 300 302 303 303 304 305 305 305 306 306 307 307 Inhalt 5.7 5.8 6 Große Zahlen ............................................................................................ 5.7.1 Die Klasse BigInteger ................................................................. 5.7.2 Funktionen von BigInteger ......................................................... 5.7.3 Ganz lange Fakultäten ............................................................... 5.7.4 Große Fließkommazahlen mit BigDecimal .................................. 5.7.5 Mit MathContext komfortabel die Rechengenauigkeit setzen .... Zum Weiterlesen ...................................................................................... 308 308 310 312 313 315 317 Eigene Klassen schreiben .................................................................... 319 6.1 6.2 6.3 6.4 6.5 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 Paketsichtbar ............................................................................. 6.2.3 Kein Public Viewing – Passwörter sind privat ............................. 6.2.4 Wieso nicht freie Methoden und Variablen für alle? ................... 6.2.5 Privat ist nicht ganz privat: Es kommt darauf an, wer’s sieht ....... 6.2.6 Zugriffsmethoden für Attribute deklarieren ................................ 6.2.7 Setter und Getter nach der JavaBeans-Spezifikation ................... Statische Methoden und statische Attribute ............................................. 6.3.1 Warum statische Eigenschaften sinnvoll sind .............................. 6.3.2 Statische Eigenschaften mit static .............................................. 6.3.3 Statische Eigenschaften über Referenzen nutzen? ....................... 6.3.4 Warum die Groß- und Kleinschreibung wichtig ist ..................... 6.3.5 Statische Eigenschaften und Objekteigenschaften ...................... 6.3.6 Statische Variablen zum Datenaustausch .................................... 6.3.7 Statische Blöcke als Klasseninitialisierer ..................................... Konstanten und Aufzählungen .................................................................. 6.4.1 Konstanten über öffentliche statische finale Variablen ............... 6.4.2 Eincompilierte Belegungen der Klassenvariablen ........................ 6.4.3 Typ(un)sicherere Aufzählungen .................................................. 6.4.4 Aufzählungen mit enum ............................................................. Objekte anlegen und zerstören ................................................................. 6.5.1 Konstruktoren schreiben ............................................................ 6.5.2 Der Standard-Konstruktor .......................................................... 6.5.3 Parametrisierte und überladene Konstruktoren .......................... 6.5.4 Konstruktor nimmt ein Objekt vom eigenen Typ an (Copy-Konstruktor) .................................................................... 6.5.5 Einen anderen Konstruktor der gleichen Klasse aufrufen ............ 6.5.6 Initialisierung der Objekt- und Klassenvariablen ......................... 319 319 320 322 324 324 324 325 327 327 328 329 330 331 331 332 333 333 334 335 336 337 337 338 339 342 342 343 344 346 347 350 11 Inhalt 6.6 6.7 6.8 6.9 6.10 12 6.5.7 Finale Werte im Konstruktor und in statischen Blöcken setzen ... 6.5.8 Exemplarinitialisierer (Instanzinitialisierer) .................................. 6.5.9 Ihr fehlt uns nicht – der Garbage-Collector ................................. 6.5.10 Implizit erzeugte String-Objekte ................................................ 6.5.11 Private Konstruktoren, Utility-Klassen, Singleton, Fabriken ........ Assoziationen zwischen Objekten ............................................................. 6.6.1 Unidirektionale 1:1-Beziehung ................................................... 6.6.2 Bidirektionale 1:1-Beziehungen ................................................. 6.6.3 Unidirektionale 1:n-Beziehung ................................................... Vererbung ................................................................................................ 6.7.1 Vererbung in Java ...................................................................... 6.7.2 Spielobjekte modelliert .............................................................. 6.7.3 Einfach- und Mehrfachvererbung ............................................... 6.7.4 Sichtbarkeit protected ............................................................... 6.7.5 Konstruktoren in der Vererbung und super ................................ 6.7.6 Automatische und explizite Typanpassung ................................. 6.7.7 Das Substitutionsprinzip ............................................................ 6.7.8 Typen mit dem binären Operator instanceof testen .................... 6.7.9 Methoden überschreiben ........................................................... 6.7.10 Mit super an die Eltern .............................................................. 6.7.11 Kovariante Rückgabetypen ........................................................ 6.7.12 Array-Typen und Kovarianz ........................................................ 6.7.13 Zusammenfassung zur Sichtbarkeit ............................................. Dynamisches Binden ................................................................................ 6.8.1 Unpolymorph bei privaten, statischen und finalen Methoden .... 6.8.2 Polymorphie bei Konstruktoraufrufen ........................................ 6.8.3 Finale Klassen ............................................................................ 6.8.4 Nicht überschreibbare (finale) Methoden ................................... Abstrakte Klassen und abstrakte Methoden .............................................. 6.9.1 Abstrakte Klassen ...................................................................... 6.9.2 Abstrakte Methoden .................................................................. Schnittstellen ............................................................................................ 6.10.1 Deklarieren von Schnittstellen ................................................... 6.10.2 Implementieren von Schnittstellen ............................................. 6.10.3 Markierungsschnittstellen .......................................................... 6.10.4 Ein Polymorphie-Beispiel mit Schnittstellen ............................... 6.10.5 Die Mehrfachvererbung bei Schnittstellen .................................. 6.10.6 Keine Kollisionsgefahr bei Mehrfachvererbung ........................... 6.10.7 Erweitern von Interfaces – Subinterfaces .................................... 6.10.8 Vererbte Konstanten bei Schnittstellen ...................................... 6.10.9 Schnittstellenmethoden, die nicht implementiert werden müssen ...................................................................................... 6.10.10 Abstrakte Klassen und Schnittstellen im Vergleich ..................... 352 353 355 356 357 359 360 360 361 363 363 364 365 366 367 371 373 375 376 378 380 381 382 383 386 387 389 390 391 391 392 395 395 396 398 398 399 402 403 404 406 406 Inhalt 6.11 6.12 6.13 6.14 7 Geschachtelte (innere) Klassen, Schnittstellen, Aufzählungen .................... 6.11.1 Statische innere Klassen und Schnittstellen ................................ 6.11.2 Mitglieds- oder Elementklassen ................................................. 6.11.3 Lokale Klassen ........................................................................... 6.11.4 Anonyme innere Klassen ............................................................ 6.11.5 this und Vererbung .................................................................... Generische Datentypen ............................................................................ 6.12.1 Einfache Klassenschablonen ....................................................... 6.12.2 Einfache Methodenschablonen .................................................. 6.12.3 Umsetzen der Generics, Typlöschung und Raw-Types ................ 6.12.4 Einschränken der Typen ............................................................. 6.12.5 Generics und Vererbung, Invarianz ............................................ 6.12.6 Wildcards .................................................................................. Die Spezial-Oberklasse Enum ................................................................... 6.13.1 Methoden auf Enum-Objekten .................................................. 6.13.2 enum mit eigenen Konstruktoren und Methoden ...................... Dokumentationskommentare mit JavaDoc ................................................ 6.14.1 Einen Dokumentationskommentar setzen .................................. 6.14.2 Mit javadoc eine Dokumentation erstellen ................................. 6.14.3 HTML-Tags in Dokumentationskommentaren ............................ 6.14.4 Generierte Dateien .................................................................... 6.14.5 Dokumentationskommentare im Überblick ................................ 6.14.6 JavaDoc und Doclets ................................................................. 6.14.7 Veraltete (deprecated) Klassen, Konstruktoren und Methoden .... 407 408 409 413 413 416 418 419 420 420 422 424 425 426 426 428 430 431 433 433 433 434 435 436 Angewandte Objektorientierung ........................................................ 439 7.1 7.2 7.3 Schnittstellen in der Anwendung .............................................................. 7.1.1 CharSequence als Beispiel einer Schnittstelle ............................. 7.1.2 Die Schnittstelle Iterable ............................................................ 7.1.3 Funktionszeiger ......................................................................... 7.1.4 Implementierung einer verketteten Liste .................................... Design-Pattern (Entwurfsmuster) .............................................................. 7.2.1 Design-Pattern .......................................................................... 7.2.2 Das Beobachter-Pattern (Observer/Observable) ......................... 7.2.3 Ereignisse über Listener ............................................................. 7.2.4 Multicast und Unicast ................................................................ JavaBean .................................................................................................. 7.3.1 Properties (Eigenschaften) ......................................................... 7.3.2 Einfache Eigenschaften .............................................................. 7.3.3 Indizierte Eigenschaften ............................................................. 7.3.4 Gebundene Eigenschaften .......................................................... 7.3.5 Veto-Eigenschaften – dagegen! .................................................. 439 439 441 443 445 446 447 448 451 454 455 455 456 456 457 459 13 Inhalt 8 Exceptions ........................................................................................... 465 8.1 8.2 8.3 8.4 8.5 9 465 465 466 468 468 469 472 475 476 477 477 478 479 480 481 481 483 484 485 486 486 487 488 489 490 Die Funktionsbibliothek ...................................................................... 491 9.1 9.2 9.3 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 ......................................................... 8.3.5 Rückgabewerte bei ausgelösten Ausnahmen .............................. Der Stack-Trace ........................................................................................ 8.4.1 Stack-Trace erfragen .................................................................. Assertions ................................................................................................. 8.5.1 Assertions in eigenen Programmen nutzen ................................. 8.5.2 Assertions aktivieren .................................................................. Die Java-Klassenphilosophie ..................................................................... 9.1.1 Übersicht über die Pakete der Standardbibliothek ...................... Object ist die Mutter aller Oberklassen ..................................................... 9.2.1 Klassenobjekte ........................................................................... 9.2.2 Objektidentifikation mit toString() ............................................. 9.2.3 Objektgleichheit mit equals() und Identität ................................ 9.2.4 Klonen eines Objekts mit clone() ............................................... 9.2.5 Hashcodes über hashCode() liefern ............................................ 9.2.6 Aufräumen mit finalize() ............................................................ 9.2.7 Synchronisation ......................................................................... Klassenlader (Class Loader) ....................................................................... 9.3.1 Woher die kleinen Klassen kommen .......................................... 9.3.2 Setzen des Klassenpfades ........................................................... 491 491 498 498 498 500 504 507 510 512 512 513 514 Inhalt 9.4 9.5 9.6 9.7 9.8 9.9 9.3.3 Die wichtigsten drei Typen von Klassenladern ............................ 9.3.4 Der java.lang.ClassLoader .......................................................... 9.3.5 Hot Deployment mit dem URL-ClassLoader ............................... 9.3.6 Das jre/lib/endorsed-Verzeichnis ............................................... 9.3.7 getContextClassLoader() vom Thread ......................................... Die Utility-Klasse System und Properties .................................................. 9.4.1 Systemeigenschaften der Java-Umgebung .................................. 9.4.2 line.separator ............................................................................. 9.4.3 Browser-Version abfragen .......................................................... 9.4.4 Property von der Konsole aus setzen ......................................... 9.4.5 Umgebungsvariablen des Betriebssystems .................................. 9.4.6 Einfache Zeitmessung und Profiling ............................................ Ausführen externer Programme und Skripte ............................................. 9.5.1 ProcessBuilder und Prozesskontrolle mit Process ....................... 9.5.2 Einen Browser/E-Mail-Client/Editor aufrufen ............................. 9.5.3 Ausführen von Skripten ............................................................. Benutzereinstellungen .............................................................................. 9.6.1 Benutzereinstellungen in Windows-Registry oder XML-Dokumenten ..................................................................... 9.6.2 Einträge einfügen, auslesen und löschen .................................... 9.6.3 Auslesen der Daten und Schreiben in anderem Format .............. 9.6.4 Auf Ereignisse horchen .............................................................. 9.6.5 Zugriff auf die gesamte Windows-Registry ................................. Musik abspielen ....................................................................................... 9.7.1 Die Arbeit mit AudioClip ........................................................... 9.7.2 Java Sound API .......................................................................... Annotationen ........................................................................................... 9.8.1 Annotationstypen @Override, @Deprecated, @SuppressWarnings .................................................................. 9.8.2 Common Annotations ................................................................ 9.8.3 Annotationen für Web-Services ................................................. 9.8.4 Annotationen für XML-Mapping ................................................ Zum Weiterlesen ...................................................................................... 515 515 517 519 520 520 521 522 523 523 524 525 526 526 529 530 532 532 534 536 536 536 537 537 538 539 540 541 542 542 542 10 Threads und nebenläufige Programmierung ....................................... 543 10.1 10.2 Nebenläufigkeit ........................................................................................ 10.1.1 Threads und Prozesse ................................................................ 10.1.2 Wie parallele Programme die Geschwindigkeit steigern können ...................................................................................... 10.1.3 Was Java für Nebenläufigkeit alles bietet ................................... Threads erzeugen ..................................................................................... 10.2.1 Threads über die Schnittstelle Runnable implementieren ........... 543 543 544 546 546 546 15 Inhalt 10.3 10.4 10.5 10.6 16 10.2.2 Thread mit Runnable starten ...................................................... 10.2.3 Der Name eines Threads ............................................................ 10.2.4 Die Klasse Thread erweitern ...................................................... 10.2.5 Wer bin ich? .............................................................................. Die Zustände eines Threads ...................................................................... 10.3.1 Threads schlafen ........................................................................ 10.3.2 Mit yield() auf Rechenzeit verzichten ......................................... 10.3.3 Das Ende eines Threads ............................................................. 10.3.4 UncaughtExceptionHandler für unbehandelte Ausnahmen ......... 10.3.5 Einen Thread höflich mit Interrupt beenden ............................... 10.3.6 Der stop() von außen und die Rettung mit ThreadDeath ............ 10.3.7 Ein Rendezvous mit join() .......................................................... 10.3.8 Barrier und Austausch mit Exchanger ......................................... 10.3.9 Arbeit niederlegen und wieder aufnehmen ................................ 10.3.10 Priorität ..................................................................................... 10.3.11 Der Thread ist ein Dämon .......................................................... Der Ausführer (Executor) kommt .............................................................. 10.4.1 Die Schnittstelle Executor .......................................................... 10.4.2 Die Thread-Pools ....................................................................... 10.4.3 Threads mit Rückgabe über Callable .......................................... 10.4.4 Mehrere Callable abarbeiten ...................................................... 10.4.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen .................................................................. Synchronisation über kritische Abschnitte ................................................. 10.5.1 Gemeinsam genutzte Daten ....................................................... 10.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte ... 10.5.3 Punkte parallel initialisieren ....................................................... 10.5.4 i++ sieht atomar aus, ist es aber nicht ........................................ 10.5.5 Kritische Abschnitte schützen .................................................... 10.5.6 Schützen mit ReentrantLock ...................................................... 10.5.7 Synchronisieren mit synchronized .............................................. 10.5.8 Synchronized-Methoden der Klasse StringBuffer ........................ 10.5.9 Mit synchronized synchronisierte Blöcke .................................... 10.5.10 Dann machen wir doch gleich alles synchronisiert! ..................... 10.5.11 Lock-Freigabe im Fall von Exceptions ......................................... 10.5.12 Mit synchronized nachträglich synchronisieren .......................... 10.5.13 Monitore sind reentrant – gut für die Geschwindigkeit ............... 10.5.14 Synchronisierte Methodenaufrufe zusammenfassen .................... 10.5.15 Deadlocks .................................................................................. Synchronisation über Warten und Benachrichtigen ................................... 10.6.1 Die Schnittstelle Condition ........................................................ 10.6.2 Beispiel: Erzeuger-Verbraucher-Programm ................................. 547 549 550 552 553 553 555 555 556 557 559 560 562 563 563 564 566 566 568 569 572 572 573 573 573 574 576 577 578 582 583 584 585 586 587 588 589 590 592 593 596 Inhalt 10.6.3 Warten mit wait() und Aufwecken mit notify() ........................... 10.6.4 Falls der Lock fehlt: IllegalMonitorStateException ...................... 10.6.5 Semaphor .................................................................................. 10.7 Atomare Operationen und frische Werte mit volatile ................................ 10.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen ............... 10.7.2 Das Paket java.util.concurrent.atomic ........................................ 10.8 Mit dem Thread verbundene Variablen .................................................... 10.8.1 ThreadLocal ............................................................................... 10.8.2 InheritableThreadLocal .............................................................. 10.9 Gruppen von Threads in einer Thread-Gruppe .......................................... 10.9.1 Aktive Threads in der Umgebung ............................................... 10.9.2 Etwas über die aktuelle Thread-Gruppe herausfinden ................ 10.9.3 Threads in einer Thread-Gruppe anlegen ................................... 10.9.4 Methoden von Thread und ThreadGroup im Vergleich ............... 10.10 Zeitgesteuerte Abläufe ............................................................................. 10.10.1 Die Klassen Timer und TimerTask .............................................. 10.10.2 Job-Scheduler Quartz ................................................................ 10.11 Einen Abbruch der virtuellen Maschine erkennen ..................................... 10.12 Zum Weiterlesen ...................................................................................... 600 601 603 606 606 607 608 609 610 612 612 613 615 618 619 619 621 621 622 11 Raum und Zeit ..................................................................................... 623 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 Weltzeit ................................................................................................... Wichtige Datum-Klassen im Überblick ...................................................... Sprachen der Länder ................................................................................. 11.3.1 Sprachen und Regionen über Locale-Objekte ............................. Internationalisierung und Lokalisierung .................................................... 11.4.1 ResourceBundle-Objekte und Ressource-Dateien ...................... 11.4.2 Ressource-Dateien zur Lokalisierung .......................................... 11.4.3 Die Klasse ResourceBundle ........................................................ 11.4.4 Ladestrategie für ResourceBundle-Objekte ................................ Zeitzonen ................................................................................................. 11.5.1 Zeitzonen durch die Klasse TimeZone repräsentieren ................. Die Klasse Date ........................................................................................ 11.6.1 Objekte erzeugen und Methoden nutzen ................................... Calendar und GregorianCalendar .............................................................. 11.7.1 Die abstrakte Klasse Calendar .................................................... 11.7.2 Der gregorianische Kalender ...................................................... 11.7.3 Ostertage ................................................................................... 11.7.4 Abfragen und Setzen von Datumselementen .............................. Formatieren und Parsen von Datumsangaben ........................................... 11.8.1 Ausgaben mit printf() ................................................................. 11.8.2 Mit DateFormat und SimpleDateFormat formatieren ................. 623 624 624 625 628 629 629 630 631 632 632 634 634 635 636 636 639 641 647 647 647 17 Inhalt 11.9 11.8.3 Parsen von Datumswerten ......................................................... 652 Zum Weiterlesen ...................................................................................... 654 12 Datenstrukturen und Algorithmen ..................................................... 655 12.1 12.2 12.3 12.4 12.5 12.6 18 Datenstrukturen und die Collection-API ................................................... 12.1.1 Designprinzip mit Schnittstellen, abstrakten Klassen, konkreten Klassen ...................................................................... 12.1.2 Die Basis-Schnittstellen Collection und Map .............................. 12.1.3 Das erste Programm mit Container-Klassen ................................ 12.1.4 Die Schnittstelle Collection ........................................................ 12.1.5 Schnittstellen, die Collection erweitern, und Map ...................... 12.1.6 Konkrete Container-Klassen ....................................................... 12.1.7 Welche Klasse nehmen? ............................................................ 12.1.8 Generische Datentypen in der Collection-API ............................ 12.1.9 Die Schnittstelle Iterable und das erweiterte for ......................... 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 ArrayList oder LinkedList? Speicherung im Feld oder in einer verketteten Liste ........................................................................ 12.3.2 Die Schnittstelle List .................................................................. 12.3.3 ArrayList .................................................................................... 12.3.4 LinkedList .................................................................................. 12.3.5 Der Feld-Adapter Arrays.asList() ................................................ 12.3.6 toArray() von Collection verstehen – die Gefahr einer Falle erkennen ................................................................................... 12.3.7 Primitive Elemente in den Collection-Datenstrukturen ............... 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! .................................................... 655 656 657 657 658 660 662 663 663 664 665 665 667 669 669 670 670 677 680 681 682 684 685 685 687 688 689 692 694 695 698 698 699 699 Inhalt 12.7 Queues (Schlangen) und Deques .............................................................. 12.7.1 Die Schnittstelle Queue ............................................................. 12.7.2 Blockierende Queues und Prioritätswarteschlangen ................... 12.7.3 Deque-Klassen ........................................................................... 12.8 Assoziative Speicher ................................................................................. 12.8.1 Die Klassen HashMap und TreeMap .......................................... 12.8.2 Einfügen und Abfragen der Datenstruktur .................................. 12.8.3 Die Bedeutung von equals(), hashCode() und IdentityHashMap ....................................................................... 12.8.4 Elemente im Assoziativspeicher müssen unveränderbar bleiben ...................................................................................... 12.8.5 Aufzählungen und Sichten auf den Assoziativspeicher ................ 12.8.6 Der Gleichheitstest, Hash-Wert und Klon einer Hash-Tabelle ..... 12.8.7 Die Arbeitsweise einer Hash-Tabelle .......................................... 12.8.8 Multi-Maps ............................................................................... 12.9 Die Properties-Klasse ............................................................................... 12.9.1 Properties setzen und lesen ....................................................... 12.9.2 Properties verketten .................................................................. 12.9.3 Eigenschaften ausgeben ............................................................. 12.9.4 Hierarchische Eigenschaften ....................................................... 12.9.5 Properties speichern .................................................................. 12.9.6 Klassenbeziehungen: Properties und Hashtable .......................... 12.10 Algorithmen in Collections ....................................................................... 12.10.1 Listenoperationen: Ersetzen, Kopieren, Füllen, Umdrehen, Rotieren, Durchmischen ............................................................ 12.10.2 Mit der Halbierungssuche nach Elementen fahnden ................... 12.10.3 Nicht-änderbare Datenstrukturen .............................................. 12.10.4 Häufigkeit eines Elements .......................................................... 12.10.5 nCopies() ................................................................................... 12.10.6 Singletons .................................................................................. 12.11 Synchronisation der Datenstrukturen ........................................................ 12.11.1 Lock-Free-Algorithmen aus java.util.concurrent ......................... 12.11.2 Wrapper zur Synchronisation ..................................................... 12.11.3 CopyOnWriteArrayList und CopyOnWriteArraySet ..................... 12.12 Die Klasse BitSet für Bitmengen ................................................................ 12.12.1 Ein BitSet anlegen, füllen und erfragen ....................................... 12.12.2 Mengenorientierte Operationen ................................................ 12.12.3 Funktionsübersicht .................................................................... 12.12.4 Primzahlen in einem BitSet verwalten ........................................ 700 700 701 702 702 702 704 707 709 709 712 712 715 715 715 715 717 717 717 719 719 720 721 723 723 723 724 725 725 726 727 727 727 728 729 730 19 Inhalt 13 Dateien und Datenströme ................................................................... 731 13.1 13.2 13.3 13.4 20 Datei und Verzeichnis ............................................................................... 13.1.1 Dateien und Verzeichnisse mit der Klasse File ............................ 13.1.2 Verzeichnis oder Datei? Existiert es? .......................................... 13.1.3 Verzeichnis- und Dateieigenschaften/-attribute ......................... 13.1.4 Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher ................ 13.1.5 Umbenennen und Verzeichnisse anlegen ................................... 13.1.6 Verzeichnisse listen und Dateien filtern ...................................... 13.1.7 Dateien berühren, neue Dateien anlegen, temporäre Dateien .... 13.1.8 Dateien und Verzeichnisse löschen ............................................ 13.1.9 Verzeichnisse nach Dateien iterativ durchsuchen ....................... 13.1.10 URL- und URI-Objekte aus einem File-Objekt ableiten .............. 13.1.11 Mit Locking Dateien sperren ...................................................... 13.1.12 Sicherheitsprüfung ..................................................................... 13.1.13 Mime-Typen mit dem JavaBeans Activation Framework (JAF) .... 13.1.14 Zugriff auf SMB-Server mit jCIFS ................................................ Dateien mit wahlfreiem Zugriff ................................................................. 13.2.1 Ein RandomAccessFile zum Lesen und Schreiben öffnen ............ 13.2.2 Aus dem RandomAccessFile lesen .............................................. 13.2.3 Schreiben mit RandomAccessFile ............................................... 13.2.4 Die Länge des RandomAccessFile ............................................... 13.2.5 Hin und her in der Datei ............................................................ 13.2.6 Wahlfreier Zugriff und Pufferung mit Unified I/O ....................... Stream-Klassen und Reader/Writer am Beispiel von Dateien ..................... 13.3.1 Mit dem FileWriter Texte in Dateien schreiben .......................... 13.3.2 Zeichen mit der Klasse FileReader lesen ..................................... 13.3.3 Kopieren mit FileOutputStream und FileInputStream ................. 13.3.4 Das FileDescriptor-Objekt .......................................................... Basisklassen für die Ein-/Ausgabe ............................................................. 13.4.1 Die abstrakten Basisklassen ........................................................ 13.4.2 Übersicht über Ein-/Ausgabeklassen .......................................... 13.4.3 Die abstrakte Basisklasse OutputStream ..................................... 13.4.4 Die Schnittstellen Closeable und Flushable ................................ 13.4.5 Ein Datenschlucker .................................................................... 13.4.6 Die abstrakte Basisklasse InputStream ........................................ 13.4.7 Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar-Archiven laden ........................................................ 13.4.8 Ströme mit SequenceInputStream zusammensetzen ................... 13.4.9 Die abstrakte Basisklasse Writer ................................................. 13.4.10 Die Schnittstelle Appendable ..................................................... 13.4.11 Die abstrakte Basisklasse Reader ................................................ 732 732 734 735 737 740 740 743 745 746 747 747 748 748 749 750 751 751 754 754 754 755 755 756 758 759 762 762 762 763 764 766 766 767 768 769 770 772 773 Inhalt 13.5 Formatierte Textausgaben ........................................................................ 13.5.1 Die Klassen PrintWriter und PrintStream ................................... 13.5.2 System.out, System.err und System.in ........................................ 13.5.3 Geschützte Passwort-Eingaben mit der Klasse Console ............... 13.6 Schreiben und Lesen aus Strings und Byte-Feldern ................................... 13.6.1 Mit dem StringWriter ein String-Objekt füllen ........................... 13.6.2 CharArrayWriter ........................................................................ 13.6.3 StringReader und CharArrayReader ............................................ 13.6.4 Mit ByteArrayOutputStream in ein Byte-Feld schreiben ............. 13.6.5 Mit ByteArrayInputStream aus einem Byte-Feld lesen ................ 13.7 Datenströme filtern und verketten ............................................................ 13.7.1 Streams als Filter verketten ........................................................ 13.7.2 Gepufferte Ausgaben mit BufferedWriter und BufferedOutputStream ............................................................... 13.7.3 Gepufferte Eingaben mit BufferedReader und BufferedInputStream .................................................................. 13.7.4 LineNumberReader zählt automatisch Zeilen mit ....................... 13.7.5 Daten mit der Klasse PushbackReader zurücklegen .................... 13.7.6 DataOutputStream/DataInputStream ......................................... 13.7.7 Basisklassen für Filter ................................................................. 13.7.8 Die Basisklasse FilterWriter ........................................................ 13.7.9 Ein LowerCaseWriter ................................................................. 13.7.10 Eingaben mit der Klasse FilterReader filtern ............................... 13.8 Vermittler zwischen Byte-Streams und Unicode-Strömen ......................... 13.8.1 Datenkonvertierung durch den OutputStreamWriter ................. 13.8.2 Automatische Konvertierungen mit dem InputStreamReader ..... 13.9 Kommunikation zwischen Threads mit Pipes ............................................ 13.9.1 PipedOutputStream und PipedInputStream ............................... 13.9.2 PipedWriter und PipedReader ................................................... 13.10 Datenkompression ................................................................................... 13.10.1 Java-Unterstützung beim Komprimieren und Zusammenpacken ...................................................................... 13.10.2 Datenströme komprimieren ....................................................... 13.10.3 Zip-Archive ................................................................................ 13.10.4 Jar-Archive ................................................................................ 13.11 Prüfsummen ............................................................................................. 13.11.1 Die Schnittstelle Checksum ........................................................ 13.11.2 Die Klasse CRC32 ...................................................................... 13.11.3 Die Adler32-Klasse .................................................................... 13.12 Persistente Objekte und Serialisierung ...................................................... 13.12.1 Objekte mit der Standard-Serialisierung speichern und lesen ..... 13.12.2 Zwei einfache Anwendungen der Serialisierung .......................... 13.12.3 Die Schnittstelle Serializable ...................................................... 774 775 779 781 781 782 783 784 785 786 786 787 787 789 791 792 795 795 795 796 798 799 799 800 801 801 803 805 806 806 810 816 816 817 818 819 820 821 823 824 21 Inhalt 13.12.4 Nicht serialisierbare Attribute aussparen .................................... 13.12.5 Das Abspeichern selbst in die Hand nehmen .............................. 13.12.6 Tiefe Objektkopien .................................................................... 13.12.7 Versionenverwaltung und die SUID ........................................... 13.12.8 Wie die ArrayList serialisiert ....................................................... 13.12.9 Probleme mit der Serialisierung ................................................. 13.12.10 Serialisieren in XML-Dateien ...................................................... 13.12.11 JavaBeans Persistence ................................................................ 13.12.12 XStream ..................................................................................... 13.13 Tokenizer ................................................................................................. 13.13.1 StreamTokenizer ........................................................................ 13.13.2 CSV-(Comma Separated Values-)Dateien verarbeiten ................. 13.14 Zum Weiterlesen ...................................................................................... 826 827 831 832 834 835 835 836 838 838 838 841 842 14 Die eXtensible Markup Language (XML) ............................................ 843 14.1 14.2 14.3 14.4 14.5 22 Auszeichnungssprachen ............................................................................ 14.1.1 Die Standard Generalized Markup Language (SGML) ................. 14.1.2 Extensible Markup Language (XML) ........................................... Eigenschaften von XML-Dokumenten ....................................................... 14.2.1 Elemente und Attribute ............................................................. 14.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten ... 14.2.3 Schema – eine Alternative zu DTD ............................................. 14.2.4 Namensraum (Namespace) ........................................................ 14.2.5 XML-Applikationen ................................................................... Die Java-APIs für XML .............................................................................. 14.3.1 Das Document Object Model (DOM) ........................................ 14.3.2 Simple API for XML Parsing (SAX) .............................................. 14.3.3 Pull-API StAX ............................................................................ 14.3.4 Java Document Object Model (JDOM) ...................................... 14.3.5 JAXP als Java-Schnittstelle zu XML ............................................. 14.3.6 DOM-Bäume einlesen mit JAXP ................................................. Serielle Verarbeitung mit StAX .................................................................. 14.4.1 Unterschiede der Verarbeitungsmodelle .................................... 14.4.2 XML-Dateien mit dem Cursor-Verfahren lesen ........................... 14.4.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten ................ 14.4.4 Mit Filtern arbeiten .................................................................... 14.4.5 XML-Dokumente schreiben ....................................................... Serielle Verarbeitung von XML mit SAX .................................................... 14.5.1 Schnittstellen von SAX ............................................................... 14.5.2 SAX-Parser erzeugen .................................................................. 14.5.3 Die wichtigsten Methoden der Schnittstelle ContentHandler ..... 14.5.4 ErrorHandler und EntityResolver ................................................ 843 843 844 844 844 846 849 852 853 853 854 854 854 855 855 856 856 857 858 860 861 862 865 865 866 866 868 Inhalt 14.6 XML-Dateien mit JDOM verarbeiten ........................................................ 14.6.1 JDOM beziehen ......................................................................... 14.6.2 Paketübersicht ........................................................................... 14.6.3 Die Document-Klasse ................................................................ 14.6.4 Eingaben aus der Datei lesen ..................................................... 14.6.5 Das Dokument im XML-Format ausgeben .................................. 14.6.6 Der Dokumenttyp ...................................................................... 14.6.7 Elemente ................................................................................... 14.6.8 Zugriff auf Elementinhalte .......................................................... 14.6.9 Liste mit Unterelementen erzeugen ........................................... 14.6.10 Neue Elemente einfügen und ändern ........................................ 14.6.11 Attributinhalte lesen und ändern .............................................. 14.6.12 XPath ....................................................................................... 14.7 Transformationen mit XSLT ...................................................................... 14.7.1 Templates und XPath als Kernelemente von XSLT ...................... 14.7.2 Umwandlung von XML-Dateien mit JDOM und JAXP ................ 14.8 Java Architecture for XML Binding (JAXB) ................................................. 14.8.1 Beans für JAXB aufbauen ........................................................... 14.8.2 JAXBContext und die Marshaller/Unmarshaller .......................... 14.9 HTML-Dokumente einlesen ...................................................................... 14.10 Zum Weiterlesen ...................................................................................... 869 869 870 871 872 873 873 874 876 879 879 882 884 887 887 889 890 890 892 893 894 15 Grafische Oberflächen mit Swing ....................................................... 895 15.1 15.2 15.3 15.4 15.5 Das Abstract Window Toolkit und Swing .................................................. 15.1.1 Abstract Window Toolkit (AWT) ................................................ 15.1.2 Java Foundation Classes ............................................................. 15.1.3 Was Swing von AWT unterscheidet ........................................... 15.1.4 Die Klasse Toolkit ...................................................................... Fenster unter grafischen Oberflächen ....................................................... 15.2.1 Swing-Fenster darstellen ............................................................ 15.2.2 AWT-Fenster darstellen ............................................................. 15.2.3 Sichtbarkeit des Fensters ............................................................ 15.2.4 Größe und Position des Fensters verändern ............................... 15.2.5 Unterklassen der Fenster-Klassen bilden .................................... 15.2.6 Fenster- und Dialog-Dekoration ................................................ 15.2.7 Dynamisches Layout während einer Größenänderung ................ Beschriftungen (JLabel) ............................................................................. 15.3.1 Mehrzeiliger Text, HTML in der Darstellung ............................... Icon und ImageIcon für Bilder auf Swing-Komponenten ........................... 15.4.1 Die Schnittstelle Icon ................................................................. Es tut sich was – Ereignisse beim AWT ...................................................... 15.5.1 Die Klasse AWTEvent ................................................................ 895 895 896 899 899 900 900 902 903 903 904 905 905 906 909 909 911 913 913 23 Inhalt 15.5.2 Events auf verschiedenen Ebenen .............................................. 15.5.3 Swings Ereignisquellen und Horcher (Listener) ........................... 15.5.4 Listener implementieren ............................................................ 15.5.5 Listener bei dem Ereignisauslöser anmelden/abmelden .............. 15.5.6 Aufrufen der Listener im AWT-Event-Thread .............................. 15.5.7 Adapterklassen nutzen ............................................................... 15.5.8 Innere Mitgliedsklassen und innere anonyme Klassen ................ 15.6 Schaltflächen ............................................................................................ 15.6.1 Normale Schaltflächen (JButton) ................................................ 15.6.2 Der aufmerksame ActionListener ............................................... 15.6.3 Basisklasse AbstractButton ......................................................... 15.6.4 Wechselknopf (JToggleButton) ................................................... 15.7 Swing Action ............................................................................................ 15.7.1 javax.swing.Action ..................................................................... 15.7.2 Eigenschaften der Action-Objekte .............................................. 15.8 JComponent und Component als Basis aller Komponenten ....................... 15.8.1 Tooltips ..................................................................................... 15.8.2 Rahmen (Border) ....................................................................... 15.8.3 Fokus und Navigation ................................................................ 15.8.4 Ereignisse jeder Komponente ..................................................... 15.8.5 Die Größe und Position einer Komponente ................................ 15.8.6 Komponenten-Ereignisse ........................................................... 15.8.7 Hinzufügen von Komponenten .................................................. 15.8.8 UI-Delegate – der wahre Zeichner .............................................. 15.8.9 Undurchsichtige (opak) Komponente ......................................... 15.8.10 Properties und Listener für Änderungen ..................................... 15.9 Container ................................................................................................. 15.9.1 Standardcontainer (JPanel) ......................................................... 15.9.2 Bereich mit automatischen Rollbalken (JScrollPane) ................... 15.9.3 Reiter (JTabbedPane) ................................................................. 15.9.4 Teilung-Komponente (JSplitPane) .............................................. 15.10 Alles Auslegungssache: die Layoutmanager ............................................... 15.10.1 Übersicht über Layoutmanager .................................................. 15.10.2 Zuweisen eines Layoutmanagers ................................................ 15.10.3 Im Fluss mit FlowLayout ............................................................ 15.10.4 Mit BorderLayout in allen Himmelsrichtungen ........................... 15.10.5 Rasteranordnung mit GridLayout ............................................... 15.10.6 Der GridBagLayout-Manager ..................................................... 15.10.7 Null-Layout ............................................................................... 15.10.8 BoxLayout ................................................................................. 15.10.9 Weitere Layoutmanager ............................................................. 24 914 916 916 919 919 920 922 923 923 925 927 929 929 930 930 931 931 932 935 936 938 939 940 940 943 943 944 944 945 946 947 947 947 948 949 951 954 955 960 961 962 Inhalt 15.11 Rollbalken und Schieberegler ................................................................... 15.11.1 Schieberegler (JSlider) ................................................................ 15.11.2 Rollbalken (JScrollBar) ................................................................ 15.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen ................................... 15.12.1 Kontrollfelder (JCheckBox) ......................................................... 15.12.2 ItemSelectable, ItemListener und das ItemEvent ........................ 15.12.3 Sich gegenseitig ausschließende Optionen (JRadioButton) ......... 15.13 Fortschritte bei Operationen überwachen ................................................. 15.13.1 Fortschrittsbalken (JProgressBar) ................................................ 15.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor) ....................... 15.14 Menüs und Symbolleisten ........................................................................ 15.14.1 Die Menüleisten und die Einträge .............................................. 15.14.2 Menüeinträge definieren ........................................................... 15.14.3 Einträge durch Action-Objekte beschreiben ............................... 15.14.4 Mit der Tastatur: Mnemonics und Shortcut ................................ 15.14.5 Der Tastatur-Shortcut (Accelerator) ........................................... 15.14.6 Tastenkürzel (Mnemonics) ......................................................... 15.14.7 Symbolleisten alias Toolbars ...................................................... 15.14.8 Popup-Menüs ............................................................................ 15.14.9 System-Tray nutzen ................................................................... 15.15 Das Model-View-Controller-Konzept ....................................................... 15.16 Auswahlmenüs, Listen und Spinner .......................................................... 15.16.1 Auswahlmenü (JComboBox) ...................................................... 15.16.2 Zuordnung einer Taste mit einem Eintrag ................................... 15.16.3 Datumsauswahl ......................................................................... 15.16.4 Listen (JList) ............................................................................... 15.16.5 Drehfeld (JSpinner) .................................................................... 15.17 Texteingabefelder ..................................................................................... 15.17.1 Text in einer Eingabezeile .......................................................... 15.17.2 Die Oberklasse der Text-Komponenten (JTextComponent) ........ 15.17.3 Geschützte Eingaben (JPasswordField) ....................................... 15.17.4 Validierende Eingabefelder (JFormattedTextField) ...................... 15.17.5 Einfache mehrzeilige Textfelder (JTextArea) ............................... 15.17.6 Editor-Klasse (JEditorPane) ........................................................ 15.18 Tabellen (JTable) ...................................................................................... 15.18.1 Ein eigenes Tabellen-Model ....................................................... 15.18.2 Basisklasse für eigene Modelle (AbstractTableModel) ................ 15.18.3 Vorgefertigtes Standard-Modell (DefaultTableModel) ................ 15.18.4 Ein eigener Renderer für Tabellen .............................................. 15.18.5 Zell-Editoren .............................................................................. 15.18.6 Größe und Umrandung der Zellen .............................................. 15.18.7 Spalteninformationen ................................................................ 962 962 964 968 968 971 972 974 974 976 976 977 978 980 981 981 983 983 986 989 990 992 992 996 997 997 1002 1004 1004 1005 1006 1006 1008 1010 1013 1014 1015 1018 1019 1023 1024 1024 25 Inhalt 15.19 15.20 15.21 15.22 15.23 15.24 15.25 15.26 15.27 26 15.18.8 Tabellenkopf von Swing-Tabellen ............................................... 15.18.9 Selektionen einer Tabelle ........................................................... 15.18.10 Automatisches Sortieren und Filtern mit RowSorter ................... 15.18.11 Ein professionelles Tabellenlayout mit JGrid .............................. Bäume (JTree) ........................................................................................... 15.19.1 JTree und sein TreeModel und TreeNode ................................... 15.19.2 Selektionen bemerken ............................................................... 15.19.3 Das TreeModel von JTree .......................................................... JRootPane, JLayeredPane und JDesktopPane ............................................ 15.20.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane) ... 15.20.2 JLayeredPane ............................................................................. 15.20.3 JDesktopPane und die Kinder JInternalFrame ............................ Dialoge und Window-Objekte .................................................................. 15.21.1 JWindow und JDialog ................................................................ 15.21.2 Modal oder nicht-modal ............................................................ 15.21.3 Standarddialoge mit JOptionPane .............................................. 15.21.4 Der Farbauswahldialog JColorChooser ....................................... 15.21.5 Der Dateiauswahldialog ............................................................. Flexibles Java-Look & Feel ........................................................................ 15.22.1 L & F global setzen .................................................................... 15.22.2 UIManager ................................................................................ 15.22.3 Verbessern des Aussehens unter Windows mit JGoodies Looks ... Die Zwischenablage (Clipboard) ................................................................ 15.23.1 Clipboard-Objekte ..................................................................... 15.23.2 Auf den Inhalt zugreifen mit Transferable ................................... 15.23.3 DataFlavor ist das Format der Daten in der Zwischenablage ....... 15.23.4 Einfügungen in der Zwischenablage erkennen ............................ 15.23.5 Drag & Drop .............................................................................. Undo durchführen .................................................................................... AWT, Swing und die Threads .................................................................... 15.25.1 Ereignisschlange (EventQueue) und AWT-Event-Thread ............. 15.25.2 Swing ist nicht Thread-sicher ..................................................... 15.25.3 Swing-Elemente mit invokeLater() und invokeAndWait() bedienen ................................................................................... 15.25.4 SwingWorker ............................................................................. 15.25.5 Eigene Ereignisse in die Queue setzen ........................................ 15.25.6 Auf alle Ereignisse hören ............................................................ Barrierefreiheit mit der Java Accessibility API ............................................ Benutzerinteraktionen automatisieren ...................................................... 15.27.1 Automatisch in die Tasten hauen ............................................... 15.27.2 Mausoperationen ...................................................................... 15.27.3 Methoden zur Zeitsteuerung ...................................................... 1025 1025 1026 1027 1028 1028 1029 1030 1032 1032 1033 1033 1035 1035 1036 1036 1038 1040 1044 1044 1044 1046 1046 1046 1047 1048 1050 1050 1051 1053 1053 1054 1055 1056 1058 1059 1059 1060 1061 1062 1062 Inhalt 15.27.4 Screenshots ............................................................................... 15.27.5 MouseInfo und PointerInfo ........................................................ 15.28 Zeitliches Ausführen mit dem javax.swing.Timer ....................................... 15.29 Alternativen zu AWT und Swing ............................................................... 15.29.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor ......... 15.29.2 SWT (Standard Widget Toolkit) .................................................. 15.30 Zum Weiterlesen ...................................................................................... 1063 1063 1064 1064 1065 1065 1067 16 Grafikprogrammierung ........................................................................ 1069 16.1 16.2 16.3 16.4 16.5 Grundlegendes zum Zeichnen ................................................................... 16.1.1 Die paint()-Methode für das AWT-Frame ................................... 16.1.2 Zeichen von Inhalten mit JFrame ............................................... 16.1.3 Auffordern zum Neuzeichnen mit repaint() ................................ 16.1.4 Grundbegriffe: Koordinaten, Punkte, Pixel ................................. 16.1.5 Die ereignisorientierte Programmierung ändert Fensterinhalte ... 16.1.6 Java 2D-API ............................................................................... Einfache Zeichenfunktionen ...................................................................... 16.2.1 Linien ........................................................................................ 16.2.2 Rechtecke .................................................................................. 16.2.3 Ovale und Kreisbögen ............................................................... 16.2.4 Polygone und Polylines .............................................................. Zeichenketten schreiben und Fonts .......................................................... 16.3.1 Zeichenfolgen schreiben ............................................................ 16.3.2 Die Font-Klasse ......................................................................... 16.3.3 Einen neuen Font aus einem gegebenen Font ableiten ............... 16.3.4 Zeichensätze des Systems ermitteln ........................................... 16.3.5 Neue TrueType-Fonts in Java nutzen .......................................... 16.3.6 Font-Metadaten durch FontMetrics ........................................... Geometrische Objekte .............................................................................. 16.4.1 Die Schnittstelle Shape .............................................................. 16.4.2 Kreisförmiges ............................................................................. 16.4.3 Kurviges .................................................................................... 16.4.4 Area und die konstruktive Flächengeometrie ............................. 16.4.5 Pfade ......................................................................................... 16.4.6 Punkt in Form, Schnitt von Linien, Abstand Punkt/Linie und Weiteres .................................................................................... Das Innere und Äußere einer Form ........................................................... 16.5.1 Farben und die Paint-Schnittstelle ............................................. 16.5.2 Farben mit der Klasse Color ....................................................... 16.5.3 Die Farben des Systems über SystemColor ................................. 16.5.4 Composite und Xor .................................................................... 16.5.5 Dicke und Art der Linien von Formen bestimmen über Stroke ... 1069 1069 1071 1072 1073 1073 1074 1075 1075 1076 1077 1077 1080 1080 1081 1082 1083 1084 1085 1088 1089 1090 1091 1091 1091 1094 1095 1095 1096 1101 1104 1105 27 Inhalt 16.6 Bilder ....................................................................................................... 16.6.1 Eine Übersicht über die Bilder-Bibliotheken ............................... 16.6.2 Bilder mit ImageIO lesen ........................................................... 16.6.3 Ein Bild zeichnen ....................................................................... 16.6.4 Programm-Icon/Fenster-Icon setzen .......................................... 16.6.5 Splash-Screen ............................................................................ 16.6.6 Bilder im Speicher erzeugen ....................................................... 16.6.7 Pixel für Pixel auslesen und schreiben ........................................ 16.6.8 Bilder skalieren .......................................................................... 16.6.9 Schreiben mit ImageIO .............................................................. 16.6.10 Asynchrones Laden mit getImage() und dem MediaTracker ........ 16.6.11 Selbst definierte Cursor .............................................................. 16.6.12 VolatileImage ............................................................................ 16.7 Weitere Eigenschaften von Graphics ......................................................... 16.7.1 Eine Kopie von Graphics erstellen .............................................. 16.7.2 Koordinatensystem verschieben ................................................. 16.7.3 Beschnitt (Clipping) ................................................................... 16.8 Zeichenhinweise durch RenderingHints .................................................... 16.9 Transformationen mit einem AffineTransform-Objekt ............................... 16.10 Drucken ................................................................................................... 16.10.1 Drucken der Inhalte ................................................................... 16.10.2 Bekannte Drucker ...................................................................... 16.11 Grafikverarbeitung ohne grafische Oberfläche ........................................... 16.11.1 Xvfb-Server ................................................................................ 16.11.2 Pure Java AWT Toolkit (PJA) ...................................................... 16.12 Zum Weiterlesen ...................................................................................... 1109 1110 1111 1113 1116 1117 1117 1119 1121 1123 1126 1127 1129 1129 1129 1130 1130 1134 1134 1136 1137 1138 1139 1140 1140 1141 17 Netzwerkprogrammierung .................................................................. 1143 17.1 17.2 17.3 28 Grundlegende Begriffe .............................................................................. 17.1.1 Internet-Standards und RFC ....................................................... URI und URL ............................................................................................ 17.2.1 URI ............................................................................................ 17.2.2 Die Klasse URL .......................................................................... 17.2.3 Informationen über eine URL ..................................................... 17.2.4 Der Zugriff auf die Daten über die Klasse URL ............................ 17.2.5 Verbindungen durch einen Proxy-Server .................................... Die Klasse URLConnection ....................................................................... 17.3.1 Methoden und Anwendung von URLConnection ....................... 17.3.2 Protokoll- und Content-Handler ................................................ 17.3.3 Im Detail: vom URL zur URLConnection ..................................... 17.3.4 Der Protokoll-Handler für Jar-Dateien ........................................ 1143 1144 1144 1144 1144 1147 1148 1150 1151 1151 1153 1154 1155 Inhalt 17.3.5 Passwort-geschützte Seiten mit Basic Authentication/ Proxy-Authentifizierung ............................................................. 17.4 Mit GET und POST Daten übergeben ....................................................... 17.4.1 Kodieren der Parameter für Serverprogramme ........................... 17.4.2 Eine Suchmaschine ansprechen .................................................. 17.5 Host- und IP-Adressen ............................................................................. 17.5.1 Lebt der Rechner? ...................................................................... 17.5.2 Das Netz ist Klasse ... ................................................................. 17.5.3 IP-Adresse des lokalen Hosts ..................................................... 17.6 NetworkInterface ..................................................................................... 17.7 Mit dem Socket zum Server ...................................................................... 17.7.1 Das Netzwerk ist der Computer ................................................. 17.7.2 Sockets ...................................................................................... 17.7.3 Eine Verbindung zum Server aufbauen ....................................... 17.7.4 Server unter Spannung: die Ströme ............................................ 17.7.5 Die Verbindung wieder abbauen ................................................ 17.7.6 Informationen über den Socket .................................................. 17.7.7 Reine Verbindungsdaten über SocketAddress ............................ 17.8 Client/Server-Kommunikation .................................................................. 17.8.1 Warten auf Verbindungen .......................................................... 17.8.2 Ein Multiplikationsserver ........................................................... 17.8.3 Blockierendes Lesen .................................................................. 17.8.4 Von außen erreichbar sein ......................................................... 17.9 Apache Jakarta Commons HttpClient und Net .......................................... 17.9.1 Jakarta Commons HttpClient ...................................................... 17.9.2 Jakarta Commons Net ................................................................ 17.10 Arbeitsweise eines Webservers ................................................................. 17.10.1 Das Hypertext Transfer Protocol (HTTP) ..................................... 17.10.2 Anfragen an den Server .............................................................. 17.10.3 Die Antworten vom Server ......................................................... 17.10.4 Webserver mit com.sun.net.httpserver.HttpServer ..................... 17.11 Datagram-Sockets .................................................................................... 17.11.1 Die Klasse DatagramSocket ........................................................ 17.11.2 Datagramme und die Klasse DatagramPacket ............................ 17.11.3 Auf ein hereinkommendes Paket warten .................................... 17.11.4 Ein Paket zum Senden vorbereiten ............................................. 17.11.5 Methoden der Klasse DatagramPacket ....................................... 17.11.6 Das Paket senden ...................................................................... 17.12 E-Mail ...................................................................................................... 17.12.1 Wie eine E-Mail um die Welt geht ............................................. 17.12.2 Das Simple Mail Transfer Protocol und RFC 822 ........................ 17.12.3 POP (Post Office Protocol) ......................................................... 1157 1159 1159 1160 1161 1163 1164 1164 1165 1166 1166 1166 1167 1168 1169 1169 1171 1172 1173 1174 1176 1177 1178 1178 1179 1180 1180 1180 1183 1186 1187 1189 1190 1191 1192 1193 1193 1194 1195 1195 1196 29 Inhalt 17.12.4 Die JavaMail API ........................................................................ 17.12.5 E-Mails mittels POP3 abrufen .................................................... 17.12.6 E-Mails versenden ..................................................................... 17.12.7 Ereignisse und Suchen ............................................................... 17.13 Tiefer liegende Netzwerkeigenschaften ..................................................... 17.13.1 Internet Control Message Protocol (ICMP) ................................. 17.13.2 MAC-Adresse ............................................................................ 17.14 Zum Weiterlesen ...................................................................................... 1196 1197 1199 1202 1203 1203 1203 1204 18 Verteilte Programmierung mit RMI und Web-Services ............................................................................... 1205 18.1 18.2 18.3 18.4 18.5 18.6 18.7 30 Entfernte Objekte und Methoden ............................................................. 1205 18.1.1 Stellvertreter helfen bei entfernten Methodenaufrufen .............. 1205 18.1.2 Standards für entfernte Objekte ................................................. 1207 Java Remote Method Invocation .............................................................. 1207 18.2.1 Zusammenspiel von Server, Registry und Client .......................... 1207 18.2.2 Wie die Stellvertreter die Daten übertragen ............................... 1207 18.2.3 Probleme mit entfernten Methoden .......................................... 1208 18.2.4 Nutzen von RMI bei Middleware-Lösungen ............................... 1210 18.2.5 Zentrale Klassen und Schnittstellen ............................................ 1210 18.2.6 Entfernte und lokale Objekte im Vergleich ................................. 1211 Auf der Serverseite ................................................................................... 1211 18.3.1 Entfernte Schnittstelle deklarieren ............................................. 1211 18.3.2 Remote-Objekt-Implementierung .............................................. 1212 18.3.3 Stellvertreterobjekte .................................................................. 1213 18.3.4 Der Namensdienst (Registry) ...................................................... 1213 18.3.5 Remote-Objekt-Implementierung exportieren und beim Namensdienst anmelden ............................................................ 1215 18.3.6 Einfaches Logging ...................................................................... 1217 18.3.7 Aufräumen mit dem DGC .......................................................... 1218 Auf der Clientseite .................................................................................... 1218 Entfernte Objekte übergeben und laden ................................................... 1219 18.5.1 Klassen vom RMI-Klassenlader nachladen .................................. 1220 Weitere Eigenschaften von RMI ................................................................ 1220 18.6.1 RMI und CORBA ........................................................................ 1220 18.6.2 RMI über HTTP getunnelt .......................................................... 1220 18.6.3 Automatische Remote-Objekt-Aktivierung ................................. 1221 Daily Soap ................................................................................................ 1222 18.7.1 SOAP-Protokoll ......................................................................... 1222 18.7.2 Die technische Realisierung ....................................................... 1223 18.7.3 SOAP-Implementierungen ......................................................... 1223 18.7.4 @WebService in Java 6 ............................................................. 1224 Inhalt 18.8 18.9 18.7.5 Einen Web-Service definieren .................................................... 18.7.6 Web-Services veröffentlichen ..................................................... 18.7.7 Einen JAX-WS-Client implementieren ........................................ Java Message Service (JMS) ...................................................................... Zum Weiterlesen ...................................................................................... 1224 1225 1225 1227 1228 19 JavaServer Pages und Servlets ............................................................ 1229 19.1 19.2 19.3 19.4 19.5 19.6 19.7 19.8 Dynamisch generierte Webseiten ............................................................. 19.1.1 Was sind Servlets? ..................................................................... 19.1.2 Was sind JavaServer Pages? ....................................................... Servlets und JSPs mit Tomcat entwickeln .................................................. 19.2.1 Servlet-Container ....................................................................... 19.2.2 Entwicklung der Servlet/JSP-Spezifikationen .............................. 19.2.3 Webserver mit Servlet-Funktionalität ......................................... 19.2.4 Tomcat ...................................................................................... 19.2.5 Ablageort für eigene JSP-Seiten ................................................. 19.2.6 Web-Applikationen ................................................................... 19.2.7 Zuordnung von Web-Applikationen zu physikalischen Verzeichnissen ........................................................................... 19.2.8 Mit dem WTP ein Web-Projekt entwickeln ................................ Statisches und Dynamisches ..................................................................... 19.3.1 Statischer Template-Code .......................................................... 19.3.2 Dynamische Inhalte ................................................................... 19.3.3 Kommentare .............................................................................. Die Expression Language (EL) ................................................................... 19.4.1 Operatoren der EL ..................................................................... 19.4.2 Literale ...................................................................................... 19.4.3 Implizite EL-Objekte .................................................................. Formulardaten .......................................................................................... Auf Beans zurückgreifen ........................................................................... 19.6.1 Beans in JSP-Seiten anlegen ....................................................... 19.6.2 Properties einer Bean im EL-Ausdruck erfragen .......................... 19.6.3 Properties mit <jsp:setProperty> setzen ..................................... 19.6.4 Bean-Klasse zum Testen von E-Mail-Adressen ........................... 19.6.5 Parameterwerte in Bean übertragen ........................................... JSP Tag-Libraries ....................................................................................... 19.7.1 Standard Tag Library (JSTL) ........................................................ 19.7.2 Jakarta Taglibs Project ............................................................... Einbinden und Weiterleiten ...................................................................... 19.8.1 Einbinden von Inhalten .............................................................. 19.8.2 Forward und Redirect ................................................................ 19.8.3 Applets einbinden ..................................................................... 1229 1229 1230 1231 1231 1232 1232 1232 1233 1234 1235 1235 1236 1236 1237 1237 1237 1238 1238 1239 1239 1240 1240 1241 1241 1242 1243 1243 1244 1247 1248 1248 1250 1250 31 Inhalt 19.9 19.10 19.11 19.12 19.13 19.14 Skripten von JSPs ...................................................................................... 19.9.1 Scriptlets ................................................................................... 19.9.2 JSP-Ausdrücke ........................................................................... 19.9.3 JSP-Deklarationen ...................................................................... 19.9.4 Quoting ..................................................................................... 19.9.5 Entsprechende XML-Tags .......................................................... 19.9.6 Implizite Objekte für Scriptlets und JSP-Ausdrücke .................... JSP-Direktiven .......................................................................................... 19.10.1 page-Direktiven im Überblick .................................................... 19.10.2 Mit JSPs Bilder generieren ......................................................... Sitzungsverfolgung (Session Tracking) ....................................................... 19.11.1 Lösungen für Sitzungsverfolgung ................................................ 19.11.2 Auf Session-Dateien zurückgreifen ............................................. Servlets .................................................................................................... 19.12.1 Servlets compilieren ................................................................... 19.12.2 Servlet-Mapping ........................................................................ 19.12.3 Der Lebenszyklus eines Servlets ................................................. 19.12.4 Mehrere Anfragen beim Servlet und die Thread-Sicherheit ........ 19.12.5 Servlets und Sessions ................................................................. 19.12.6 Weiterleiten und Einbinden von Servlet-Inhalten ....................... Internationalisierung ................................................................................ 19.13.1 Die Länderkennung des Anfragers auslesen ................................ 19.13.2 Länderkennung für die Ausgabe setzen ...................................... 19.13.3 Westeuropäische Texte senden .................................................. Zum Weiterlesen ...................................................................................... 1251 1251 1251 1252 1252 1252 1253 1253 1254 1255 1256 1257 1258 1258 1259 1260 1261 1261 1261 1262 1263 1264 1264 1264 1265 20 Applets ................................................................................................ 1267 20.1 20.2 20.3 32 Applets in der Wiege von Java .................................................................. 20.1.1 (J)Applet und Applikationen ...................................................... 20.1.2 Das erste Hallo-Applet ............................................................... 20.1.3 Die Zyklen eines Applets ............................................................ 20.1.4 Parameter an das Applet übergeben .......................................... 20.1.5 Wie das Applet den Browser-Inhalt ändern kann ....................... 20.1.6 Den Ursprung des Applets erfragen ............................................ 20.1.7 Datenaustausch zwischen Applets .............................................. 20.1.8 Was ein Applet alles darf ........................................................... Fehler in Applets finden ........................................................................... 20.2.1 Ist Java im Browser aktiviert? ..................................................... 20.2.2 Läuft das Applet unter Netscape oder Microsoft Explorer? ......... 20.2.3 Datenaustausch zwischen Applets und Java-Skripten ................. Webstart .................................................................................................. 1267 1267 1267 1269 1269 1271 1271 1273 1275 1276 1276 1277 1278 1279 Inhalt 21 Midlets und die Java ME ..................................................................... 1281 21.1 21.2 21.3 21.4 21.5 21.6 Java Platform, Micro Edition (Java ME) ..................................................... Konfigurationen ....................................................................................... 21.2.1 Connected Limited Device Configuration (CLDC) ....................... 21.2.2 Connected Device Configuration (CDC) ..................................... Profile ...................................................................................................... 21.3.1 Mobile Information Device Profile (MIDP) ................................. 21.3.2 Weitere Profile .......................................................................... Wireless Toolkits ...................................................................................... 21.4.1 Sun Java Wireless Toolkit for CLDC ............................................ 21.4.2 Eclipse-Plugin ............................................................................ Die Midlet-API ......................................................................................... 21.5.1 Paketstruktur Mobile Information Device Profile (2.0) ............... Zum Weiterlesen ...................................................................................... 1281 1281 1281 1282 1282 1282 1283 1283 1283 1284 1286 1286 1287 22 Datenbankmanagement mit JDBC ...................................................... 1289 22.1 22.2 22.3 22.4 22.5 22.6 Das relationale Modell ............................................................................. Datenbanken und Tools ........................................................................... 22.2.1 HSQLDB .................................................................................... 22.2.2 Weitere Datenbanken ................................................................ 22.2.3 Eclipse-Plugins zum Durchschauen von Datenbanken ................ JDBC und Datenbanktreiber ..................................................................... 22.3.1 Treibertypen .............................................................................. 22.3.2 JDBC-Versionen ......................................................................... Eine Beispielabfrage ................................................................................. 22.4.1 Schritte zur Datenbankabfrage ................................................... 22.4.2 Client für HSQLDB-Datenbank ................................................... Mit Java an eine Datenbank andocken ..................................................... 22.5.1 Der Treiber-Manager ................................................................. 22.5.2 Den Treiber laden ...................................................................... 22.5.3 Eine Aufzählung aller Treiber ..................................................... 22.5.4 Log-Informationen ..................................................................... 22.5.5 Verbindung zur Datenbank auf- und abbauen ............................ 22.5.6 DataSource ................................................................................ 22.5.7 Gepoolte Verbindungen ............................................................. Datenbankabfragen .................................................................................. 22.6.1 Abfragen über das Statement-Objekt ......................................... 22.6.2 Ergebnisse einer Abfrage in ResultSet ........................................ 22.6.3 Java und SQL-Datentypen .......................................................... 22.6.4 Unicode in der Spalte korrekt auslesen ...................................... 1289 1290 1290 1291 1293 1295 1296 1297 1298 1298 1299 1300 1301 1301 1302 1303 1304 1307 1310 1310 1310 1312 1314 1317 33 Inhalt 22.7 22.8 22.9 22.10 22.11 22.12 22.13 22.14 22.6.5 Eine SQL-NULL und wasNull() bei ResultSet .............................. 1317 22.6.6 Wie viele Zeilen hat ein ResultSet? ............................................ 1318 Die Ausnahmen bei JDBC ......................................................................... 1318 Elemente einer Datenbank hinzufügen und aktualisieren .......................... 1319 22.8.1 Batch-Updates ........................................................................... 1320 ResultSets in Bohnen durch RowSet ......................................................... 1321 22.9.1 Die Schnittstelle RowSet ............................................................ 1321 22.9.2 Implementierungen von RowSet ................................................ 1322 22.9.3 Der Typ CachedRowSet ............................................................. 1322 22.9.4 Der Typ WebRowSet ................................................................. 1323 Vorbereitete Anweisungen (Prepared Statements) .................................... 1325 22.10.1 PreparedStatement-Objekte vorbereiten .................................... 1326 22.10.2 Werte für die Platzhalter eines PreparedStatement .................... 1326 Transaktionen ........................................................................................... 1328 Metadaten ............................................................................................... 1328 22.12.1 Metadaten über die Tabelle ....................................................... 1328 22.12.2 Informationen über die Datenbank ............................................ 1332 Einführung in SQL .................................................................................... 1333 22.13.1 Ein Rundgang durch SQL-Anfragen ............................................ 1333 22.13.2 Datenabfrage mit der Data Query Language (DQL) .................... 1335 22.13.3 Tabellen mit der Data Definition Language (DDL) anlegen ......... 1337 Zum Weiterlesen ...................................................................................... 1337 23 Reflection und Annotationen .............................................................. 1339 23.1 23.2 23.3 34 Metadaten ............................................................................................... 23.1.1 Metadaten durch Java-Doc Tags ................................................ 23.1.2 XDoclet ..................................................................................... Metadaten der Klassen mit dem Class-Objekt ........................................... 23.2.1 An ein Class-Objekt kommen ..................................................... 23.2.2 Was das Class-Objekt beschreibt ............................................... 23.2.3 Der Name der Klasse ................................................................. 23.2.4 instanceof mit Class-Objekten .................................................... 23.2.5 Oberklassen finden .................................................................... 23.2.6 Implementierte Interfaces einer Klasse oder eines Interfaces ...... 23.2.7 Modifizierer und die Klasse Modifier ......................................... 23.2.8 Die Arbeit auf dem Feld ............................................................. Attribute, Methoden und Konstruktoren .................................................. 23.3.1 Reflections Gespür für Attribute einer Klasse ............................. 23.3.2 Methoden einer Klasse erfragen ................................................. 23.3.3 Properties einer Bean erfragen ................................................... 23.3.4 Konstruktoren einer Klasse ........................................................ 23.3.5 Annotationen ............................................................................ 1339 1339 1340 1340 1341 1343 1345 1347 1347 1348 1349 1350 1351 1352 1355 1358 1359 1361 Inhalt 23.4 23.5 23.6 23.7 Objekte erzeugen und manipulieren ......................................................... 23.4.1 Objekte erzeugen ...................................................................... 23.4.2 Die Belegung der Variablen erfragen .......................................... 23.4.3 Eine generische toString()-Funktion ........................................... 23.4.4 Variablen setzen ........................................................................ 23.4.5 Private Attribute ändern ............................................................ Methoden aufrufen .................................................................................. 23.5.1 Statische Methoden aufrufen ..................................................... 23.5.2 Dynamische Methodenaufrufe bei festen Methoden beschleunigen ............................................................................ Informationen und Identifizierung von Paketen ........................................ 23.6.1 Geladene Pakete ........................................................................ Annotationen ........................................................................................... 23.7.1 Neue Annotationen definieren ................................................... 23.7.2 Annotationen mit genau einem Element .................................... 23.7.3 Beliebige Schlüssel-Werte-Paare ................................................ 23.7.4 Vorbelegte Elemente ................................................................. 23.7.5 Annotieren von Annotationstypen ............................................. 23.7.6 Annotationen zur Laufzeit ausgelesen ........................................ 23.7.7 Mögliche Nachteile von Annotationen ....................................... 1361 1361 1363 1365 1366 1368 1369 1370 1371 1372 1373 1373 1373 1373 1375 1378 1379 1381 1383 24 Logging und Monitoring ..................................................................... 1385 24.1 24.2 24.3 24.4 24.5 24.6 24.7 Die Logging-API ....................................................................................... 24.1.1 Einfaches Logging ...................................................................... 24.1.2 Log-Level ................................................................................... 24.1.3 Logging in eine Datei ................................................................. Überwachen von Systemzuständen ........................................................... MBean-Typen, MBean-Server und weitere Begriffe ................................... 24.3.1 MXBeans des Systems ................................................................ Geschwätzige Programme und JConsole ................................................... 24.4.1 JConsole .................................................................................... Der MBeanServer ..................................................................................... Eine eigene Standard-MBean .................................................................... 24.6.1 Management-Schnittstelle ......................................................... 24.6.2 Implementierung der managed Ressource .................................. 24.6.3 Anmeldung beim Server ............................................................. 24.6.4 Eigene Bean in JConsole ............................................................ 24.6.5 JMX mit RMI-Adaptor ............................................................... Zum Weiterlesen ...................................................................................... 1385 1385 1386 1386 1387 1388 1389 1391 1391 1393 1394 1394 1394 1395 1395 1397 1399 35 Inhalt 25 Sicherheitskonzepte ............................................................................ 1401 25.1 25.2 25.3 25.4 25.5 25.6 25.7 Zentrale Elemente der Java-Sicherheit ...................................................... 1401 25.1.1 Security-API der Java SE ............................................................. 1401 25.1.2 Cryptographic Service Providers ................................................. 1402 Der Sandkasten (Sandbox) ........................................................................ 1403 Sicherheitsmanager (Security Manager) .................................................... 1403 25.3.1 Der Sicherheitsmanager bei Applets ........................................... 1405 25.3.2 Sicherheitsmanager aktivieren .................................................... 1406 25.3.3 Wie nutzen die Java-Bibliotheken den Sicherheitsmanager? ....... 1407 25.3.4 Rechte durch Policy-Dateien vergeben ....................................... 1408 25.3.5 Erstellen von Rechtedateien mit dem grafischen Policy-Tool ...... 1410 25.3.6 Kritik an den Policies ................................................................. 1410 Signierung ................................................................................................ 1412 25.4.1 Warum signieren? ...................................................................... 1412 25.4.2 Digitale Ausweise und die Zertifizierungsstelle ........................... 1412 25.4.3 Mit keytool Schlüssel erzeugen .................................................. 1413 25.4.4 Signieren mit jarsigner ............................................................... 1414 Digitale Unterschriften ............................................................................. 1414 25.5.1 Die MDx-Reihe .......................................................................... 1415 25.5.2 Secure Hash Algorithm (SHA) ..................................................... 1415 25.5.3 Mit der Security-API einen Fingerabdruck berechnen ................. 1416 25.5.4 Die Klasse MessageDigest .......................................................... 1416 25.5.5 Unix-Crypt ................................................................................. 1418 Verschlüsseln von Daten(-strömen) .......................................................... 1418 25.6.1 Den Schlüssel bitte .................................................................... 1418 25.6.2 Verschlüsseln mit Cipher ............................................................ 1420 25.6.3 Verschlüsseln von Datenströmen ............................................... 1420 Zum Weiterlesen ...................................................................................... 1422 26 Java Native Interface (JNI) .................................................................. 1423 26.1 26.2 26.3 36 Java Native Interface und Invocation-API ................................................. Einbinden einer C-Funktion in ein Java-Programm .................................... 26.2.1 Schreiben des Java-Codes .......................................................... 26.2.2 Compilieren des Java-Programms ............................................... 26.2.3 Erzeugen der Header-Datei ........................................................ 26.2.4 Implementierung der Methode in C ........................................... 26.2.5 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek .................................................................................. 26.2.6 Suchort der dynamischen Bibliothek .......................................... Nativ die Stringlänge ermitteln ................................................................. 1423 1424 1424 1425 1425 1426 1427 1429 1429 Inhalt 26.4 26.5 26.6 Erweiterte JNI-Eigenschaften .................................................................... 26.4.1 Klassendefinitionen ................................................................... 26.4.2 Zugriff auf Attribute ................................................................... Einfache Anbindung von existierenden Bibliotheken ................................. 26.5.1 C++ Klassen ansprechen ............................................................ 26.5.2 COM-Schnittstellen anzapfen .................................................... Zum Weiterlesen ...................................................................................... 1430 1430 1431 1433 1433 1433 1434 27 Dienstprogramme für die Java-Umgebung ......................................... 1435 27.1 27.2 27.3 27.4 27.5 27.6 27.7 27.8 27.9 A Die Werkzeuge im Überblick .................................................................... Java-Compiler ........................................................................................... 27.2.1 Bytecode Compiler javac ............................................................ 27.2.2 Native Compiler ......................................................................... 27.2.3 Java-Programme in ein natives ausführbares Programm einpacken .................................................................................. Der Java-Interpreter java .......................................................................... 27.3.1 Der Unterschied zwischen java.exe und javaw.exe ..................... Das Archivformat Jar ................................................................................ 27.4.1 Das Dienstprogramm Jar benutzen ............................................. 27.4.2 Das Manifest ............................................................................. 27.4.3 Applikationen in Jar-Archiven starten ........................................ 27.4.4 Applets in Jar-Archiven .............................................................. Monitoringprogramme ............................................................................. 27.5.1 jps ............................................................................................. 27.5.2 jstat ........................................................................................... 27.5.3 jmap .......................................................................................... 27.5.4 jstack ......................................................................................... Ant ........................................................................................................... 27.6.1 Bezug und Installation von Ant .................................................. 27.6.2 Properties .................................................................................. 27.6.3 Externe und vordefinierte Properties .......................................... 27.6.4 Weitere Ant-Tasks ..................................................................... Decompiler und Obfuscatoren .................................................................. 27.7.1 Der Decompiler Jad ................................................................... 27.7.2 Das Obfuscator-Programm ProGuard ......................................... Weitere Dienstprogramme ....................................................................... 27.8.1 Sourcecode Beautifier ................................................................ 27.8.2 Java-Programme als Systemdienst ausführen .............................. Zum Weiterlesen ...................................................................................... 1435 1435 1435 1436 1437 1437 1438 1439 1439 1442 1442 1443 1444 1444 1444 1444 1445 1445 1446 1447 1448 1449 1450 1451 1451 1452 1452 1453 1454 Die Begleit-DVD .................................................................................. 1455 Index ................................................................................................................. 1457 37 Wenn ich eine Oper hundertmal dirigiert habe, dann ist es Zeit, sie wieder zu lernen. – Arturo Toscanini (1867 – 1957) 2 Sprachbeschreibung Ein Programm in Java wird nicht umgangssprachlich beschrieben, sondern ein Regelwerk und eine Grammatik definieren die Syntax und die Semantik. In den nächsten Abschnitten werden wir kleinere Beispiele für Java-Programme kennenlernen, und dann ist der Weg frei für größere Programme. 2.1 Elemente der Programmiersprache Java Wir wollen im Folgenden über das Regelwerk, die Grammatik und Syntax der Programmiersprache Java sprechen und uns unter anderem über die Unicode-Kodierung, Token sowie Bezeichner Gedanken machen. Bei der Benennung einer Funktion zum Beispiel dürfen wir aus einer großen Anzahl Zeichen wählen; der Zeichenvorrat nennt sich Lexikalik. Die Syntax eines Java-Programms definiert die Token und bildet so das Vokabular. Richtig geschriebene Programme müssen aber dennoch nicht korrekt sein. Unter dem Begriff »Semantik« fassen wir daher die Bedeutung eines syntaktisch korrekten Programms zusammen. Die Semantik bestimmt, was das Programm macht. Die Abstraktionsreihenfolge ist also Lexikalik, Syntax und Semantik. Der Compiler durchläuft diese Schritte, bevor er den Bytecode erzeugen kann. 2.1.1 Textkodierung durch Unicode-Zeichen Java kodiert Texte durch Unicode-Zeichen. Jedem Zeichen ist ein eindeutiger Zahlenwert (engl. code point) zugewiesen, sodass zum Beispiel das große »A« an Position 65 liegt. Der Unicode-Zeichensatz beinhaltet die ISO US-ASCII-Zeichen1 von 0 bis 127 (hexadezimal 0x00 bis 0x7f, also 7 Bit) und die erweiterte Kodierung nach ISO8859-1 (Latin-1), die Zeichen von 128 bis 255 hinzunimmt. In den letzten Jahren hat sich der Unicode-Standard erweitert, und Java ist den Erweiterungen gefolgt. Die Java-Versionen von 1.0 bis 1.4 nutzen den Unicode-Standard 1.1 bis 3.0, der für jedes Zeichen 16 Bit reserviert. So legt Java jedes Zeichen in 2 Byte ab und ermöglicht die 1 http://en.wikipedia.org/wiki/ASCII 85 2 Sprachbeschreibung Kodierung von mehr als 65 000 Zeichen. Ab Java 5 ist der Unicode-4.0-Standard möglich, der 32 Bit für die Abbildung eines Zeichens nötig macht. Die Entwickler haben allerdings für ein Java-Zeichen nicht die interne Länge angehoben, sondern zwei 16-Bit-Zeichen – ein Surrogate-Paar – bilden in der UTF-16-Kodierung ein Unicode-4.0-Zeichen. Diese Surrogate vergrößern den Bereich der Basic Multilingual Plane (BMP). Hinweis Obwohl Java intern alle Zeichenfolgen in Unicode kodiert, ist es ungünstig, Klassennamen zu wählen, die Unicode-Zeichen enthalten. Einige Dateisysteme speichern die Namen im alten 8-Bit-ASCII-Zeichensatz ab, sodass Teile vom Unicode-Zeichen verloren gehen. Schreibweise für Unicode-Zeichen/Unicode Escapes Da ein Java-Compiler alle Eingaben als Unicode verarbeitet, kann er grundsätzlich Quellcode mit deutschen Umlauten, griechischen Symbolen und chinesischen Schriftzeichen verarbeiten. Allerdings ist es gut zu überlegen, ob ein Programm direkt Unicode-Zeichen enthalten sollte, denn Editoren2 haben mit Unicode-Zeichen oft ihre Schwierigkeiten – genauso wie Dateisysteme. Beliebige Unicode-Zeichen lassen sich für den Compiler jedoch über Unicode Escapes mit \uxxxx schreiben, wobei x eine hexadezimale Ziffer ist – also 0...9, A...F (beziehungsweise a...f). Diese sechs ASCII-Zeichen, die das Unicode beschreiben, lassen sich in jedem ASCII-Texteditor schreiben, sodass kein Unicode-fähiger Editor nötig ist. Unicode-Zeichen für deutsche Sonderzeichen sind folgende: Zeichen Unicode Ä, ä \u00c4, \u00e4 Ö, ö \u00d6, \u00f6 Ü, ü \u00dc, \u00fc ß \u00df Tabelle 2.1 Beispiel Deutsche Sonderzeichen in Unicode Deklariere und initialisiere eine Variable : double \u03C0 = 3.141592653589793; Die Unicode-Escape-Sequenzen sind an beliebiger Stelle erlaubt, wo auch sonst ein Zeichen stehen würde. So lässt sich an Stelle eines Anführungszeichens alternativ \u0027 schreiben, was der Compiler als gleichwertig ansieht. Das Unicode-Zeichen \uffff ist nicht definiert und kann bei Zeichenketten als Ende-Symbol verwendet werden. Anzeige der Unicode-Zeichen Die Darstellung der Zeichen – besonders auf der Konsole – ist auf einigen Plattformen noch ein Problem. Die Unterstützung für die Standardzeichen des ASCII-Alphabets ist dabei weniger ein Problem als die Sonderzeichen, die der Unicode-Standard definiert. Unter ihnen ist 2 Ein Unicode-Editor unter Windows ist SC UniPad unter http://www.unipad.org/main/. 86 Elemente der Programmiersprache Java der beliebte Smiley :-), der als Unicode \u263A (WHITE SMILING FACE) und \u2369 (WHITE FROWNING FACE) :-( definiert ist. Das Euro-Zeichen ist unter \u20ac zu finden. Tipp Sofern sich die Sonderzeichen und Umlaute auf der Tastatur befinden, sollten keine Unicode-Kodierungen Verwendung finden. Der Autor von Quelltext sollte seine Leser nicht zwingen, eine Unicode-Tabelle zur Hand zu haben. Die Alternativdarstellung lohnt sich daher nur, wenn der Programmtext bewusst unleserlich gemacht werden soll. Ein Versuch, den Smiley auf die Standardausgabe zu drucken, scheitert oft an der Fähigkeit des Terminals beziehungsweise der Shell. Hier ist eine spezielle Shell nötig, die aber bei den meisten Systemen noch in der Entwicklung ist. Und auch bei grafischen Oberflächen ist die Integration noch mangelhaft. Es wird Aufgabe der Betriebssystementwickler bleiben, dies zu ändern.3 Unicode-Tabellen unter Windows Unter Windows legt Microsoft das nützliche Programm charmap.exe für eine Zeichentabelle bei, mit der jede Schriftart auf ihre installierten Zeichen untersucht werden kann. Praktischerweise zeigt die Zeichentabelle auch gleich die Position in der Unicode-Tabelle an. Unter der erweiterten Ansicht lassen sich zusätzlich Unicode-Unterbereiche auswählen, wie etwa Währungszeichen oder unterschiedliche Sprachen. Im Unterbereich Latin finden sich zum Beispiel die Zeichen aus der französischen Schrift (etwa »Ç« mit Cedille unter 00c7) und spanischen Schrift (»ñ« mit Tilde unter 00F1), und bei Allgemeinen Interpunktionszeichen findet sich das umgedrehte (invertierte) Fragezeichen bei 00BF. Abbildung 2.1 Zeichentabelle unter Windows XP 3 Mit veränderten Dateiströmen lässt sich dies etwas in den Griff bekommen. So kann man beispielsweise mit einem speziellen OutputStream-Objekt eine Konvertierung für die Windows-NT-Shell vornehmen, so dass auch dort die Sonderzeichen erscheinen. 87 2.1 2 Sprachbeschreibung 2.1.2 Literale Ein Literal ist ein konstanter Ausdruck. Es gibt verschiedene Typen von Literalen: 왘 Die Wahrheitswerte true und false 왘 Integrale Literale für Zahlen, etwa 122 왘 Zeichenliterale, etwa 'X' oder '\n' 왘 Gleitkommaliterale: 12.567 oder 9.999E-2 왘 Stringliterale für Zeichenketten wie "Paolo Pinkas" 2.1.3 Bezeichner Für Variablen (und damit Konstanten), Methoden, Klassen und Schnittstellen werden Bezeichner vergeben – auch Identifizierer (von engl. identifier) genannt –, die die entsprechenden Bausteine anschließend im Programm identifizieren. Unter Variablen sind dann Daten verfügbar, Methoden sind die Unterprogramme in objektorientierten Programmiersprachen, und Klassen sind die Bausteine objektorientierter Programme. Ein Bezeichner ist eine Folge von Zeichen, die fast beliebig lang sein kann (die Länge ist nur theoretisch festgelegt). Die Zeichen sind Elemente aus dem gesamten Unicode-Zeichensatz, und jedes Zeichen ist für die Identifikation wichtig. Das heißt: Ein Bezeichner, der 100 Zeichen lang ist, muss auch immer mit allen 100 Zeichen korrekt angegeben werden. Manche C- und FORTRAN-Compiler sind in dieser Hinsicht etwas großzügiger und bewerten nur die ersten Stellen. Beispiel Im folgenden Java-Programm sind die Bezeichner fett und unterstrichen gesetzt. class Main { public static void main( String[] args ) { System.out.println( "Hallo Welt" ); } } Dass String fett und unterstrichen ist, hat seinen Grund, denn String ist eine Klasse und kein eingebauter Datentyp wie int. Zwar wird die Klasse String in Java bevorzugt behandelt – das Plus kann Zeichenketten zusammenhängen –, aber es ist immer noch ein Klassentyp. Aufbau der Bezeichner Jeder Java-Bezeichner ist eine Folge aus Java-Buchstaben und Java-Ziffern, 4 wobei der Bezeichner mit einem Java-Buchstaben beginnen muss. Ein Java-Buchstabe umfasst nicht nur unsere lateinischen Buchstaben aus dem Bereich »A« bis »Z« (auch »a« bis »z«), sondern auch 4 Ob ein Zeichen ein Buchstabe ist, stellt die Funktion Character.isLetter() fest; ob er ein gültiger Bezeichner-Buchstabe ist, sagen die Funktionen isJavaIdentifierStart() für den Startbuchstaben und isJavaIdentifierPart() für den Rest. 88 Elemente der Programmiersprache Java viele weitere Zeichen aus dem Unicode-Alphabet, etwa den Unterstrich, Währungszeichen (wie die Zeichen für Dollar »$«, Euro »€«, Yen »¥«) oder griechische Buchstaben. Auch wenn damit viele wilde Zeichen als Bezeichner-Buchstaben grundsätzlich möglich sind, sollte doch die Programmierung mit englischen Bezeichnernamen erfolgen. Es ist noch einmal zu erwähnen, dass Java streng zwischen Groß-/Kleinschreibung unterscheidet. Die folgende Tabelle listet einige gültige und ungültige Bezeichner auf. Gültige Bezeichner Ungültige Bezeichner mami 2und2macht4 ichWeißIchMussAndréAnrufen class RAPHAEL_IST_LIEB hose gewaschen cláss hurtig! ¥+E+U+R+O+$ null Tabelle 2.2 Beispiele für Bezeichner in Java mami ist ein Bezeichner, der nur aus Alphazeichen besteht und daher korrekt ist. Auch ¥€$ ist korrekt. Der Bezeichner zeigt zusätzlich die in Java übliche Bezeichnerbildung; denn besteht dieser aus mehreren einzelnen Wörtern, werden diese einfach ohne Leerzeichen hintereinander gesetzt, jedes Teilwort (außer dem ersten) beginnt jedoch dann mit einem Großbuchstaben. Leerzeichen sind in Bezeichnern nicht erlaubt, und daher ist auch hose gewaschen ungültig. Auch das Ausrufezeichen ist, wie viele Sonderzeichen, ungültig. ichWeißIchMussAndré Anrufen ist jedoch wieder korrekt, auch wenn es ein Apostroph-é enthält. Treiben wir es weiter auf die Spitze, dann sehen wir einen gültigen Bezeichner, der nur aus griechischen Zeichen gebildet ist. Auch der erste Buchstabe ist ein Zeichen, anders als in 2und2macht4. Und class sowie null sind ebenso ungültig, da der Name schon von Java belegt ist. Hinweis In Java-Programmen bilden sich Bezeichnernamen oft aus zusammengesetzten Wörtern einer Beschreibung. Dies bedeutet, dass in einem Satz wie »schönes Wetter heute« die Leerzeichen entfernt werden und die nach dem ersten Wort folgenden Wörter mit Großbuchstaben beginnen. Damit wird aus dem Beispielsatz anschließend »schönesWetterHeute«. Sprachwissenschaftler nennen diese gemischte Groß- und Kleinschreibung Binnenmajuskel. Die Tabelle im nächsten Abschnitt zeigt uns, welche Namen wir nicht verwenden können. 2.1.4 Reservierte Schlüsselwörter Bestimmte Wörter sind als Bezeichner nicht zulässig, da sie als Schlüsselwörter durch den Compiler besonders behandelt werden. Schlüsselwörter bestimmen die »Sprache« eines Compilers. Nachfolgende Zeichenfolgen sind Schlüsselwörter (beziehungsweise Literale im Fall von true, false und null)5 und in Java daher nicht als Bezeichnernamen möglich: 5 Siehe dazu Abschnitt 3.9 (Keywords) der Sprachdefinition unter http://java.sun.com/docs/books/jls/ third_edition/html/lexical.html#3.9. 89 2.1 Index #ifdef 61 #IMPLIED 849 #REQUIRED 848 $, innere Klasse 409, 414 %% 281 %, Modulo-Operator 113 %, Operator 303 %b 281 %c 281 %d 281 %e 281 %f 281 %n 281 %s 281 %t 281 %tD 647 %tR 647 %tT 647 %x 281 &&, logischer Operator 119 &, Generics 424 &amp 846 &apos 846 &gt 846 &lt 846 &quot 846 *, Multiplikations-Operator 112 *7 56 +, Additions-Operator 112 -, Subtraktions-Operator 112 ..., Variable Argumentlisten 217 .class 498, 1341 .java.policy 1409 .keystore 1413 .NET Remoting 1207 /, Divisions-Operator 112 //, Zeilenkommentar 93 <exec>, Ant 1428 =, Zuweisungsoperator 111 == 193 ?, Generics 425 @{code, JavaDoc} 432 @author, JavaDoc 432 @category, JavaDoc 432 @Deprecated 438, 540 @deprecated 540, 1339 @deprecated, JavaDoc 437 @Documented 1380 @exception, JavaDoc 432 @javax.management.MXBean 1394 @link, JavaDoc 432 @linkplain, JavaDoc 432 @literal, JavaDoc 432 @OneWay 1224 @Override 378, 397, 540, 1373 @param, JavaDoc 432 @Retention 1380 @return, JavaDoc 432 @see, JavaDoc 432 @SOAPBinding 1224 @SuppressWarnings 540, 657, 1373 @Target 1379 @throws, JavaDoc 432 @version, JavaDoc 432 @WebMethod 1224 @WebParam 1224 @WebResult 1224 @WebService 1224 @XmlElement 891 @XmlRootElement 891 [L 1346 ^, logischer Operator 119 ||, logischer Operator 119 100% Java-Kompatibel 75 1099, Port rmiregistry 1215 200, OK 1184 404, Not Found 1184 500, Internal Server Error 1184 80, Http-Port 1180 8080, Http-Port 1180 A abrunden 300 abs(), Math 298 Absolutwert 173 Abstract Syntax Notation One 1413 Abstract Window Toolkit 895 abstract, Schlüsselwort 391–392 AbstractAction, Klasse 930 AbstractBorder, Klasse 932 AbstractButton, Klasse 927 AbstractTableModel, Klasse 1015 abstrakte Klasse 391 abstrakte Methode 392 Absturz der Ariane 5 126 Accelerator 981 accept(), ServerSocket 1173 Accepted 1184 Access Controller 1401 Accessibility 897 Accessible, Schnittstelle 1059 AccessibleObject, Klasse 1353, 1368 Action, Schnittstelle 930, 980 ACTION_PERFORMED, ActionEvent 913 Action-Command 929 ActionListener, Schnittstelle 916, 923, 925 Activatable, Klasse 1221 Activation Daemon 1222 activation.jar 1196 Adapter 681 Adapter, MBean 1388 Adapterklasse 920 add(), Container 906, 940 addActionListener(), JButton 925 addItem(), JComboBox 994 Addition 112 addKeyListener(), Component 936 addWindowListener() 919 Adjazenzmatrize 215 Adjustable, Schnittstelle 965 AdjustmentEvent, Klasse 964 AdjustmentListener, Schnittstelle 967 Adleman, Leonard M. 1415 Adler32, Klasse 819 affine Transformation 1134 AffineTransform, Klasse 1135 Age, Response-Header 1185 Aggregationsfunktionen 1336 Ahead-Of-Time Compiler 1436 AIFF 538 Aktor 181 aktueller Parameter 152 1457 Index Al Gore 1143 AlgorithmParameterSpec, Schnittstelle 1419 Algorithmus 655 -alias 1413 allgemeine Semaphor 603 Allow, Entity Header 1185 allowSystemProperty 1409 AllPermission 1410 AlphaComposite, Klasse 1104 AlreadyBoundException 1216 AM_PM, Calendar 642 Amigos 180 Anführungszeichen 109 angehäufte if-Anweisungen 133 angepasster Exponent 292 Anhängen an Strings 244 Anhängen von Zeichen 253 Animierter Cursor 1128 Anmelde-/Versendesystem 1227 AnnotatedElement, Schnittstelle 1361, 1381 Annotation, Schnittstelle 1382 Annotationen 539 annotiert 1339 anonyme innere Klasse 413 Anpassung 455 Ant 1428, 1446 Antialiasing 1075, 1134 Anweisung 92 Anweisungssequenz 99 Anwendungsfall 181 ANY 848 Anzahl Einträge 1337 Apache Axis 1223 Apache Commons CLI 228 Apache Commons Codec 280 Apache Commons Collections 715 Apache Commons Compress 806 Apache Commons DBCP 1310 Apache Commons IO 743, 762 Apache Commons Logging 1399 Apache Commons/Net 1178– 1179 Apache Jakarta HttpClient 1178 append(), StringBuffer/StringBuilder 254 Appendable, Schnittstelle 254, 772 Apple, Look-And-Feel 1045 1458 Applet 56, 65, 1267 AppletContext 538, 1271, 1276 appletviewer 1435 Applikations-Klassenlader 515 APRIL, Calendar 638 Ära 651 Arc2D, Klasse 1089–1090 Arcus-Funktionen 299 Area, Klasse 1091 AreaAveragingScaleFilter, Klasse 1122 Argument der Funktion 152 ArithmeticException 308, 480 arithmetische Typen 100 arithmetischer Operatorer 112 Array 204 Array, Klasse 1350 arraycopy(), System 219 Array-Grenze 61 ArrayIndexOutOfBoundsExceptions 480 ArrayList 662 ArrayList, Klasse 361, 656, 661, 669, 677 ArrayStoreException 381, 683 Array-Typen 100 Artefakte 1125 Aschermittwoch 640 ASCII-Zeichen 85 asin(), Math 299 asList(), Arrays 226, 681, 690 ASN.1 1413 assert, Schlüsselwort 489 Assertion 489 AssertionError 489 assignment 111 Assistive technology 1059 Assoziation 359 assoziativer Speicher 662 Astronomie 623 Atlantic City 64 atomar 574 atomare Komponente 906 Atomuhr 624 Attribute 179, 844 Attributinhalte 882 AU 538 AudioClip, Klasse 537 aufgeschobene Initialisierung 161 Aufruf einer Funktion 150 Aufrunden 300 AUGUST, Calendar 638 Ausdruck 111 Ausdrucksanweisung 96–97 Ausführungsstrang 543 Ausgabeformatierung 624 Ausnahme 61 Ausnahmenbehandlung 61 Ausprägung 179 Ausprägungsvariable 183 ausschließendes Oder 119 äußere Schleife 143 Auswahlmenü 992 Auszeichnungssprachen 843 authentication required 1151 Authenticator, Klasse 1157 Authentifizierung 1412 Autoboxing 200 Auto-Commit 1328 Automatische Typanpassung 122, 371 Autorisierung 1412 await(), Condition 593 AWT 895 AWTEvent, Klasse 913 AWTEventListener, Schnittstelle 1059 AWT-Event-Thread 919, 1053 AWT-Input 566 AWT-Motif 566 B Bad Gateway 1184 Bad Request 1184 barrier 562 Base64 280 Base64 Encoding 1196 baseline 1080 Basic Multilingual Plane 86 BasicStroke, Klasse 1105 BatchUpdateException 1320 Beautifier 1452 bedingte Compilierung 61 Bedingungsoperator 121, 172 Behinderungen, Accessibility 897 Beispielprogramme der Insel 49 Benutzerdefinierter Klassenlader 515 Benutzerinteraktion 1060 Beobachter-Pattern 448 Index Berkeley-Socket Interface 1166 Betrag 298 BevelBorder, Klasse 932 Bezeichner 88 Bézier-Kurve 1091 Bias 292 biased exponent 292 bidirektionale Beziehung 359 BigDecimal, Klasse 308, 313 Big-Endian 309 BigInteger, Klasse 308 Bilder skalieren 1121 Bildlaufleiste 962 Bildschirmabzug 1063 binäre Semaphor 603 binäre Suche (binary search) 722 binärer Operator 110 Binary and Floating-Point Arithmetic 292 binarySearch(), Arrays 225, 687 bind(), Registry 1215 Binnenmajuskel 89 bin-Pfad 72 biometrisches System 1412 Birrel 1205 Bitmenge 727 BitSet, Klasse 727 Bitttage 640 bitweise Manipulation 727 bitweises Exklusives Oder 167 bitweises Komplement 120 bitweises Oder 121, 167 bitweises Und 121, 167 bitweises Xor 121 Block 99 BlockingQueue, Schnittstelle 701 Block-Tag 434 boolean, Datentyp 101 Boolean, Klasse 202 Bootstrap-Klassenlader 515 Border, Schnittstelle 932 BorderFactory, Klasse 934 BorderLayout, Klasse 948, 951 bound properties 457 BoundedRangeModel, Schnittstelle 964 Bound-Properties 456 Boxing 200 BoxLayout 961 BoxLayout, Klasse 947, 961 break 143–144 BreakIterator, Klasse 275 brighter(), Color 1099 Brightness 1100 Browser-Version 523 Bruch 317 Bruchzahl 291 Bucket, Hash-Table 713 BufferedImage, Klasse 1118 BufferedInputStream, Klasse 763, 789 BufferedOutputStream 787 BufferedReader, Klasse 763, 789 BufferedWriter 787 build.xml 1446 ButtonGroup, Klasse 973 Byte 166 byte, Datentyp 101, 106, 291 Byte, Klasse 197 ByteArrayInputStream, Klasse 786 ByteArrayOutputStream, Klasse 785 Bytecode 57, 95 Bytecode Verifier 1401 BZip2 806 C C 55 C# 200 C++ 55, 178 Cache, Bilder 1127 Cache-Control 1185 CachedRowSet, Schnittstelle 1322 CachedRowSetImpl, Klasse 1322 CAG (Constructive Area Geometry) 1091 Calendar, Klasse 624, 635 call by reference 192 call by value 152, 191 Callable, Schnittstelle 569 CallableStatement, Schnittstelle 1310 CANON_EQ, Pattern 264 Canvas 1109 CAP_BUTT, BasicStroke 1106 CAP_ROUND, BasicStroke 1106, 1108 CAP_SQUARE, BasicStroke 1106 CardLayout, Klasse 948 Caret 1006 CASE_INSENSITIVE, Pattern 264 CASE_INSENSITIVE_ORDER, String 691 Cast 120 Cast, casten 122 catch 465 CDATA 848 CDC (Connected Device Configuration) 1282 ceil(), Math 300 Central European Time 632 CERN 1180 Certificate Authority, CA 1412 CET 632 ChangeListener, Schnittstelle 963 char, Datentyp 101, 109 Character, Klasse 233 CharArrayReader, Klasse 784 CharArrayWriter, Klasse 783 CharSequence, Schnittstelle 238, 439 Checkbox, Klasse 968 checked exception 480 checkError() 775 Checksum, Schnittstelle 817 choice box 992 Christi Himmelfahrt 640 Cipher, Klasse 1420 CipherInputStream, Klasse 1420 CipherOutputStream, Klasse 1420 class literal 498 Class Loader 512 Class, Klasse 498, 1340 class, Schlüsselwort 319, 1349 ClassCastException 480 ClassLoader, Klasse 515, 1403 ClassNotFoundException 1341– 1342 CLASSPATH 514, 1437, 1443 -classpath 514, 1437 Class-Path Wildcard 1438 Client 1167, 1207 Client/Server-Kommunikation 1172 Clip-Bereich 1070 Clipboard 982, 1046 Clipboard, Klasse 1046 Clipper 1415 clipping 1095 1459 Index Clipping-Bereich 1130 clone() 504 clone(), Arrays 218 CloneNotSupportedException 505, 507 Closeable, Schnittstelle 766 closePath(),Path2D 1094 Cloudscape 1290 Clustering, Hash-Tabelle 713 cmd.exe 527 code point 85 Codebase 1408 CollationKey, Klasse 261 Collator, Klasse 258, 685, 691 Collection API 655 Collection, Schnittstelle 657–658 Collections, Klasse 656 Color, Klasse 1096 com.sun.image.codec.jpeg, Paket 1110 com.sun.net.httpserver, Paket 1186 com4j 1433 combo box 992 ComboBoxModel, Schnittstelle 992 Command Model 916 Command not found 71 command.com 527 Comparable, Schnittstelle 400, 685 Comparator, Schnittstelle 685 compare(), Comparator 686 compareTo(), Comparable 686 compareToIgnoreCase(), String 241 compile(), Pattern 263 Compiler 95 Component, Klasse 931 ComponentEvent, Klasse 915 ComponentListener, Schnittstelle 939 ComponentUI, Klasse 991 Composite Pattern 940 Composite, Schnittstelle 1104 CompoundBorder, Klasse 932 concat(), String 245 CONCUR_UPDATABLE, ResultSet 1318, 1323 ConcurrentHashMap, Klasse 725 1460 ConcurrentLinkedQueue, Klasse 725 ConcurrentMap, Schnittstelle 725 ConcurrentModificationException 669 ConcurrentSkipListMap, Klasse 662 ConcurrentSkipListSet, Klasse 725 Condition, Schnittstelle 593 Connected Limited Device Configuration (CDC) 1281 Connection 1185 Connection, Schnittstelle 1300 Connector/J 1291 Connector-Level 1388 Console, Klasse 781 const, Schlüsselwort 161–162 const-korrekt 162 Constraint-Properties 456 Constructor, Klasse 1359 Contact Port 1167 Container 655 contains(), Shapre 1094 contains(), String 238 containsKey(), Map 706 Content Handler 1154 Content-Base 1185 Content-Encoding 1185–1186 contentEquals(), String 256 Content-Handler 1151 ContentHandler, Schnittstelle 865 Content-Language 1185 Content-Length 1185 Content-Location 1185 Content-MD5 1185 Content-Pane 907 Content-Range 1185 Content-Type 1185 continue 143, 145 Controller 991 Copy-Konstruktor 346, 504 copyOf(), Arrays 222 copyOfRange(), Arrays 222 CopyOnWriteArrayList, Klasse 669, 727 CopyOnWriteArraySet, Klasse 727 CORBA (Common Object Request Broker Architecture) 1207, 1220 cos(), Math 299 cosh(), Math 300 Cosinus 299 Cosmo 164 -cp 514, 1438 Cp037 278 Cp850 278 CRC32, Klasse 818 CREATE TABLE 1337 createCompatibleImage(), GraphicsConfiguration 1118 Created 1184 createGraphics(), BufferedImage 1118 createStatement(), Connection 1310 Crimson 855 Cryptographic Service Providers 1402 CSV (Comma Separated Values) 841 CubicCurve2D, Klasse 1089 currency, Datentyp 109 currentThread(), Thread 552 currentTimeMillis(), System 525 Cursor 1127 curveTo(), GeneralPath 1091 custom tag library 1244 Customization 455 CVM 1282 cxxwrap 1433 CyberNeko 894 CyclicBarrier, Klasse 562 D -D 523 Dämon 564 dangling pointer 355 Dangling-Else Problem 131 darker(), Color 1099 dash attribute 1105 Data Hiding 327 Data Query Language 1335 Database Management Systems 1289 DatabaseMetaData, Schnittstelle 1332 Index DataFlavor, Klasse 1048 Datagramme 1189 Datagrammsockets 1187 DatagramPacket, Klasse 1189 DatagramSocket, Klasse 1187, 1189 DataInput, Schnittstelle 754, 823 DataInputStream, Klasse 795 DataOutput, Schnittstelle 754, 823 DataOutputStream, Klasse 795 Datapoint 57 DataSource 1307 DataSource, Schnittstelle 1307 DataTruncation, Klasse 1318 DATE, Calendar 642 Date, General Header Fields 1185 Date, Klasse 624, 634 DateFormat, Klasse 284, 624, 647, 652 Dateiauswahl-Dialog 1040 Dateiauswahldialog 1040 Dateinamenendungen 242 Dateiverknüpfung 737 Datenbankausprägung 1289 Datenbankschema 1289 Datenbankverbindung 1305 Datenbasis 1289 Datenkompression 805 Datenstrukturen 655 Datentyp 100 Datenzeiger 754 Datumswerte 624 DAY_OF_MONTH 642 DAY_OF_WEEK, Calendar 642 DAY_OF_WEEK_IN_MONTH, Calendar 642 DAY_OF_YEAR, Calendar 642 DBMS 1289 -Dcom.sun.management.jmxremote 1392 Deadlock 544, 590 DECEMBER, Calendar 638 DecimalFormat, Klasse 286 Decompiler 1450 Decrement 120 default 134 default, Schlüsselwort 1378 DEFAULT_LAYER 1033 DefaultHandler, Klasse 865–866 Default-Konstruktor 186, 343 DefaultListCellRenderer, Klasse 1002 DefaultListModel, Klasse 998, 1001 DefaultMutableTreeNode, Klasse 1028 Default-Paket 230 defaultReadObject(), ObjectInputStream 830 DefaultTableCellRenderer, Klasse 1020 DefaultTableModel, Klasse 1018 defaultWriteObject(), ObjectOutputStream 829 DEK 306 Dekonstuktor 510 Dekoration 905 delegate 74 Delegation Model 916 DELETE 1181 delete() 60 delete(), StringBuffer/StringBuilder 255 Delimiter 266, 274 Deployment-Descriptor 1234 Deprecated 436 deprecated 1436 -deprecation 437 Deque 700 Deque, Schnittstelle 661 Derby 1290 dereferenced-Meldung 1218 Dereferenzierung 128 deriveFont(), Font 1082 DES (Data Encryption Standard) 1418 Design-Pattern 447 Desktop, Klasse 529 Dezimalpunkt 292 DGC 1218 Dialog 1035–1036 Digitale Unterschriften 1414 DirectX 74 Distributed Component Object Model (DCOM) 1207 distributed GC 1218 Dividend 112 Divider 944 Division 112 Divisionsoperator 112 Divisor 112 -Djava.rmi.dgc.leaseValue 1218 -Djava.rmi.server.codebase 1220 -Djava.security.debug 1406 -Djava.security.manager 1407 -Djava.security.policy 1408 -Djdbc.drivers 1301 dll-Dateien 1427 DnD, Drag & Drop 1050 DNS 1143, 1276 do/while-Schleife 138 Doc Comment 431 Doclet 435, 1340 DOCTYPE 849 Document Object Model 854 Document Type Definition 847 Document, Klasse 871 DocumentBuilderFactory 856 Dokumentationskommentar 431 DOM 854 DOM Level 3 XPath 885 Domain Name Service 1143 Domain Name System 1189 Domain-Name-Server 1276 DOMBuilder, Klasse 872 Donald E. Knuth 306 Doppel-Pufferung, Swing 944 DOS-Programme 527 DOTALL, Pattern 264 double 292 double, Datentyp 101 Double, Klasse 197 Double-Buffering, Swing 944 doubleToLongBits(), Double 510 DQL 1335 Drag & Drop 1050 Drag and Drop 897 draw(Shape), Graphics2D 1089 draw3DRect(), Graphics 1099 drawImage(), Graphics 1113 drawLine(), Graphics 1076 drawString(), Graphics 1080 Drehfeld 1002 DriverInfo 1306 DriverManager, Klasse 1301, 1304 Drucken 1136 DSAPrivateKeySpec, Klasse 1420 DSN 1189 DST_OFFSET, Calendar 643 DTD 847 DTDHandler, Schnittstelle 865 1461 Index Durchschnittswerte 1336 Durchschuss 1086 -Duser.timezone 638 dynamic invocation 1369 dynamic linked libraries 1427 Dynamic MBeans 1389 Dynamische Datenstrukturen 655 Dynamischer Methodenaufruf 1371 Dynamisches Layout 905 E -ea 490 EBCDIC 799 EBCDIC-Zeichensatz 278 Echozeichen 1006 Eclipse 73 Eclipse Translation Packs 75 EclipseME 1284 ECML 1240 Editor-Kit 1010 Eiche 55 Eigenschaft 455 einfache Eigenschaft 455 einfache Hochkommata 109 Einfachvererbung 365 eingeschränkte Eigenschaft 456 Einstelliger Operator 110 Electronic Commerce Modeling Language 1240 Element suchen 721, 723 Element, Klasse 874 Element, XML 844 elementare Anweisung 99 Elementklasse 409 ElementType, Aufzählung 1379 Ellipse, UML 181 Ellipse2D, Klsse 1089 else 130 Elternklasse 363 Embedded Java 68 EmptyBorder, Klasse 932 EmptyStackException 480, 699 enable assertions 490 encoding 278 end caps 1106 Ende der Welt 165 Endlosschleife 137 endorsed-Verzeichnis 514, 519 1462 Endpoint, Klasse 1225 endsWith(), String 242 ENGLISH 626 ensureCapacity(), List 679 Enterprise Edition 68 entfernte Methoden 1205 entfernte Methodenaufrufe 1205 entfernte Objekte 1211 Entitäten 846 Entity 1185 Entity Header 1185 Entity-Body 1185 Entity-Header 1183, 1185 EntityResolver, Schnittstelle 865 entrySet(), Map 709 Entwurfsmuster 447 Enum, Klasse 426 enum, Schlüsselwort 339, 489 Enumeration, Schnittstelle 665 Enumerator 665 EnumMap, Klasse 444 EOFException 753 equals() 500–501, 1148 equals(), Arrays 220 equals(), Object 193, 500 equals(), Point 194 equals(), String 256 equalsIgnoreCase(), String 240 ERA, Calendar 642 Erdzeitalter 166 Ereignis, Gui 913 Ereignisauslöser 916 Ereignisschlange 1053 Ereignisse 455 Ergebnistyp 148 erreichbar, catch 475 erreichbarer Quellcode 154 Error, Klasse 476, 480 ErrorHandler, Schnittstelle 865 erweiterte for 211 Erweiterungs-Klassenlader 515 Erzeuger/Verbraucher 596 Escape-Sequenz 109 Escape-Zeichen 239 Escher, Maurits 175 ETag 1185 EtchedBorder, Klasse 932 Eulersche Zahl 297 Euro-Zeichen 87 Event Queue 1053 Event-Dispatching-Thread 919 EventFilter, Schnittstelle 861 EventListener, Schnittstelle 452 EventObject, Klasse 452 Eventquelle 916 EventQueue, Klasse 1053, 1055, 1058 Events 455 Event-Source 916 Excelsior JET 1436 Exception 61 Exception, Klasse 476 ExceptionInInitializerError 336 Exchanger, Klasse 562 exec(), Runtime 526 executeQuery(), Statement 1312 executeUpdate(), Statement 1312 Executor, Schnittstelle 566 ExecutorService, Schnittstelle 567 Exemplar 179 Exemplarinitialisierer 353 Exemplarinitialisierungsblock 416 Exemplarvariable 183, 330 exit(), System 228 EXIT_ON_CLOSE, JFrame 901 exklusives Oder 119 Expires 1185 explizite Typanpassung 122 explizite Typumwandlung 373 explizites Klassenladen 513 Explorer 65 Exponenten 292 Exponentialwert 302 exportObject(), UnicastRemoteObject 1215 expression 111 extends, Schlüsselwort 363, 403 eXtensible Markup Language 844 Extension-Verzeichnis 514 F Fabrik 448 Fabrikmethode 358 Facelets 1266 Factory 448 Faden 543 Fakultät 312 Fall-Through 134 false 101 Index Farbauswahl 1038 Farbe 1096 Farbmodell 1101 Farbsättigung 1100 FEBRUARY, Calendar 638 Federal Information Processing Standards Publication 1415 Fee, die gute 162 Fehler 477 Fehlercode 465 Feld 204 Feld-Typen 100 fencepost error 141 Fenster 900 Fenstermenü 976 Field, Klasse 1352–1353, 1363 FIFO-Prinzip 661 File,Klasse 732 file.encoding 799 File.separatorChar 733 FileChannel, Klasse 747 FileDescriptor, Klasse 762 FileFilter, Klasse 1040 FileFilter, Schnittstelle 741 FileInputStream, Klasse 759 FilenameFilter, Schnittstelle 741 FileNotFoundException 466, 477 FileOutputStream, Klasse 759 FilePermission 1410 FileReader, Klasse 758 FileWriter, Klasse 756 fill(), Arrays 221 fill(), Collections 720 fillInStackTrace(), Throwable 485 FilteredRowSet, Schnittstelle 1322 FilterInputStream, Klasse 795 FilterOutputStream, Klasse 795 FilterReader, Klasse 795 FilterWriter, Klasse 795 final 160 final, Schlüsselwort 337, 389– 390, 1349 finale Klasse 389 finale Methode 390 finale Werte 352 finalize() 510 Finalizer 510 finally, Schlüsselwort 472 findClass(), ClassLoader 516 Fingerabdruck 1414 FIPS 1415 Firewall 1220 First Person, Inc. 56 First-In-First-Out 661 Fitts’s Law 949 Five-Nine System 1411 flache Kopie 712 flache Kopie, clone() 507 Flaubert, Gustave 1435 Fließkommazahl 100, 108, 291 Fließpunktzahl 291 float 292 float, Datentyp 101 Float, Klasse 197 floatToIntBits(), Float 510 floor(), Math 300 FlowLayout, Klasse 947, 949 Fluchtsymbole 109 Flushable, Schnittstelle 766 FocusEvent, Klasse 915 FocusListener, Schnittstelle 935 Fokus 935 Font, Klasse 908, 1081 FontFormatException 1084 FontMetrics, Klasse 1085 FontRenderContext, Klasse 1087 Forbidden 1184 formale Typ-Parameter 419 formaler Parameter 152 format() 775 format(), Format 285 format(), String 281 Format, Klasse 284 Formatierungsanweisungen 648 Formatierungsstrings 651 Format-Spezifizierer 281 Format-String 281 Formatter, Klasse 282 forName(), Class 1341 for-Schleife 140 Fortschaltausdruck 140 Fortschrittsbalken 974 Fragezeichenoperator 110 Frame 900 Frame, Klasse 902 FrameMaker 50 FRANCE 626 free() 60 FRENCH 626 Fronleichnam 640 FULL, DateFormat 649 Füllfaktor 713 Füllmuster 1108 Füllung, Paint 1095 Funktion 94, 150 Funktionsaufruf 95 Funktionszeiger 443 G Ganzzahl 100 ganzzahliger Datentyp 106 Garbage-Collector 60, 182, 186, 342, 355 Gauß-Normalverteilung 308 GC 60, 342, 355 GCC 1427 gcj 1436 gebundene Eigenschaft 456–457 gebundene Property 943 Geburtsdatum 644 Geburtstagsparadoxon 1415 gegenseitiger Ausschluss 574, 577 Geltungsbereich 104 General-Header 1183 GeneralPath, Klasse 1091 Generic Connection Framework 1282 Generics 419 generischer Typ 419 -genkey 1413 geordnete Liste 661 Georg Shar 439 geprüfte Ausnahme 480 GERMAN 626 GERMANY 626 geschachtelte Alternativen 132 geschachtelte Ausnahme 485 geschachtelte Top-Level Klasse 408 GET 1181 get(), List 670 get(), Map 705 getBytes(), ResultSet 1317 getBytes(), String 278 getChars(), String 244 getColumnClass(), TableModel 1015 getColumnCount(), TableModel 1015 1463 Index getColumnName(), TableModel 1015 getConnection(), DriverManager 1301 getContentPane(), JFrame 907 getContextClassLoader(), Thread 520 getDefaultToolkit(), Toolkit 899 getenv(), System 525 getInstance(), Calendar 638 GET-Methode 1159, 1180 getPriority(), Thread 563 getProperties(), System 521 getProperty(), Properties 715 getResource() 768 getResourceAsStream() 768 getRowCount(), TableModel 1015 getStackTrace(), Thread 487 GetStringUTFChars 1429 getTableCellEditorComponent(), TableCellEditor 1023 Getter 329 getText(), JLabel 907 getText(), JTextComponent 1005 getTimeInMillis(), Calendar 641 getValueAt(), TableModel 1015 ggT 308 GIF 1109 Glass-Pane 1032 Gleichheit 194 Gleitkommazahl 291 globale Variable 104 Glyphe 1080 GMST 623 Goldsäule 165 Gosling, James 55 goto, Schlüsselwort 146 GradientPaint 1095 Grammatik 85 grant-Anweisung 1408 Granularität von Threads 564 Graphics Interchange Format 1109 Graphics, Klasse 1070 Graphics2D, Klasse 1070 GraphicsEnvironment, Klasse 1083 Green-Projekt 56 Greenwich Mean Siderial Time 623 1464 GregorianCalendar, Klasse 636 Gregorianischer Kalender 635 GridBagConstraints, Klasse 956 GridBagLayout, Klasse 948, 955 GridLayout, Klasse 948, 954 Groovy 531 Groß-/Kleinschreibung 89, 242, 245 größter gemeinsamer Teiler 308 GroupLayout, Klasse 948 Grundlinie 1080 Grundton 1100 Gruppenfunktionen 1336 guard 597 guarded action 597 guarded wait 597 GUI-Builder 1339 gültig, XML 847 Gültigkeitsbereich 104 gzip 1186 GZIPInputStream, Klasse 806 GZIPOutputStream, Klasse 806 H Halbierungssuche 722 Hashcode 507, 712 hashCode(), Object 507 Hash-Funktion 507, 712 HashMap, Klasse 662, 702 HashSet, Klasse 661, 694 Hash-Tabelle 702 Hashtable 702 Hash-Verfahren 1414 Hash-Wert 507 Haupt-Klasse 93 HEAD 1181 Header-Datei 61, 1426 HEAD-Methode 1181 Heap 182 heavyweight component 896 Helligkeit 1100 hexadezimale Zahlen 107 Hexadezimalform 106 Hibernate 1337 HierarchyEvent, Klasse 915 high level event 914 Hilfsklasse 357 Hoare 577 Holder, Klasse 217 Horcher 916 Host 1143 Host-Adresse 1161 Host-Name 1143 HotJava 56 HotSpot 355 HOUR, Calendar 642 HOUR_OF_DAY, Calendar 642 HP 57 HSB 1100 HSQLDB 1290 HTML 843, 1180 HTTP 1144, 1180 HTTP 0.9 1183 HTTP 1.0 1180 http.proxyHost 1150 http.proxyPort 1150 HttpClient 1178 HttpHandler, Schnittstelle 1187 HTTP-Header 1153 https.ProxyHost 1151 https.ProxyPort 1151 HttpServer, Klasse 1186 Hue 1100 Hyersonic 1290 Hyperbolicus Funktionen 300 Hypertext Transfer Protocol 1144, 1180 I i18n.jar 513 IBM 1205, 1339 Ibn Mû sâ Al-Chwâ rismî 655 ICCCM 1047 Ich-Ansatz 179 ICMP 1203 ICO 1111 Icon, Schnittstelle 910–911 Identifizierer 88 Identität 194, 500 identityHashCode(), System 509 IdentityHashMap, Klasse 709 IEEE-754 Standard 108, 114, 292 IEEEremainder(), Math 303 IETF 1143–1144 if-Anweisung 129 IFC 896 if-Kaskade 133 ignorierte Statusrückgabewerte 467 IIOP 1220 Index IllegalArgumentException 480– 481, 483 IllegalMonitorStateException 480, 596, 601 IllegalThreadStateException 548 Image, Klasse 1110 ImageIcon, Klasse 910–911 ImageIO, Klasse 1110–1111 ImageObserver, Schnittstelle 1113 Imagination 55 immutable 236 imperative Programmiersprache 92 implizites Klassenladen 513 import, Schlüsselwort 188, 229 Increment 120 Index 204, 207 Indexed-Properties 456 indexierte Variablen 207 indexOf(), String 239 IndexOutOfBoundException 209 indizierte Eigenschaft 456 InetAddress 1163 InetAddress, Klasse 1162 InetSocketAddress, Klasse 1171 infinity 293 InheritableThreadLocal, Klasse 611 Inline-Tag 434 innere Klasse 407 innere Schleife 143 InputMethodEvent, Klasse 915 InputMismatchException 273 InputStream, Klasse 767 InputStreamReader, Klasse 279, 800 InstallShields 1279 instanceof, Schlüsselwort 394, 1347 InstantiationException 371, 1362 Instanz 179 Instanzinitialisierer 353 Instanzvariable 183 instrumentalisierte Objekte 1388 int, Datentyp 101, 106, 291 Integer, Klasse 197 integraler Typ 100 Integritätsprüfung von Nachrichten 1415 Inter Client Communication Convention Manual 1047 Interaktionsdiagramm 181 Interface 64, 391, 395 interface, Schlüsselwort 396 Interface/Implementation-Pair 1015 Interface-Typen 100 intermediate container 944 internal frame 1033 Internal Server Error 1184 Internationalisierung 628 interne Fenster 1033 Internet Control Message Protocol 1203 Internet Engineering Task Force 1143–1144 Internet Foundation Classes 896 Internet Media-Types 1185 Internet Protocol 1144 Internet-Explorer 65 Inter-ORB Protocol 1220 Interrupt 557 interrupt(), Thread 557, 601 interrupted(), Thread 559 InterruptedException 529, 554, 558, 593, 601 InterruptedIOException 1173 Intersolv 1296 Intervall 141 Introspection 455, 1339 invalidate(), Component 942 InvalidClassException 822, 832 Invarianz 424 Invocation-API 1423 InvocationEvent, Klasse 1056 InvocationTargetException 1362 invoke(), Method 1369 invokeAndWait(), SwingUtilities 1055 invokeLater(), SwingUtilities 976, 1055 Invoker-Servlet 1260 IOException 466, 477 IP 1144 IP-Adressen 1161 ipconfig 1203 iPhone 58 IP-Nummer 1143 is- Methode 329 isCellEditable(), TableModel 1015, 1017 isInterrupted(), Thread 557 isNaN(), Double/Float 294 ISO Country Code 625 ISO Language Code 625 ISO-639 Code 625 ISO8859-1 85 ISO-Abkürzung 627 Ist-Eine-Art-Von-Beziehung 391 ITALIAN 626 ItemEvent, Klasse 968 ItemListener, Schnittstelle 968, 971, 974, 995 ItemSelectable, Schnittstelle 971 itemStateChanged(), ItemListener 971 Iterable, Schnittstelle 441, 664 Iterator 665 Iterator, Schnittstelle 441, 665 Ivar Jacobson 180 J J++ 75 J/Direct 74 J2EE 68 J2ME 68 JAAS 1402, 1411 Jad 1451 Jahr 642, 651 JAI 1111 Jakarta Commons Math 317 Jakarta Taglibs Project 1247 JANUARY, Calendar 638 JAPAN 626 JAPANESE 626 Jar 1439 jar, Dienstprogramm 1435, 1439 -jar, java 1443 Jar-Datei 1155 JarFile, Klasse 816, 1156 jarsigner, Dienstprogramm 1414, 1435 JarURLConnection, Klasse 1156 Java 56, 1435 Java 2D API 897, 1074 Java Accessibility 1059 Java API for XML Parsing 855 Java Authentication and Authorization Service 1411 1465 Index Java Authentication and Authorization Service (JAAS) 1402 Java Bean 455 Java Cryptography Architecture 1401 Java Cryptography Extension (JCE) 1401 Java Database Connectivity 1295 Java DB 1290 Java Decompiler 1451 Java Document Object Model 855 Java Foundation Classes 896 Java Foundation Classes (JFC) 1074 Java Image Management Interface 1111 Java Look&Feel 1044 Java Management Beans 1389 Java Management Extensions 1388 Java Message Service 1227 Java Native Interface 1423 Java Network Launcher Protocol 1279 Java Object Serialization 820 Java Persistence API (JPA) 1337 Java Runtime Environment 1442 Java Secure Socket Extension 1151, 1204 Java Service Wrapper 1453 Java Virtual Machine 57 Java Virtual Machine Process Status Tool 1444 Java Virtual Machine Statistics Monitoring Tool 1444 java, Dienstprogramm 1437 java, Paket 230 java.awt.event, Paket 913 java.awt.geom, Paket 1075 java.beans, Paket 836 java.endorsed.dirs 519 java.ext.dirs 514 java.lang.ref, Paket 1287 java.naming.factory.initial 1310 java.net, Paket 1143 java.nio.charset, Paket 279 java.rmi.server.codebase 1220 java.rmi.useCodebaseOnly 1220 java.security 1409 java.text, Paket 275 1466 java.util.concurrent, Paket 726 java.util.concurrent.atomic, Paket 583, 608 java.util.concurrent.lock, Paket 577 java.util.jar, Paket 806, 1440 java.util.regex, Paket 262 java.util.zip, Paket 806 Java-Beans 1339 JavaBeans Activation Framework (JAF) 748, 1196 JavaBeans Persistence 820 javac, Dienstprogramm 1435 Java-Cryptography-API 1401 JavaDoc 430 javadoc 1435 javadoc, Dienstprogramm 433 JavaDoc-Tag 1339 javah, Ant 1425 javah, Dienstprogramm 1425 JavaMail API 1196 JavaScript 64, 1276 Java-Security-Model 59 JavaServer Faces 1266 JavaServer Page 1230 JavaSoft 57 javaw, Dienstprogramm 1438 javax, Paket 230, 497 javax.annotation, Paket 541 javax.crypto, Paket 1401 javax.jws, Paket 542, 1224 javax.microedition.midlet, Paket 1286 javax.net, Paket 1204 javax.script, Paket 530 javax.sound, Paket 537 javax.sound.midi, Paket 538 javax.swing, Paket 900 javax.swing.text, Paket 1004 javax.swing.undo, Paket 1051 javax.xml.bind.annotation, Paket 542, 891 javax.xml.ws, Paket 542 Jawin 1433 JAXB 890 JAXBContext, Klasse 892 Jaxen 871, 885 JAXP 855–856 JAX-WS 1223 JBP, JavaBeans Persistence 820 JButton, Klasse 923, 927 JCA 1401 JCheckBox, Klasse 927 JCheckBoxMenuItem, Klasse 978 jCIFS 749 JColorChooser, Klasse 1038 JComboBox, Klasse 992 jconsole, Dienstprogramm 1391 jdb 1435 JDBC 1295 JDBC 1.0 1297 JDBC 2.0 API 1297 JDBC 2.0 Optional Package API 1298 JDBC 2.1 core API 1297 jdbc.drivers 1301 JDBC-ODBC Bridge Treiber 1296 JDBCRowSet, Schnittstelle 1322 JDesktopPane, Klasse 1033 JDialog, Klasse 1036 JDOM 855 JDOMResult, Klasse 889 JDOMSource, Klasse 889 JEditorPane, Klasse 1004, 1010 Jetty 1232 JFC 896 JFileChooser, Klasse 1040 JFormattedTextField, Klasse 1004, 1007 JFrame, Klasse 900, 1071 JGoodies Looks 1046 Jimi 1111 Jindent 1453 JIT 57 JLabel, Klasse 906 JLayeredPane, Klasse 1033 jlGui 538 JList, Klasse 997 jmap, Dienstprogramm 1444 JMenu, Klasse 977–978 JMenuBar, Klasse 977 JMenuItem, Klasse 927, 978 JMS 1227 JMX 1388 JMXConnector, Schnittstelle 1398 JMXConnectorServer, Klasse 1397 JNDI 1308 jndi.properties 1308 JNI 1423 Joda Time 654 Index Joe Palrang 56 join(), Thread 561 JOIN_BEVEL, BasicStroke 1107 JOIN_MITER, BasicStroke 1107 JOIN_ROUND, BasicStroke 1107 JoinRowSet, Schnittstelle 1322 JOptionPane, Klasse 468, 1036 JOS, Java Object Serialization 820 JPA, Java Persistence API 1337 JPanel, Klasse 944 JPasswordField, Klasse 1004, 1006 JPEG 1110 JPopupMenu, Klasse 986 JProgressBar, Klasse 974, 1055 jps, Dienstprogramm 1391, 1444 JRadioButton, Klasse 927, 972– 973 JRadioButtonMenuItem, Klasse 978 JRE 1442 JRMP (Java Remote Method Protocol) 1220 JRootPane, Klasse 1032 jrunscript, Dienstprogramm 530 JScrollBar, Klasse 945, 964 JScrollPane 945 JScrollPane, Klasse 944–945, 998, 1010, 1013 JSlider, Klasse 962 JSmooth 1437 JSP 1230 JSpinner, Klasse 1002 JSplitPane, Klasse 944, 947 JSR 223 530 JSR 250 541 JSSE 1151 jstack, Dienstprogramm 1445 jstat, Dienstprogramm 1444 JSTL 1244 JTabbedPane, Klasse 944, 946 JTable, Klasse 1013 JTableHeader, Klasse 1025 JTextArea, Klasse 1004 JTextComponent, Klasse 1005 JTextField, Klasse 1004 JTextPane, Klasse 1004 JTidy 893 JToggleButton, Klasse 927, 929 JToolBar, Klasse 944, 983 JTree, Klasse 1028 JULY, Calendar 638 JUNE, Calendar 638 Just-In-Time Compiler 57 JViewport, Klasse 945 JWindow, Klasse 1035 JXPath 894 K kanonischer Pfad 734 Kardinalität 359 kaufmännische Rundung 301 Keller 698 Kerberos 1412 Key 662 Key, Schnittstelle 1418 KeyEvent, Klasse 915, 936 KeyGenerator, Klasse 1419 KeyListener, Schnittstelle 936 KeyPairGenerator, Klasse 1419 KeySelectionManager, Schnittstelle 996 keySet(), Map 709 Keystore 1414 keytool, Dienstprogramm 1413, 1435 Kindklasse 363 Klammerpaar 150 Klasse 179 Klassendiagramm 181 Klasseneigenschaft 331 Klassenhierarchie 364 Klasseninitialisierer 335 Klassenkonzept 64 Klassenlader 59, 512, 1403 Klassen-Literal 498 Klassenmethode 151 Klassenobjekte 498 Klassen-Typen 100 Klassenvariable, Initialisierung 351 Klonen 504 Kodierung, Zeichen 278 Kollision, Signatur 1415 Kollisionsangriff 1415 Kommandozeilenparameter 227 Kommaoperator 143 Kommentar 93 Komplement 167 komplexe Zahl 317 Kompressionsfunktion 1415 Kompressionsstufe 1125 Komprimierungsfaktor 1110 Konkatenation 236 konkrete Klasse 391 konstante Zeichenkette 236 Konstantenpool 238 konstruktive Flächengeometrie 1091 Konstruktor 186, 342 Konstruktoraufruf 182 Konstruktoren in Vererbung 367 Konstruktorweiterleitung 367 Kontextmenü 986 Kontraktionsfunktion 1415 Kontrollfeldgruppe 972 Kontrollstrukturen 128 Kopf 148 Kopfdefinition 846 KOREA 626 KOREAN 626 Kouznetsov, Pavel 1451 kovarianter Rückgabetyp 380 Kovarianz bei Arrays 381 Kreiszahl 297 kritischer Abschnitt 574 kryptografische Prüfsumme 1415 ktoolbar, Dienstprogramm 1283 kubische Kurvensegmente 1091 Kupfersäule 164 Kurven 1091 Kurzschlussoperator 119 L Länge des Strings 238 lastIndexOf(), String 240 Last-Modified 1185 Latin-1 799 Laufwerksname 738 Laufzeitumgebung 57 launch4j 1437 LayoutManager, Schnittstelle 949 lazy activation 1221 LCDUI 1287 LD_LIBRARY_PATH 1429 leading 1086 Lease 1218 Lebensdauer 104 leere Anweisung 99 leerer Block 99 1467 Index leerer String 248 Leer-String 249 Leerzeichen 274 Leerzeichen entfernen 246 Lempel-Ziv Kodierung 1186 length(), String 238 Lexikalik 85 lib/security 1409 LIFO 698 lightweight component 898 line joins 1105, 1107 line.separator 522, 1406 Line2D, Klasse 1089 lineare Algebra 317 lineare Kongruenzen 306 LinearGradientPaint 1095 LineBorder, Klasse 933 LineMetrics, Klasse 1087 LineNumberReader, Klasse 791 lineTo(), GeneralPath 1091 Linie 1075 Linienende 1106 Linien-Pattern 1105 Linieverbindung 1107 LinkedHashSet, Klasse 698 LinkedList, Klasse 661–662, 669, 680 Linking 512 linksassoziativ 122 Liskov'sches Substitutionsprinzip 374 Liskov, Barbara 374 List, Schnittstelle 661, 669 ListCellRenderer, Schnittstelle 1002 Listen 669 Listen füllen 720 Listener 451, 916 ListIterator, Schnittstelle 674 ListSelectionEvent, Klasse 999– 1000 ListSelectionListener, Schnittstelle 999–1000 ListSelectionModel, Schnittstelle 1025 Literal 108 Load Factor 713 loadClass(), ClassLoader 515 loadLibrary(), System 1424 Locale, Klasse 625 LocateRegistry, Klasse 1214 1468 Location, Response-Header 1185 Lock 577, 583 lock(), Lock 578 Locking 747 log(), Math 303 Log4j 1399 logClass 1217 Logger, Klasse 1385 Logging, RMI 1217 Login-Modul 1412 logisch atomar 595 logischer Operator 119 logisches Komplement 120 logisches Und 121 logisches Xor 121 lokale Klasse 413 lokale Objekte 1211 lokaler Host 1164 lokalisierte Zahl 273 Lokalisierung 628 long 106 LONG, DateFormat 649 long, Datentyp 101 Long, Klasse 197 low level event 914 lower bound wildcard 425 Luxor 1065 LU-Zerlegung 317 LZ77 1186 M MAC 1415 MAC-Adresse 1203 magic number 337 magische Zahl 337 magische Zahlenwerte 1349 Mail User Agent 1195 main() 94 main()-Funktion 72 Main-Class 1442 Makro 61 MalformedURLException 1146 Management Interface 1389 ManagementFactory, Klasse 1393 MANIFEST.MF 1442 Manipulation Detection Code 1415 Mantelsklasse 195 Mantisse 292 Map, Schnittstelle 657, 662, 702 Map.Entry, Klasse 710 MARCH, Calendar 638 marker interface 398 Markierungsschnittstelle 398, 824 Marshaller, Schnittstelle 892 marshalling 1208 Matcher, Klasse 262 matches(), Pattern 262 matches(), String 262 MatchResult, Schnittstelle 264 Math, Klasse 297 MathContext, Klasse 315 Matisse 948 MatteBorder, Klasse 933 Mausrad 938 maven 1446 max(), Collections 688 max(), Math 299 MAX_PRIORITY, Thread 563 MAX_RADIX 234 Maximalwert 1337 Maximum 173, 298 MAY, Calendar 638 MBean 1388 MBean-Server 1388 McNealy, Scott 56 MD 1414 MD2 1415 MD4 1415 MD5 1415 MDC 1415 MediaTracker, Klasse 1126 MEDIUM, DateFormat 649 Megginson, David 854 mehrdimensionales Array 213 Mehrfachvererbung 399 Mehrfachverzweigung 132 member class 409 memory leak 355 Memory Map 1444 Menü 976 Menübalken 977 Menüeintrag 977 Menütrennlinie 979 Merant 1296 Merge-Sort 690 Meridian 623 MESA 55 Message Authentication Code 1415 Index Message Integrity Check 1415 Message Queues 1227 Message Store 1195 Message Transfer Agent 1195 Message Transfer System 1195 Message-Digest 1414 MessageDigest, Klasse 1416 MessageFormat, Klasse 284, 287 Metadaten 1183, 1328 META-INF/MANIFEST.MF 1442 Meta-Information 1185 Meta-Objekte 1341 Meta-Programming 1339 Method, Klasse 1355 Methode des Aufrufes 1181 Methoden 94, 147 überladen 158 Methodenaufruf 322 Methodenkopf 148 Methodenrumpf 148 MEZ 632 MIC 1415 Microsoft 65 Microsoft Access 1292 Microsoft Development Kit 74 Microsoft SQL Server 1292 Middleware 1209–1210 MIDI 538 MidiSystem, Klasse 538 Midlet 1286 MIDP (Mobile Information Device Profile) 1282 MILLISECOND, Calendar 642 Millisekunden 642 MIME 1195 MimeMultipart, javax.mail 1201 MIME-Nachrichten 1183 MIME-Typ 1154 min(), Collections 688 min(), Math 299 MIN_PRIORITY, Thread 563 MIN_RADIX 234 MIN_VALUE 295 Minimum 173 MINUTE, Calendar 642 Mitgliedsklasse 409 Mitteleuropäische Zeit 632 mitteleuropäische Zeit 633 Mnemonic 981 Mobile Information Device Profile (MIDP) 1282 modal 1036 Model 991 Model MBeans 1389 Model-View-Controller 448, 990 Modifizierer 98, 1349 modifiziertes UTF-8 753 Modulo 114 Monat 642 Mönch 165 Monitor 577 monitorenter 577 monitorexit 577 Monitoring 1387 MONTH, Calendar 642 mouse wheel 938 MouseEvent, Klasse 915 MouseInfo, Klasse 1064 MouseListener, Schnittstelle 916 MouseMotionListener, Schnittstelle 916 MouseWheelEvent, Klasse 938 Moved Permanently 1184 Moved Temporarily 1184 MS 1195 MTA 1195 MTS 1195 MUA 1195 multicast 74 Multicast, Bean 454 Multicast-Kommunikation 1204 Multilevel continue 146 MULTILINE, Pattern 264 Multi-Map 715 Multiple Choices 1184 MULTIPLE_INTERVAL_SELECTION, ListSelectionModel 1000 Multiplikation 112 Multiplizität 359 Multipurpose Internet Mail Extensions 1195 multitaskingfähig 543 multithreaded 544 Muster 262 MutableTreeNode, Schnittstelle 1028 Mutex 577 MVC 990 MXBeans 1389 MySQL 1291 N Namensdienst 1207, 1213 Namensraum 852 Naming 1216–1217 NaN 293, 295 nanoTime(), System 525 narrowing conversion 123 native Methode 1423 Native Protocol All-Java Driver 1297 native Threads 544 native, Schlüsselwort 1424 native2ascii, Dienstprogramm, 279 Native-API Java Driver 1297 NativeCall 1433 nativer Compiler 1436 natural ordering 685 natürliche Ordnung 685 NavigableMap, Schnittstelle 662, 704 NavigableSet, Schnittstelle 696 Navigation 935 nearest neighbor algorithm 1122 Nebeneffekt 322 N-Eck 1078 NEGATIVE_INFINITY 295 negatives Vorzeichen 110 Nelson 1205 nested exception 485 nested top-level class 408 NetBeans 74 NetPermission 1410 netstat 1172 Network Filesystem 1189 Network Information Services 1143 NetworkInterface, Klasse 1165 Netz-Protoll All-Java Driver 1297 new line 522 new, Schlüsselwort 182, 342, 1361 newInstance() 371 newInstance(), Array 1351 newInstance(), Constructor 1361 newLine(), BufferedWriter 789 NFS 1189 nicht ausführend 593 nicht geprüfte Ausnahme 480 nicht-primitives Feld 212 1469 Index nicht-rechteckiges Feld 214 NIS 1143 No Content 1184 NO_SUCH_PAGE, Printable 1137 No-Arg-Konstruktor 186 NoClassDefFoundError 1342 non-static method-Fehlermeldung 151 Normalizer, Klasse 262 Normalverteilung 307 NoSuchAlgorithmException 1417 NoSuchElementException 666, 701 NoSuchProviderException 1417 Not Found 1184 Not Implemented 1184 Not Modified 1184 Not-a-Number 293, 295 Notation 180 notify(), Object 592, 600 notifyAll() 595 NotSerializableException 822, 824, 826 NOVEMBER, Calendar 638 nowarn 1436 NULL 465 null, Schlüsselwort 183, 188 NULL, SQL 1317 NullPointerException 189, 209, 480 Null-Referenz 188 Null-String 249 Number, Klasse 197 NumberFormat, Klasse 197, 284– 285 NumberFormatException 251, 468 numeric promotion 112 numerische Umwandlung 112 numerischer Typ 111 O Oak 55 Oberklasse 363 Oberklasse finden 1347 Oberlänge 1086 Obfuscator 1343, 1451 Object Management Group 180, 1207, 1220 1470 Object Serialization Stream Protocol 827 Object, Klasse 363, 498 ObjectInputStream, Klasse 822 Objective-C 64 ObjectName, Klasse 1395 ObjectOutputStream, Klasse 821 ObjectStreamField, Klasse 827 Objektansatz 179 Objektgleichheit 500 Objektidentifikation 498 objektorientiert 58 objektorientierter Ansatz 64 Objektorientierung 98 Objektvariable 183 Objektvariable, Initialisierung 350 Observable, Klasse 448 Observer, Schnittstelle 448 Observer/Observable 448 Observer-Pattern 990 OCTOBER, Calendar 638 ODBC 1292, 1295–1296 ODBC-Datenquellen-Administrator 1292 Oder 119 off-by-one error 141 OK 1184 Oktalform 106 Olson, Ken 1281 OMG (Object Management Group) 180, 1207 OO-Methode 180 opak 943 Open Database Connectivity Standard 1296 Open MBeans 1389 openStream(), URL 1148 Operator 111 operator precedence 120 Optionsfeld 972 Oracle 1291 OracleDriver 1302 Ordinalzahl, Aufzählung 426 Ordinalzahl, Enum 426 org.jdom, Paket 870 org.omg, Paket 497 Ostersonntag 639 OutOfMemoryError 182, 505 OutputStream, Klasse 764 OutputStreamWriter, Klasse 279, 799 OverlayLayout, Klasse 962 P P2P 1227 Pack200 806 Package, Klasse 1373 package, Schlüsselwort 229 PAGE_EXISTS, Printable 1137 paint(), Frame 1069 Paint, Schnittstelle 1095 paintComponent() 1071 Paket 187, 1143 Paketsichtbarkeit 324 PalmOS 1281 PalmPilot 68 Palmsonntag 640 Parameter 152 Parameterliste 148, 150 Parameterübergabemechanismus 152 parametrisierter Typ 419 parseBoolean(), Boolean 251 Parsed Character Data 848 parseDouble(), Double 251 ParseException 285, 653 parseInt(), Integer 198, 251, 468 parseObject(), Format 285 partiell abstrakte Klasse 392 Passionssonntag 640 PATH 72 Patrick Naughton 56 Pattern, Klasse 262 Payne, Jonathan 56 PCDATA 848 p-code 57 PDA 68 PDAP 1283 Peer-Elemente 1054 Peer-Klassen 895 Permissions 1410 PersistenceDelegate, Klasse 837 Persistenz 455 Personal Digital Assistant Profile 1283 Personal Java 68 Pfad 1091 Pfingstsonntag 640 PicoJava 58 Index Picture Element 1073 PipedInputStream, Klasse 801 PipedOutputStream, Klasse 801 PipedReader, Klasse 801 PipedWriter, Klasse 801 pissing on at every opportunity 75 Pixel 1073 Plattenspeicher 739 Pluggable Authentication Module (PAM) 1412 Pluggable Look and Feel 897 Plugins, Eclipse 82 PocketPC 1282 Point, Klasse 179, 182 Pointer 59 PointerInfo, Klasse 1064 Point-to-Point 1227 Polar-Methode 307 Policy-Datei 1408 policytool, Dienstprogramm 1410, 1435 Polygon 1077 Polygon, Klasse 1078, 1089 Polylines 1077 Polymorphie 385 Pommes-Bude 50 POP before send 1200 POP3 1196 Popup-Menü 986 Porphyr 164 Port 1234 1172 Port, RMI-Namensdienst 1215 Port-Adresse 1167 Position des Fensters 903 POSITIVE_INFINITY 295 POST 1181 Post-Dekrement 116 Post-Inkrement 116 POST-Methode 1159, 1180 Potenz 303 Prä-Dekrement 116 Präfix 242 Präfix/Postfix 116 Pragma 1185 Prä-Inkrement 116 Preferences, Klasse 532 Preimage-Angriffe 1415 PreparedStatement, Schnittstelle 1310, 1326 primitiver Type 100 Primzahlen 730 Principal 1408, 1412 print() 159, 775 Printable, Schnittstelle 1137 PrinterJob, Klasse 1137 printf() 97, 775 printf(), PrintWriter/PrintStream 282 PrintJob, Klasse 1137 println(), print() 96, 775 PrintService, Schnittstelle 1138 printStackTrace() 467 PrintStream 775 PrintWriter 775 Priorität, Thread 563 Prioritätswarteschlange 563 PriorityQueue, Klasse 661 private, Schlüsselwort 325, 1349 PrivateKey, Schnittstelle 1418 Privatsphäre 324 Process, Klasse 529 ProcessBuilder, Klasse 526 Profil, Java ME 1282 Profiling 525 Profiling-Informationen 1438 Programm 93 Programmicon 1116 Programmieren gegen Schnittstellen 399 ProGuard 1451 Prolog 93 Properties 455, 715 Properties, Bean 455 Properties, Klasse 521, 715 Property 329 PropertyChangeEvent, Klasse 457, 463, 943 PropertyChangeListener, Schnittstelle 457 PropertyDescriptor, Klasse 1358 PropertyPermission 1410 Property-Sheet 455 PropertyVetoException 460 Proposed Standard 1144 protected, Schlüsselwort 327, 366, 1349 Protocol Handler 1154 Protocols 64 Protokoll 1144 Protokoll-Handler 1154 Proxy 1205 Proxy-Authenticate, ResponseHeader 1185 Proxy-Authorization 1158 Proxy-Server 1150 Prozess 543 Pseudo-Primzahltest 308 Public, Response-Header 1185 public, Schlüsselwort 324, 1349 PublicKey, Schnittstelle 1418 Publish-Subscribe 1227 Pulldown-Menü 976 Punktoperator 184 pure abstrakte Klasse 392 PushbackInputStream, Klasse 792 PushbackReader, Klasse 792 PUT 1181 put(), Map 704 Q qNaNs 295 QuadCurve2D, Klasse 1089 quadratische Kurvensegmente 1091 Quadratwurzel 302 quadTo(), GeneralPath 1091 QuantumDB 1293 Quartz 621 Quasiparallelität 543 Quellcodeverschönerer 1452 Query-String 1159 Queue, Schnittstelle 661, 700 Quicksort 690 Quiet NaN 295 Quoted Printing Encoding 1196 R race condition 575 race hazard 575 RadialGradientPaint 1095 Rahmen 932 random(), Math 212, 304 Random, Klasse 306 RandomAccess, Schnittstelle 677 RandomAccessFile, Klasse 466, 751 Rang eines Operators 120 Range-Checking 61 Rangordnung 120 Raw-Type 422 1471 Index Reader, Klasse 773 readLine(), BufferedReader 791 readLine(), RandomAccessFile 466 readObject(), ObjectInputStream 822 readPassword() 781 readResolve() 830 readUTF(), RandomAccessFile 753 ReadWriteLock, Schnittstelle 580 rebind(), Registry 1215 Rechenungenauigkeit 138 rechtsassoziativ 122 Record Management System 1287 Rectangle2D, Klasse 1089 RectangularShape, Klasse 1089 reentrant 588 ReentrantLock, Klasse 578 ReentrantLock, Schnittstelle 593 ReentrantReadWriteLock, Klasse 581 Reference Concrete Syntax 845 referenced-Meldung 1218 Referenz 59 Referenzierung 128 Referenztyp 100, 111 Referenztyp, Vergleich mit == 193 Referenzvariable 183 Reflection 1339 ReflectPermission 1410 reflexive Assoziation 359 reg 536 regionMatches(), String 242 Registry 532, 1207, 1213 REGISTRY_PORT 1214 REGISTRY_PORT, Registry 1214 reguläre Ausdrücke 262 Reihung 204 reine abstrakte Klasse 392 Rekursionsform 163 rekursive Assoziation 359 rekursive Funktion 162 relationale Datenbanksysteme 1295 Relationaler Operator 118 Remainder Operator 113 Remote Manager 1388 Remote Object Activation 1221 1472 Remote Procedure Call 1207 Remote, Schnittstelle 1211 RenderedImage, Schnittstelle 1123 Rendering-Algorithmus 1134 Renderpack Pipelines 1027 Rendezvous 560, 562 repaint() 1072 replace(), String 246 replaceAll(), Collections 720 replaceAll(), String 247 replaceFirst(), String 247 ReplicateScaleFilter, Klasse 1122 Request 1181 Request For Comment 1144 Request Header 1183 requestFocusInWindow(), JComponent 935 reservierte Schlüsselwörter 89 ResourceBundle, Klasse 629 Response-Header 1183, 1185 Rest der Division 304 Restwertoperator 112–113, 303 Result, Schnittstelle 889 Resultat 111 ResultSet, Schnittstelle 1312 ResultSetMetaData, Schnittstelle 1329 resume(), Thread 563 RetentionPolicy, Aufzählung 1380 Re-throwing 484 Retry-After, Response-Header 1185 return, Schlüsselwort 153, 216 revalidate(), JComponent 942 RFC 1144 RFC 1521 280 RFC 1952 1186 RFC 2616 1180 RGB 1100 Rhino 530 Rich Text Format 1010 rint(), Math 301 Ritchie, Dennis M. 70 RMI 1207 RMI Wire Protocol 1208 rmi:// 1216 rmic, Dienstprogramm 1213 RMIClassLoader, Klasse 1220 rmid, Dienstprogramm 1222 RMI-Klassenlader 1220 RMI-Logging 1217 rmiregistry, Dienstprogramm 1214, 1310 RMI-Transportschicht 1208 Robot, Klasse 1060, 1062 Rollbalken 962 Rollenbasierte Rechtevergabe 1411 Rollrads 938 Ron Rivest 1415 Rotation 1134 round(), Math 301 RoundingMode, Aufzählung 316 RoundRectangle2D, Klasse 1089 Router 1143 RowFilter, Klasse 1027 RowSet, Schnittstelle 1321 RPC 1207 rt.jar 513 RTF 51, 1010 Rückgabetyp 148 Rückgabewert 150 Rumpf 148 run(), Runnable 546 Runden 300 Rundungsfehler 114 Rundungsmodi, BigDecimal 315 runFinalizersOnExit(), System 512 Runnable, Schnittstelle 415, 546 Runtime 526 Runtime Packages 1401 RuntimeException 479 Run-Time-Interpreter 57 RuntimePermission 1410 r-Wert 111 S Sandbox 1403 Saturation 1100 SAX 854 SAXBuilder, Klasse 872 SAXParser, Klasse 866 SCALE_AREA_AVERAGING, Image 1121 SCALE_DEFAULT, Image 1121 SCALE_FAST, Image 1121 SCALE_REPLICATE, Image 1121 SCALE_SMOOTH, Image 1121 Index Scanner, Klasse 268 Schablonen-Muster 766 Schaltjahr 155, 624 ScheduledThreadPoolExecutor, Klasse 567, 572 Scheduler 543, 573 Schema 849 Scherung 1134 Schieberegler 962 Schlange 661 Schleifen 136 Schleifenbedingung 137–138 Schleifen-Inkrement 140 Schleifentest 140 Schleifenzähler 141 Schlüssel 662 Schlüsselpaare 1413 Schlüsselspeicher 1414 Schlüsselwörter 89 Schnittstelle 64, 395 Schnittstellen-Typen 100 Schriftlinie 1080 Schurken 623 schwergewichtige Komponente 896 Schwyzerdütsch 631 Scope 104 Screen_Updater 566 Screenshot 1063 ScriptEngine, Schnittstelle 531 ScriptEngineManager, Klasse 531 Scriptlets 1251 Scrollable, Schnittstelle 945 Scrollbar 962 ScrollPaneLayout, Klasse 962 sealing, Jar 412 SECOND, Calendar 642 SecretKey, Schnittstelle 1418 SecretKeySpec, Klasse 1420 Secure Hash Algorithm 1415 Secure Hash Standard 1415 Secure Sockets Layer 1204 SecureRandom, Klasse 306 Security Manager 1403 SecurityException 1408 Security-Manager 59 SecurityManager 1267 SecurityManager, Klasse 1403– 1404 SecurityPermission 1410 Seed 306–307 Seiteneffekt 322 Sekunden 642 Selbstbeobachtung 455 Semantik 85 semantisches Ereignis 914 Semaphore, Klasse 603 Separator 91 SEPTEMBER, Calendar 638 SEQUEL 1333 Sequence, Klasse 539 SequenceInputStream, Klasse 769 Sequencer, Schnittstelle 538–539 Sequenz 656, 661 Sequenzdiagramm 181 Serializable, Schnittstelle 824 SerializablePermission 1410 serialPersistentFields 827 serialver, Kommandozeilenprogramm 834 serialVersionUID 833 Server 1167, 1207 Server, Response-Header 1185 ServerSocket, Klasse 1172 Service Unavailable 1184 ServiceLoader, Klasse 1301 Service-Provider Implementation 497 Session, Klasse 1196, 1199 Set, Schnittstelle 661, 692 setBorder(), JComponent 932 setContentType(), JEditorPane 1010 setDefaultCloseOperation(), JFrame 901, 922 setDefaultRenderer(), JTable 1022 setDoInput(), URLConnection 1153 setDoOutput(), URLConnection 1153 setFont(), Graphics 1081 setLayout(), Container 948 setLookAndFeel(), UIManager 1044 setModel(), JSpinner 1002 setModel(), JTable 1017 setPaint(), Graphics2D 1096 setPriority(), Thread 563 setProperty(), Properties 715 setRenderingHint(), Graphics2D 1089 setSize(), Window 903 Setter 329 setText(), JButton 924 setText(), JLabel 907 setText(), JTextComponent 1005 Set-Top-Boxen 56 setVisible(), Window 903 SGML 844 SHA 1415 Shallow Copy 712 Shamir, Adi 1415 Shape, Schnittstelle 1088–1089 shared objects 1427 ShellFolder, Klasse 737 Sheridan, Mike 56 Shift 120 Shift-Operator 169 SHORT, DateFormat 649 short, Datentyp 101, 106, 291 Short, Klasse 197 Short-Circuit-Operator 119 showConfirmDialog(), JOptionPane 1038 showMessageDialog(), JOptionPane 1038 showOptionDialog(), JOptionPane 1038 SHS 1415 Shutdown-Hook 621 Sicherheitsmanager 1403, 1407 Sichtbarkeit 104, 324, 366 Sichtbarkeitsmodifizierer 324 signal(), Condition 593 signaling NaN 295 Signierung 1408, 1412 Simple API for XML Parsing 854 Simple Mail Transfer Protocol 1195 SimpleDateFormat, Klasse 647 SimpleTimeZone, Klasse 633 SIMPLIFIED_CHINESE 626 SIMULA 64 Simula-67 177 sin(), Math 299 Single Inheritance 365 SINGLE_INTERVAL_SELECTION, ListSelectionModel 1000 SINGLE_SELECTION, ListSelectionModel 1000 Singleton 357, 724 sinh(), Math 300 1473 Index Sinus 299 sizeof 128 Skalierung 1134 Skipjack 1415 Skript-Engine 530 Slash 732 sleep(), Thread 553 slider, Schieberegler 962 Slivka, Ben 75 Smalltalk 58, 177 Smart-Card 1412 SMB (Server Message Block) 749 Smiley 87 SMTP 1195 SMTP-Server 1196 sNaN 295 SOAP 1222 SOCK_DGRAM 1203 SOCK_STREAM 1203 Socket, Klasse 1167 SocketPermission 1410 Sockets 1166 SOCKS 1151 SoftBevelBorder, Klasse 933 Sommer-/Winterzeit 632 Sommerzeit 633 Sommerzeitabweichung 643 sort(), Arrays 223, 687 sort(), Collections 689 SortedMap, Schnittstelle 704 SortedSet, Schnittstelle 697 sortieren 689 Soundbank 538 Source, Schnittstelle 889 Source-Code Beautifier 1452 späte dynamische Bindung 385 SpinnerDateModel, Klasse 1002 SpinnerListModel, Klasse 1002 SpinnerModel, Schnittstelle 1002 SPI-Pakete 497 Splash-Screen 1117 split(), Pattern 267 split(), String 266 SpringLayout, Klasse 948 Sprungmarken 146 SQL 1333 SQL 2 1333 SQLException 1306, 1318 SQLWarning, Klasse 1318 SQuirreL 1293 SSL 1204 1474 SSLSocket, Klasse 1204 SSLSocketFactory, Klasse 1204 stabil sortieren 689 Stabile Sortieralgorithmen 691 Stack 698 Stack, Klasse 698 Stack-Inhalt 488 Stack-Trace 486 StackTraceElement, Klasse 487 Standard Extension API 497 Standard Generalized Markup Language 844 Standard MBeans 1388 Standard Tag Library 1244 Standard Widget Toolkit 1066 Standardberechtigungen 1409 Standard-Konstruktor 186, 343 Standardserialisierung 820 Stapelspeicher 698 Star Seven 56 start(), Thread 547 startsWith(), String 242 Statement, Schnittstelle 1310 statements 92 static final 396 static, Schlüsselwort 99, 151, 331 statische Eigenschaft 331 statische innere Klasse 408 statische Methode 151 Statischer Block 335 statisches Import 231 Statusanzeige 974 Statuscode 1183 Statuszeile 1183 StAX 856 Stellvertreterobjekt 1205, 1213 Sternzeit 623 Steuerelemente 895 stilles NaN 295 STL Bibliothek 690 stop(), Thread 557 Store-and-Forward 1195 StreamEncoder 799 StreamFilter, Schnittstelle 861 StreamTokenizer, Klasse 838 streng-typisiert 100 strictfp, Schlüsselwort 305 StrictMath, Klasse 305 String 96, 234 StringBuffer, Klasse 236, 252 StringBuilder, Klasse 236, 252 StringIndexOutOfBoundsException 242–243 Stringkonkatenation 120 String-Literale 236 StringReader, Klasse 763, 784 Stringteil vergleichen 242 Stringteile extrahieren 242 StringTokenizer, Klasse 273 StringWriter, Klasse 782 Stroke, Schnittstelle 1105 Stroustrup, Bjarne 178 Structured English Query Language 1333 Struts 1266 Subinterface 403 Subject 1412 Subklasse 363 Subprotokoll 1304 Substitutionsprinzip 374 substring(), String 243 Subtraktion 112 Suffix 242 SUID 834 Summe aller Einträge 1337 sun, Paket 230 sun.boot.class.path 514 sun.jdbc.odbc.JdbcOdbcDriver 1302 sun.nio.cs 799 SunWorld 56 super() 369, 371 super, Generics 423 super, Schlüsselwort 371, 378 Superklasse 363 Surrogate-Paar 86 suspend(), Thread 563 SWIG 1433 swing.properties 1044 SwingUtilities, Klasse 1055 SwingWorker, Klasse 1056 SwingWT 1066 switch-Anweisung 133 Swixml 1065 SWT 1066 symbolische Konstante 336 Symbolleiste 983 sync() 762 Synchronisation 512, 573 synchronized, Schlüsselwort 577, 582 SynerJ 74 Index Syntax 85 System.err 97, 779 System.in 527, 767, 779 System.out 97, 779 SystemColor, Klasse 1095, 1101 Systemeigenschaften 72, 521 Systemfarben 1101 System-Klassenlader 515 SystemTray, Klasse 989 T TableCellEditor, Schnittstelle 1023 TableCellRenderer, Schnittstelle 1019 TableColumn, Klasse 1024 TableLayout, Klasse 962 TableModel, Schnittstelle 1014, 1024 TableModelEvent, Klasse 1018 TableModelListener, Schnittstelle 1014 TableRowSorter, Klasse 1027 Tabulator 274 Tag 642, 843 Tag des Jahres 642 Tage im Monat 646 Tagesdatum 644 Taglib 1244 TagLib-Deskriptoren 1244 TAI 624 TAIWAN 626 Taj Mahal 64 tan(), Math 299 Tangens 299 tangle 431 Tango Desktop Projekt 911 tanh(), Math 300 Tar-Archive 806 Tastatur-Shortcut 981 Tastenkürzel 981 TCP 1189 TCP/IP 1166 Tear-Off-Menü 978 Teletubbies 1161 Template-Code 1236 Template-Pattern 766 terminiert 564 TextArea, Klasse 1008 TextLayout, Klasse 1087 TexturePaint 1095 Textverarbeitung 50 this und Vererbung 416 this$0, innere Klasse 412 this() 371 this(), Beschränkungen 349 this(), Konstruktoraufruf 348 this-Referenz 322, 371 this-Referenz, innere Klasse 410 Thread 543 thread local storage (TLS) 609 Thread, Klasse 415, 547 ThreadDeath, Klasse 559 ThreadGroup, Klasse 612 Threadgruppe 615 ThreadLocal, Klasse 609 thread-lokale Variablen 609 Thread-Pool 567 ThreadPoolExecutor, Klasse 567 Threads, Zustände 553 Throwable, Klasse 476 throws 469 Tick Marks 962 tiefe Kopie, clone() 507 Tiefe Objektkopien 831 Tim Berner-Lee 1180 timeout 1208 Timer, Klasse 619 Timer, Swing-Klasse 1064 TimerTask, Klasse 619 Timestamp, Klasse 1316 TimeZone, Klasse 632 Titelleiste 902 TitledBorder, Klasse 933 TLS 1204 toArray(), Collection 682 toCharArray(), String 207 tödliche Umarmung 590 Token 90, 274 toLowerCase(), Character 234 toLowerCase(), String 245 Tomcat 1232 Toolkit, Klasse 899 TooManyListenersException 454 Topic, JMS 1227 Toplevel-Container 900 Top-Level-Klassen 408 toString(), Arrays 224 toString(), Integer 199 toString(), Object 376, 498 toString(), Point 185 toUpperCase(), Character 234 toUpperCase(), String 245 Transferable, Schnittstelle 1047 Transfer-Encoding 1185 TransferHandler, Klasse 1050 Transformationen 1095 transient, Schlüsselwort 827 translate(), Graphics 1130 Transparency, Schnittstelle 1096 TransparentLayout 961 Transport Layer Security 1204 Transportschicht 1208 TrayIcon, Klasse 989 TreeMap, Klasse 656, 662, 702 TreeModel, Schnittstelle 1028, 1030 TreeNode, Schnittstelle 1030 TreeSelectionListener, Schnittstelle 1029 TreeSet, Klasse 695 Trennzeichen 90, 266 trim(), String 246 true 101 TrueType-Zeichensatz 1084 TrueZIP 806 try 465 Tupel 1289 Türme von Hanoi 164 typ erasure 421 Typanpassung 122 TYPE_INT_RGB, BufferedImage 1119 TYPE_SCROLL_INSENSITIVE, ResultSet 1318 Typecast 122 Types, Klasse 1314 Typvariable 419 Typvergleich 121 U Überblendung, Grafik 1104 überdecken, Methoden 387 überladen 97 überladene Methode 158 überladener Operator 62 überladenes Plus 127 überlagert, Methode 376 Überlauf 296 überschreiben, Methoden 376 Übersetzer 95 1475 Index überwachtes Warten 597 Uboxing 200 UCSD-Pascal 57 UDP 1189 UDP-Protokoll 1188 UIDefaults, Klasse 908 UI-Delegate 940 UIManager, Klasse 1044 UK 626 Umgebungsvariablen, Betriebssystem 524 Umkehrfunktionen 299 UML 180 Umlaut 86 Umrisslinie 1105 Umrisslinie, Stroke 1095 unärer Operator 110 unäres Minus 115 unäres Plus/Minus 120 Unauthorized 1184 unbenanntes Paket 230 UncaughtExceptionHandler, Schnittstelle 556 unchecked 541 Und 119 UNDECIMBER, Calendar 638 Undo/Redo 1051 UndoableEditEvent, Klasse 1052 UndoManager, Klasse 1051 Unendlich 293 Unicast, Beans 454 UnicastRemoteObject, Klasse 1215 Unicast-Verbindung 1204 Unicode escapes 86 UNICODE_CASE, Pattern 264 Unicode-Zeichen 85 unidirektionale Beziehung 359 Unified I/O 755 Unified Method 180 Uniform Resource Locater 1144 Universal Time 623 Unix-Crypt 1418 UnknownHostException 1168 unlock(), Lock 578 Unmarshaller, Schnittstelle 892 unnamed package 230 UnsatisfiedLinkError 1424 UnsupportedOperationException 480, 486, 660, 667, 681, 723 1476 Unterklasse 363 Unterlänge 1086 Untermenü 977 Unzahl 112 Upgrade 1185 upper bound wildcard 425 URL 1144 URL, Klasse 1144 URLClassLoader, Klasse 516 URLConnection, Klasse 1151 URLDecoder, Klasse 1160 URLEncoder, Klasse 1159 US 626 Use-Cases-Diagramm 181 user.timezone 638 UTC 624 UTF-16 846 UTF-16 Kodierung 86 UTF-8 846 UTF-8 Kodierung 753 Utility-Klasse 357 uuencode 1195 V valid, XML 847 Value 662 valueOf() 196 valueOf(), String 250 values(), Map 709 Varargs 217 variable Argumentanzahl 217 Variablendeklaration 102 Variableninitialisierung 387 Vary, Response-Header 1185 Vector, Klasse 669 veränderbare Zeichenketten 252 verbindungsloses Protokoll 1188 verbindungsorientiert 1188 verbose 1436, 1438 Verbundoperator 115 verdecken von Variablen 322 vererbte Konstanten 404 Vererbung 363 Vergleich 241 Vergleichsoperator 118 Vergleichsstring 242 verkettete Liste 657, 680 Verklemmung 544 Verlaufsbalken 974 Verschiebeoperator 169 Verschiebung 1134 Verzeichnis anlegen 740 Verzeichnis umbenennen 740 Vetorecht 456 Via 1185 Video-Übertragungen 1129 View 991 ViewPortLayout, Klasse 962 virtuelle Maschine 57 Visual Age for Java 73 Visual Basic 246 void, Schlüsselwort 151 volatile, Schlüsselwort 606 VolatileImage, Klasse 1129 Vorschaubild 1111 Vorzeichenerweiterung 120 Vorzeichenumkehr 115 W Wahrheitswert 100 wait(), Object 592, 600 War-Archiv 1234 Warning, Response-Header 1185 Warning:Applet Window 1408 Watson, Thomas 1205 WAV 538 weave 431 WEB 431 Web Application Security 1266 Web-Applets 56 Webbrowser 1011 WebRowSet, Schnittstelle 1322– 1323 WebRunner 56 Webstart 1279 Wechselknopf 929 WEEK_OF_MONTH, Calendar 642 WEEK_OF_YEAR, Calendar 642 Weichzeichnen 1075, 1134 Well-Known System Ports 1167 Wertebereich 328 Werte-Objekt 196 Wertoperation 110 Wertübergabe 152 Wettlaufsituation 575 while-Schleife 136 WHITE, Color 1098 White-Space 90 widening conversion 123 Index Widgets 895 Wiederverwendung per CopyUnd-Paste 127 Wildcard 425 Wilde 1267 Win32-API 74 WinCE 1281 WIND_NON_ZERO, GeneralPath 1093 Winding Rule 1092 windowClosed(), WindowListener 921 windowClosing(), WindowListener 921 WindowEvent, Klasse 918 WindowListener, Schnittstelle 916 Windows Icon-Format 1111 Windows XP 1267 Windows-NT Konsole 278 Windows-Registry 536 Windungsregel 1092 Winkelfunktionen 299 WinZip 69 Wireless Toolkit 1283 wissenschaftliche Notation 108 Woche 642 Woche des Monats 642 wohlgeformt 845 WORA 65 Word 50 Worker-Thread 1058 Workspace 76 World Wide Web 56 Wrapper-Klasse 195 write once, run anywhere 65 writeObject(), ObjectOutputStream 821 Writer, Klasse 770 writeReplace() 830 writeUTF(), RandomAccessFile 753 wsimport, Dienstprogramm 1224, 1226 Wurzelelement 875 Wurzelverzeichnis 737 WWW-Authenticate, ResponseHeader 1185 X X.509 1413 XAML 1065 -Xbootclasspath 514 XDoclet 1340 Xerces 855 XHTML 853 XML 844 XML User Interface Language 1065 XMLDecoder, Klasse 836 XMLEncoder, Klasse 836 XMLEvent, Klasse 857 XMLEventFactory, Klasse 862 XMLEventReader, Klasse 860 XMLEventReader, Schnittstelle 862 XMLEventWriter, Klasse 858 XMLEventWriter, Schnittstelle 863 XMLInputFactory, Klasse 862 XMLOutputFactory, Klasse 862– 863 XMLOutputter, Klasse 873 XMLStreamConstants, Schnittstelle 858 XMLStreamReader, Schnittstelle 857 XMLStreamWriter, Klasse 858 XMLStreamWriter, Schnittstelle 862–863 -Xms 1438 -Xmx 1438 Xnoclassgc 1438 XOPEN SQL-Status 1318 XOR 1070 Xor 119, 168 Xor-Modus, Zeichnen 1105 XPath 884, 887 XPath, Klasse 885 XPath-Wurzel 884 -Xprof 1438 -Xrs 1438 X-Server 1140 XSLT 887 -Xss 1438 XStream 838 XUL 1065 Xvfb-Server 1140 X-Virtual-Framebuffer-Server 1140 Y YEAR, Calendar 642 yield(), Thread 555 Z Zahlenwert, Unicode-Zeichen 85 Zeichen 100, 109 Zeichen ersetzen 246 Zeichenbereich 1095 Zeichenkette 96 Zeichenkodierung 278 Zeiger 59 Zeilenkommentar 93 Zeilentrenner 274 Zeilenumbruch 522 Zeitablauf 1208 Zeitgenauigkeit 634 Zeitmessung 525 Zeitverschiebung 633 Zeitzone 624, 632, 651 Zeitzonenabweichung 643 Zertifizierungsstelle 1412 ZipEntry, Klasse 810 ZipFile, Klasse 810 zirkuläre Assoziation 359 ZONE_OFFSET, Calendar 643 Z-Order 1033 Zufallszahl 304, 309 Zufallszahlengenerator 306 Zugriffsmethode 328–329 Zugriffsmodifizierer 1355 zusammengesetzte Bedingung 130 Zustandsänderung 463 Zuweisung 121 Zuweisung mit Operation 121 Zuweisung pro Zeile 112 zweidimensionales Feld 213 Zweierkomplement 291 zweistelliger Operator 110 Zwischenablage 1046 zyklische Redundanzprüfung 817 1477