Inhalt

Inhalt Vorwort 35 Vorwort zur 4. Auflage 46 Vorwort zur 5. Auflage 46 1 Schon wieder eine neue Sprache? 1.1 Dererste Kontakt 51 1.2 Historischer Hintergrund 51 1.3 1.4 1.5 49 Eigenschaften von Java 52 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 53 54 54 55 56 56 57 57 57 ßytecode und die virtuelle Maschine Kein Präprozessor für Textersetzungen Keine überladenen Operatoren Zeigerund Referenzen Bring den Müll raus, Carbage-Collector! Ausnahmenbehandlung Objektorientierung in Java Java-Security-Modell Wofür sich Java nicht eignet Java im Vergleich zu anderen Sprachen 58 1.4.1 1.4.2 1.4.3 1.4.4 59 59 59 60 Java und JavaScript Normierungsversuche Die Rolle von Java im Web Vollwertige Applikationen statt Applets Die Java Platform Standard Edition (Java SE) 60 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 60 61 62 62 62 JDK und JRE Java-Versionen Java für die Kleinen Java für die Großen Direkt ausführbare Programme, native Compiler 1.6 Entwicklungsumgebungen 1.6.1 Sun ONE Studio und NetBeans von Sun 1.6.2 IBM und Eclipse 1.6.3 Together 1.6.4 Ein Wort zu Microsoft, Java und zu J++ 63 63 63 64 65 1.7 Installationsanleitung für Java 2 65 1.7.1 1.7.2 1.7.3 1.7.4 66 66 67 68 DasJavaSE beziehen Java SE unter Windows installieren Compiler und Interpreter nutzen Installation der Laufzeitumgebung (1.4) unter Linux Inhalt 5 1.8 1.9 Das erste Programm compilieren und testen 1.8.1 Häufige Compiler-und Interpreterprobleme 69 70 71 Eclipse 71 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 Eclipse starten Das erste Projekt anlegen Eine Klasse hinzufügen Übersetzen und Ausführen JDK statt JRE Start eines Programms ohne Speicheraufforderung Projekt einfügen oder Workspace für die Aufgaben wechseln Allgemeine Plugins für Eclipse Eclipse Web Tools Platform (WTP) 72 76 77 77 78 79 79 81 2 Sprachbeschreibung 2.1 Anweisungen und Programme 2.2 Elemente der Programmiersprache Java 85 2.2.1 2.2.2 2.2.3 2.2.4 Textkodierung durch Unicode-Zeichen Literale Bezeichner Reservierte Schlüsselwörter 85 2.2.5 Token 90 2.2.6 2.2.7 2 2 8 Semantik Kommentare Funktionsaufrufe als Anweisungen 90 2.2.9 2.2.10 Die leere Anweisung Der Block 87 87 89 94 97 97 97 2.3 Datentypen 2.4 2.3.1 Primitive Datentypen 2.3.2 Wahrheitswerte 2.3.3 Variablendeklarationen 2.3.4 Ganzzahlige Datentypen 2.3.5 Die Fließkommazahlen 2.3.6 Alphanumerische Zeichen 2.3.7 Die Typanpassung (das Casting) 2.3.8 Lokale Variablen, Blöcke und Sichtbarkeit 2.3.9 Initialisierung von lokalen Variablen Ausdrücke, Operanden und Operatoren 98 10 ° '00 102 '° 4 105 106 111 112 113 114 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.4.10 6 Inhalt Zuweisungsoperator Verbundoperatoren Präfix-oder Postfix-Inkrement und-Dekrement Unäres Minus und Plus Arithmetische Operatoren Die relationalen Operatoren Logische Operatoren Rang der Operatoren in der Auswertungsreihenfolge Überladenes Plus für Strings Was C(++)-Programmierer vermissen könnten 116 118 118 121 121 122 124 1 2 6 2.5 2.6 2.7 2.8 Bedingte Anweisungen oder Fallunterscheidungen 126 2.5.1 2.5.2 2.5.3 128 131 Die if-Anweisung Die Alternative wählen mit einer if/else-Anweisung 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 126 133 133 134 I36 137 142 144 Methoden einer Klasse 145 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.7.10 2.7.11 2.7.12 2.7.13 2.7.14 I46 I47 148 149 149 151 151 I52 I56 158 I58 160 162 165 Bestandteil einer Funktion Aufruf einer Methode Methoden ohne Parameter Statische Funktionen (Klassenmethoden) Parameter, Argument und Wertübergabe Methoden vorzeitig mit return beenden Nicht erreichbarer Quellcode bei Funktionen Rückgabewerte Methoden überladen Vorgegebener Wert für nicht aufgeführte Argumente Finale lokale Variablen Rekursive Funktionen Die Ackermann-Funktion Die Türme von Hanoi Weitere Operatoren ^66 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 166 167 168 169 172 172 Bitoperationen Vorzeichenlose Zahlen in ein Integer und Char konvertieren Variablen mit Xor vertauschen Die Verschiebeoperatoren Ein Bit setzen, löschen, umdrehen und testen Der Bedingungsoperator I74 2.9 Einfache Benutzereingaben 3 Klassen und Objekte 3.1 Objektorientierte Programmierung 1 3.1.1 3.1.2 I79 180 3.2 3.3 3.4 Warum überhaupt OOP? Wiederverwertbarkeit 177 7 9 180 Klassen benutzen 3.2.1 Die Klasse Point 181 Die UML (Unified Modeling Language) 181 3.3.1 3.3.2 182 182 Hintergrund und Geschichte zur UML Wichtige Diagrammtypen der UML Anlegen und Nutzen eines Punktes 3.4.1 Definieren von Referenz-Variablen 183 183 In 3.4.2 3.4.3 3.4.4 184 184 187 3.5 Import und Pakete 188 3.6 Die API-Dokumentation 188 3.7 Mit Referenzen arbeiten 189 3.7.1 3.7.2 3.7.3 3.7.4 Die null-Referenz Zuweisungen bei Referenzen Funktionen mit nichtprimitiven Parametern Gleichheit von Objekten und die Methode equals() 189 191 192 193 Arrays 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.8.8 3.8.9 3.8.10 3.8.11 3.8.12 3.8.13 3.8.14 3.8.15 3.8.16 3.8.17 Deklaration von Arrays Arrays mit Inhalt Die Länge eines Arrays über das Attribut length Zugriff auf die Elemente über den Index Array-Objekte erzeugen Fehler bei Arrays Arrays mit nicht-primitiven Elementen Vorinitialisierte Arrays Die erweiterte for-Schleife Mehrdimensionale Arrays Die Wahrheit über die Array-Initialisierung Mehrere Rückgabewerte Argument per Referenz übergeben Arrays klonen Feldinhalte kopieren Die Klasse Arrays zum Vergleichen, Füllen und Suchen Methode mit variabler Argumentanzahl (vararg) 195 196 196 197 198 198 20 ° 201 202 202 204 206 207 207 208 208 209 211 3.8 3.9 3.10 8 Anlegen eines Exemplars einer Klasse mit dem new-Operator Zugriff auf Variablen und Methoden mit dem ».« Konstruktoren nutzen Der Einstiegspunkt für das Laufzeitsystem main() 212 3.9.1 3.9.2 3.9.3 212 213 213 Kommandozeilen-Parameter ausgeben Der Rückgabewert von main() und System.exit() Parser der Kommandozeilenargumente Apache CLI Eigene Pakete schnüren 215 3.10.1 3.10.2 3.10.3 3.10.4 3.10.5 3.10.6 3.10.7 215 215 216 216 217 217 218 Die package-Anweisung Importieren von Klassen mit import Paketnamen Hierarchische Strukturen und das Default-Package Klassen mit gleichen Namen in unterschiedlichen Paketen Statisches Import Eine Verzeichnisstruktur für eigene Projekte 4 Der Umgang mit Zeichenketten 4.1 Strings 4.1.1 4.1.2 4.1.3 Inhalt und deren Anwendung String-Literale als String-Objekte für konstante Zeichenketten String-Objekte neu anlegen String-Länge 219 221 222 222 224 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.2 4.3 Gut, dass wir verglichen haben String-Teile extrahieren Suchen und ersetzen Veränderte Strings liefern Unterschiedliche Typen in Zeichenketten konvertieren 225 226 229 232 234 Veränderbare Zeichenketten mit StringBuffer/StringBuilder 234 4.2.1 4.2.2 4.2.3 4.2.4 235 236 236 237 Anlegen von StringBuffer/StringBuilder-Objekten Die Länge eines StringBuffer/Builder-Objekts lesen und setzen Daten anhängen Zeichen(folgen) setzen, erfragen, löschen und umdrehen Vergleiche von Zeichenketten 238 4.3.1 4.3.2 4.3.3 4.3.4 238 239 239 242 equalsO in String und StringBuffer/StringBuilder equalsO und hashCode() bei StringBuffer/StringBuilder Sprachabhängiges Vergleichen mit der Collator-Klasse Effiziente interne Speicherung für die Sortierung 4.4 Reguläre Ausdrücke 4.4.1 Die Klassen Pattern und Matcher 4.4.2 Mit MatchResult alle Ergebnisse einsammeln 4.4.3 Das alternative Paket org.apache.regexp 243 243 244 245 4.5 Zerlegen von Zeichenketten 4.5.1 Splitten von Zeichenketten mit splitO aus Pattern 4.5.2 split() in String 4.5.3 Die Klasse Scanner 4.5.4 StringTokenizer 4.5.5 Der Breaklterator als W o r t - u n d Satztrenner 245 245 246 246 250 252 4.6 Zeichenkodierungen 4.6.1 Kodierungen für unterschiedliche Codepages 4.6.2 Andere Klassen zur Konvertierung und das Paket Java.nio.charset 4.6.3 Base64-Kodierung 254 254 255 256 4.7 Formatieren von Ausgaben 4.7.1 Zahlen, Prozente und Währungen mit NumberFormat formatieren 4.7.2 Dezimalzahlformatierung mit DecimalFormat 4.7.3 Formatieren mit format() aus String 4.7.4 Ausgaben formatieren mit MessageFormat 257 259 259 261 263 5 Mathematisches 5.1 Arithmetik in Java 5.1.1 Java-Sondertypen im Beispiel 269 269 Die Funktionen der Math-Klasse 270 5.2.1 5.2.2 270 5.2 5.2.3 5.2.4 5.2.5 Attribute Winkelfunktionen-trigonometrische Funktionen und Arcus-Funktionen Runden von Werten Wurzel und Exponentialfunktionen Der Logarithmus 267 270 271 273 273 Inhalt 9 5.2.6 5.2.7 5.2.8 5.2.9 5.3 274 274 275 275 Mathe bitte strikt 275 5.3.1 Strikt Fließkomma mit strictfp 276 5.3.2 Die Klassen Math und StrictMath 276 5.4 Die Random-Klasse 276 5.5 Große Zahlen 5.5.1 Die Klasse Biginteger 5.5.2 Funktionen von Biginteger 5.5.3 Ganz lange Fakultäten 5.5.4 Große Fließkommazahlen mit BigDecimal 5.5.5 Komfortabel die Rechengenauigkeit setzen mit AAathContext 278 278 280 282 283 284 5.6 Rechnen mit Einheiten: Java Units Specification 286 5.7 Weitere Klassen für mathematische Probleme 287 6 Eigene Klassen schreiben 6.1 6.2 6.3 6.4 6.5 Inhalt 289 Eigene Klassen definieren 291 6.1.1 6.1.2 6.1.3 6.1.4 294 294 295 296 AAethodenaufrufe und Nebeneffekte Argumentübergabe mit Referenzen Die this-Referenz Überdeckte Objektvariablen nutzen Assoziationen zwischen Objekten 6.2.1 10 Rest der ganzzahligen Division Absolutwerte und Maximum/Minimum Zufallszahlen Der nächste Bitte Gegenseitige Abhängigkeiten von Klassen 297 298 Privatsphäre und Sichtbarkeit 298 6.3.1 6.3.2 6.3.3 300 300 301 Wieso nicht freie Methoden und Variablen für alle? Privat ist nicht ganz privat: Es kommt darauf an, wer's sieht Zugriffsmethoden für Attribute definieren Statische Methoden und statische Attribute 304 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.4.7 305 305 306 306 307 308 309 Warum statische Eigenschaften sinnvoll sind Statische Eigenschaften mit static Statische Eigenschaften über Referenzen nutzen? Warum die Groß-und Kleinschreibung wichtig ist Statische Eigenschaften und Objekteigenschaften Statische Variablen zum Datenaustausch Statische Blöcke als Klasseninitialisierer Konstanten und Aufzählungen 310 6.5.1 6.5.2 6.5.3 6.5.4 6.5.5 310 311 312 314 314 Konstanten über öffentliche statische final-Variablen Problem mit finalen Klassenvariablen Typsicherere Konstanten Aufzählungen mit enum in Java 5 enum-Konstanten in switch 6.6 6.7 6.8 6.9 6.10 6.11 Objekte anlegen und zerstören 315 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.6.6 6.6.7 6.6.8 316 319 322 324 325 327 328 328 Konstruktoren schreiben Einen anderen Konstruktor der gleichen Klasse aufrufen Initialisierung der Objekt- und Klassenvariablen Finale Werte im Konstruktor und in statischen Blöcken setzen Exemplarinitialisierer (Instanzinitialisierer) Zerstörung eines Objekts durch den Müllaufsammler Implizit erzeugte String-Objekte Private Konstruktoren, Utility-Klassen, Singleton und Fabriken Vererbung 331 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.7.10 6.7.11 6.7.12 6.7.13 6.7.14 6.7.15 6.7.16 6.7.17 331 331 332 333 335 336 337 339 339 340 343 345 346 346 347 348 348 Vererbung in Java Einfach- und Mehrfachvererbung Gebäude modelliert Konstruktoren in der Vererbung Sichtbarkeit protected Das Substitutionsprinzip Automatische und explizite Typanpassung Typen testen mit dem binären Operator instanceof Array-Typen und Kovarianz Methoden überschreiben Mit super eine Methode der Oberklasse aufrufen Kovariante Rückgabetypen Finale Klassen Nicht überschreibbare Funktionen Zusammenfassung zur Sichtbarkeit Sichtbarkeit in der UML Zusammenfassung: Konstruktoren und Methoden Object ist die Mutter aller Oberklassen 349 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.8.6 6.8.7 349 350 352 355 358 359 361 Klassenobjekte Objektidentifikation mit toStringO Objektgleichheit mit equalsO und Identität Klonen eines Objekts mit clone() Hashcodes Aufräumen mit finalizeO Synchronisation Die Oberklasse gibt Funktionalität vor 361 6.9.1 6.9.2 6.9.3 363 364 366 Dynamisches Binden als Beispiel für Polymorphie Keine Polymorphie bei privaten, statischen und finalen Methoden Polymorphie bei Konstruktoraufrufen Abstrakte Klassen und abstrakte Methoden 368 6.10.1 6.10.2 368 369 Abstrakte Klassen Abstrakte Methoden Schnittstellen 372 6.11.1 6.11.2 6.11.3 6.11.4 6.11.5 6.11.6 375 377 379 379 381 383 Ein Polymorphie-Beispie! mit Schnittstellen Die Mehrfachvererbung bei Schnittstellen Erweitern von Interfaces - Subinterfaces Vererbte Konstanten bei Schnittstellen Vordefinierte Methoden einer Schnittstelle Abstrakte Klassen und Schnittstellen im Vergleich Inhalt 11 6.11.7 6.11.8 CharSequenceals Beispiel einer Schnittstelle Die Schnittstelle Iterable 3^3 388 6.12 Innere Klassen 6.12.1 Statische innere Klassen und Schnittstellen 6.12.2 Mitglieds- oder Elementklassen 6.12.3 Lokale Klassen 6.12.4 Anonyme innere Klassen 6.12.5 this und Vererbung 6.12.6 Implementierung einer verketteten Liste 6 12.7 Funktionszeiger . . „ , . , . 6.13 Genensche Datentypen 6.13.1 Einfache Klassenschablonen 6.13.2 Einfache Methodenschablonen 6.13.3 Umsetzen der Generics, Typlöschung und Raw-Types 6.13.4 Einschränken der Typen 6.13.5 Generics und Vererbung, Invarianz 6.13.6 Wildcards 6.14 Die Spezial-Oberklasse Enum 6.14.1 Methoden auf Enum-Objekten 6.14.2 enum mit eigenen Konstruktoren und Methoden 6 15 Dokumentationskommentare mit javaDoc 6.15.1 Einen Dokumentationskommentar setzen 6.15.2 Mitjavadoc eine Dokumentation erstellen 6.15.3 HTML-Tags in Dokumentationskommentaren 6.15.4 6.15.5 6 15.6 6.15.7 Generierte Dateien Weitere Dokumentationskommentare javaDoc und Doclets Veraltete (deprecated) Klassen, Konstruktoren und Methoden 388 401 404 412 ^' 414 41 41/ d.21 7 Exceptions 7.1 Problembereiche einzäunen 7.1.1 Exceptions in Java mit try und catch 7.1.2 Eine Datei auslesen mit RandomAccessFile 7.1.3 Ablauf einer Ausnahmesituation 7.1.4 Wiederholung kritischer Bereiche 7.1.5 throws im Methodenkopf angeben 7.1.6 Abschließende Arbeiten mit finally 7.1.7 Nicht erreichbare catch-Klauseln 72 Die Klassenhierarchie der Fehler 7.3 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 Werfen 423 424 4 42 431 431 Die Exception-Hierarchie Oberausnahmen fangen Alles geht als Exception durch RuntimeException muss nicht aufgefangen werden Harte Fehler: Error eigener Exceptions 434 435 435 7.3.1 12 Inhalt Mit throw Ausnahmen auslosen 7.3.2 Neue Exception-Klassen definieren 437 7.3.3 Geschachtelte Ausnahmen 438 7.4 Rückgabewerte bei ausgelösten Ausnahmen 439 7.5 Der Stack Trace 7.5.1 Stack Trace aus Throwable 7.5.2 Stack Trace aus Thread 440 440 442 7.6 Assertions 442 7.6.1 7.6.2 7.6.3 442 442 443 8 8.1 8.2 8.3 8.4 8.5 8.6 Assertions in Java Assertions in eigenen Programmen nutzen Assertions aktivieren Die Funktionsbibliothek 445 Die Java-Klassenphilosophie 447 8.1.1 447 Übersicht über die Pakete der Standardbibliothek Wrapper-Klassen 453 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.2.7 454 455 458 459 460 463 465 Die Basisklasse Number für numerische Wrapper-Objekte Die Klasse Integer Wertebereich eines Typs und Überlaufkontrolle Unterschiedliche Ausgabeformate Autoboxing: Boxing und Unboxing Die Character-Klasse Die Boolean-Klasse Benutzereinstellungen 466 8.3.1 8.3.2 8.3.3 8.3.4 466 467 469 469 Eine zentrale Registry Einträge einfügen, auslesen und löschen Auslesen der Daten und Schreiben in anderem Format Auf Ereignisse horchen Die Utility-Klasse System 469 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.4.6 469 470 470 471 472 473 Systemeigenschaften der Java-Umgebung line.Separator Browser-Version abfragen Property von der Konsole aus setzen Umgebungsvariablen des Betriebssystems Einfache Zeitmessung und Profiling Ausführen externer Programme 475 8.5.1 8.5.2 8.5.3 8.5.4 8.5.5 8.5.6 8.5.7 475 476 477 477 478 478 480 Arbeiten mit dem ProcessBuilder Die Rückgabe Process übernimmt die Prozesskontrolle DOS-Programme aufrufen Umgebungsvariablen und Startverzeichnis Auf das Ende warten Die Windows-Registry verwenden Einen HTML-Browser unter Windows aufrufen Klassenlader (Class Loader) 480 8.6.1 8.6.2 480 482 Woher die kleinen Klassen kommen Die wichtigsten drei Typen von Klassenladern Inhalt 13 8.6.3 8.6.4 8.6.5 8.6.6 8.6.7 Der Java. lang.ClassLoader Hot Deployment mit dem URL-ClassLoader Das jre/lib/endorsed-Verzeichnis getContextClassLoaderO vom Thread Wie heißt die Klasse mit der Methode mainO? 483 484 486 486 487 8.7 Annotationen 8.7.1 Die eingebauten Annotations-Typen aus Java.lang 8.7.2 @Deprecated 8.7.3 Annotationen mit zusätzlichen Informationen 8.7.4 @SuppressWarnings 9 Threads und nebenläufige Programmierung 9.1 Prozesse und Threads 9.1.1 Wie parallele Programme die Geschwindigkeit steigern können 493 494 9.2 Threads 9.2.1 9.2.2 9.2.3 9.2.4 9.2.5 496 496 497 499 499 501 9.3 9.4 9.5 Inhalt erzeugen Threads über die Schnittstelle Runnable implementieren Thread mit Runnable starten Der Name eines Threads Die Klasse Thread erweitern W e r b i n ich? 488 488 489 489 489 491 Der Ausführer (Executor) kommt 502 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 502 503 504 506 Die Schnittstelle Executor DieThread-Pools Threads mit Rückgabe über Callable Mehrere Callable abarbeiten Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen 506 Die Zustände eines Threads 507 9.4.1 9.4.2 9.4.3 9.4.4 9.4.5 9.4.6 9.4.7 9.4.8 9.4.9 9.4.10 508 510 510 511 513 514 517 517 518 519 Threads schlafen Das Ende eines Threads UncaughtExceptionHandler für unbehandelte Ausnahmen Einen Thread höflich mit Interrupt beenden Der stopO von außen und die Rettung mit ThreadDeath Ein Rendezvous mit join() und Barrier sowie Austausch mit Exchanger MityieldO auf Rechenzeit verzichten Arbeit niederlegen und wieder aufnehmen Priorität Der Thread ist ein Dämon Synchronisation über kritische Abschnitte 521 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.5.6 9.5.7 9.5.8 521 521 522 523 524 525 529 531 Gemeinsam genutzte Daten Probleme beim gemeinsamen Zugriff und kritische Abschnitte Punkte parallel initialisieren i++sieht atomar aus, ist es aber nicht Kritische Abschnitte schützen Schützen mit ReentrantLock Synchronisieren mit synchronized Synchronized-Methoden der Klasse StringBuffer 9.6 9.7 9.8 9.9 9.10 9.5.9 9.5.10 9.5.11 9.5.12 9.5.13 Mit synchronized synchronisierte Blöcke Look-Freigabe im Fall von Exceptions Mit synchronized nachträglich synchronisieren Monitore sind reentrant, gut für die Geschwindigkeit Synchronisierte Methodenaufrufe zusammenfassen 531 532 533 534 535 9.5.14 Deadlocks 536 9.5.15 Erkennen von Deadlocks 537 Synchronisation über Warten und Benachrichtigen 538 9.6.1 9.6.2 9.6.3 9.6.4 9.6.5 539 542 546 547 548 Die Schnittstelle Condition Beispiel Erzeuger-Verbraucher-Programm Warten mit wait() und Aufwecken mit notifyO Falls der Lock fehlt: HlegalMonitorStateException Semaphoren Atomares und frische Werte mit volatile 551 9.7.1 9.7.2 552 553 Der Modifizierer volatile bei Objekt-/Klassenvariablen Das Paket Java.util.concurrent.atomic Mit dem Thread verbundene Variablen 554 9.8.1 9.8.2 554 556 ThreadLocal InheritableThreadLocal Gruppen von Threads in einer Thread-Gruppe 557 9.9.1 9.9.2 9.9.3 9.9.4 557 558 560 563 Aktive Threads in der Umgebung Etwas über die aktuelle Thread-Gruppe herausfinden Threads in einer Thread-Gruppe anlegen Methoden von Thread und ThreadGroup im Vergleich Die Klassen Timer und TimerTask 564 9.10.1 565 Job-Scheduler Quartz 9.11 Einen Abbruch der virtuellen Maschine erkennen 10 Raum und Zeit 565 569 10.1 Greenwich Mean Time (GMT) 571 10.2 Wichtige Datum-Klassen im Überblick 572 10.3 Sprachen der Länder 572 10.3.1 573 Sprachen und Regionen über Locale-Objekte 10.4 Übersetzung durch ResourceBundle-Objekte 576 10.5 Zeitzonen 10.5.1 Zeitzonen durch die Klasse TimeZone repräsentieren 578 580 10.6 Die Klasse Date 581 10.7 Calendar und GregorianCalendar 583 10.7.1 10.7.2 10.7.3 10.7.4 583 584 586 588 10.6.1 Objekte erzeugen und Methoden nutzen Die abstrakte Klasse Calendar Der gregorianische Kalender Ostertage Abfragen und Setzen von Datumselementen 581 10.8 11 11.1 Formatieren der Datumsangaben 593 10.8.1 10.8.2 10.8.3 593 600 602 Datenstrukturen und Algorithmen 11.3 Daten strukturen und die Collection-API 605 605 607 608 609 610 610 612 612 11.2.1 11.2.2 612 614 Die Schnittstellen Enumeration und Iterator Der typisierte Iterator Listen 616 Die Schnittstelle List Beispiel mit List-Methoden ArrayList Arrays.asListO und die »echten« Listen toArrayO von Collection verstehen - die Gefahr einer Falle erkennen Die interne Arbeitsweise von ArrayList und Vector LinkedList 617 619 621 623 623 626 627 Stack (Kellerspeicher, Stapel) 627 11.4.1 11.4.2 628 628 Die Methoden von Stack Ein Stack ist ein Vector-aha! 11.5 Queues (Schlangen) 11.5.1 Blockierende Queues und Prioritätswarteschlangen 629 630 11.6 Assoziative Speicher HashMap und TreeMap 631 11.6.1 11.6.2 11.6.3 11.6.4 11.6.5 11.6.6 11.6.7 631 631 634 634 635 636 637 11.7 16 Die Schnittstelle Collection Das erste Programm mit Container-Klassen Die Schnittstelle Iterable und das erweiterte for Generische Datentypen in der Collection-API Generischer Typ bei Iterable und konkreter Typ beim erweiterten for Schnittstellen, die Collection erweitern und Map Konkrete Container-Klassen Mit einem Iterator durch die Daten wandern 11.3.1 11.3.2 11.3.3 11.3.4 11.3.5 11.3.6 11.3.7 11.4 603 11.1.1 11.1.2 11.1.3 11.1.4 11.1.5 11.1.6 11.1.7 11.2 Mit DateFormat und SimpleDateFormat formatieren Parsen von Datumswerten Parsen und Formatieren ab bestimmten Positionen Inhalt Ein Objekt der Klasse HashMap erzeugen Einfügen und Abfragen der Datenstruktur Wichtige Eigenschaften von Assoziativspeichern Elemente im Assoziativspeicher müssen unveränderbar bleiben Aufzählen der Elemente Der Cleichheitstest, Hash-Wert und Klon einer Hash-Tabelle Die Arbeitsweise einer Hash-Tabelle Die Properties-Klasse 639 11.7.1 11.7.2 11.7.3 11.7.4 11.7.5 11.7.6 639 639 641 641 641 643 Properties setzen und lesen Properties verketten Eigenschaften ausgeben Hierarchische Eigenschaften Properties speichern Über die Beziehung Properties und Hashtable 11.8 11.9 Mengen (Sets) 643 11.8.1 11.8.2 11.8.3 645 646 647 HashSet TreeSet - die Menge durch Bäume LinkedHashSet Algorithmen in Collections 648 11.9.1 11.9.2 11.9.3 11.9.4 11.9.5 11.9.6 Datenmanipulation: Umdrehen, Füllen, Kopieren Vergleichen von Objekten mit Comparator und Comparable Den größten und kleinsten Wert einer Collection finden Sortieren Elemente in der Collection suchen Nicht-änderbare Datenstrukturen 649 649 652 653 656 657 11.9.7 nCopiesO 657 11.9.8 Singletons 658 11.10 Synchronisation der Datenstrukturen 11.10.1 Lock-Free-Algorithmen aus Java.util.concurrent 11.10.2 Wrapper zur Synchronisation 11.10.3 CopyOnWriteArrayList und CopyOnWriteArraySet 11.11 Die abstrakten Basisklassen für Container 11.11.1 Optionale Methoden 11.12 Die Klasse BitSetfür Bitmengen 11.12.1 11.12.2 11.12.3 11.12.4 Ein BitSet anlegen und füllen Mengenorientierte Operationen Funktionsübersicht Primzahlen in einem BitSet verwalten 658 658 659 660 660 661 661 661 662 663 664 11.13 Ein Design-Pattern durch Beobachten von Änderungen 665 11.13.1 Design-Pattern 11.13.2 Das Beobachter-Pattern (Observer/Observable) 665 666 12 Datenströme und Dateien 12.1 Datei und Verzeichnis 673 12.1.1 12.1.2 12.1.3 12.1.4 12.1.5 12.1.6 12.1.7 12.1.8 12.1.9 12.1.10 12.1.11 12.1.12 12.1.13 12.1.14 12.1.15 674 674 676 677 678 678 680 682 684 685 686 686 687 687 688 Dateien und Verzeichnisse mit der Klasse File Dateieigenschaften und -attribute Änderungsdatum einer Datei, Nur-Lese-Rechte setzen Dateien berühren, neue Dateien anlegen, temporäre Dateien Umbenennen und Verzeichnisse anlegen Die Wurzel aller Verzeichnisse/Laufwerke Verzeichnisse listen und Dateien filtern Dateien und Verzeichnisse löschen Verzeichnisse nach Dateien rekursiv durchsuchen Namen der Laufwerke URL-und URI-Objekte aus einem File-Objekt ableiten Locking Sicherheitsprüfung Implementierungsmöglichkeiten für die Klasse File Mime-Typen 671 12.2 12.3 12.4 Dateien 12.2.1 12.2.2 12.2.3 12.2.4 12.2.5 12.2.6 12.6 12.7 12.8 12.9 18 Inhalt °89 689 689 691 691 691 693 Stream-Klassen und Reader/Writer 693 12.3.1 12.3.2 693 694 Die abstrakten Basisklassen Übersicht über Ein-/Ausgabeklassen Binäre Ein-/Ausgabe-Klassen InputStream/OutputStream 695 12.4.1 12.4.2 12.4.3 12.4.4 12.4.5 12.4.6 695 697 12.4.7 12.4.8 12.4.9 12.5 mit wahlfreiem Zugriff Ein RandomAccessFile zum Lesen und Schreiben öffnen Aus dem RandomAccessFile lesen Schreiben Die Länge des RandomAccessFile Hin und her in der Datei Wahlfreier Zugriff und Pufferung mit Unified I/O Die abstrakte Basisklasse OutputStream Die Schnittstellen Closeable und Flushable Ein Datenschlucker Anwendung der Klasse FileOutputStream Die abstrakte Eingabeklasse InputStream Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar-Archiven laden Anwenden der Klasse FilelnputStream Kopieren von Dateien Das FileDescriptor-Objekt 697 698 699 700 700 701 703 PrintStream und Konsolenausgaben 703 12.5.1 12.5.2 12.5.3 12.5.4 12.5.5 704 705 706 708 710 Die Klasse PrintStream Die Schnittstelle Appendable System.in und System.out Ströme umlenken Den Bildschirm löschen und Textausgaben optisch aufwerten Daten filtern durch FilterlnputStream und FilterOutputStream 12.6.1 DataOutputStream/DatalnputStream 711 712 Besondere OutputStream-und InputStream-Klassen 712 12.7.1 12.7.2 12.7.3 713 714 714 Mit ByteArrayOutputStream in ein Byte-Feld schreiben Mit ByteArraylnputStream aus einem Byte-Feld lesen Ströme zusammensetzen mit SequencelnputStream Die Unterklassen von Writer 716 12.8.1 12.8.2 12.8.3 12.8.4 12.8.5 12.8.6 12.8.7 12.8.8 Die abstrakte Basisklasse Writer Ausgabemöglichkeiten durch PrintWriter erweitern Datenkonvertierung durch den OutputStreamWriter In Dateien schreiben mit der Klasse FileWriter StringWriter und CharArrayWriter Writer als Filter verketten Gepufferte Ausgabe durch BufferedWriter Daten mit FilterWriter filtern 717 719 721 722 723 725 726 728 Die Klassen um Reader 12.9.1 Die abstrakte Basisklasse Reader 12.9.2 Automatische Konvertierungen mit dem InputStreamReader 12.9.3 Dateien lesen mit der Klasse FileReader 12.9.4 StringReader und CharArrayReader 733 734 736 737 738 12.10 Die Filter für Zeichenströme 12.10.1 12.10.2 12.10.3 12.10.4 Gepufferte Eingaben mit der Klasse BufferedReader LineNumberReader zählt automatisch Zeilen mit Eingaben filtern mit der Klasse FilterReader Daten mit der Klasse PushbackReader zurücklegen 12.11 Kommunikation zwischen Threads mit Pipes 12.11.1 12.11.2 PipedOutputStream und PipedlnputStream PipedWriter und PipedReader 12.12 Datenkompression 12.12.1 12.12.2 12.12.3 12.12.4 Java-Unterstützung beim Komprimieren und Zusammenpacken Datenströme komprimieren Zip-Archive Jar-Archive 12.13 Prüfsummen 12.13.1 12.13.2 12.13.3 Die Schnittstelle Checksum Die Klasse CRC32 Die Adler32-Klasse 12.14 Persistente Objekte und Serialisierung 12.14.1 12.14.2 12.14.3 12.14.4 12.14.5 12.14.6 12.14.7 12.14.8 12.14.9 12.14.10 12.14.11 12.14.12 Objekte speichern mit der Standard-Serialisierung Objekte über die Standard-Serialisierung lesen Die Schnittstelle Serializable Nicht serialisierbare Attribute mit transient aussparen Das Abspeichern selbst in die Hand nehmen Tiefe Objektkopien Versionenverwaltung und die SUID Wie die ArrayList serialisiert Probleme mit der Serialisierung Serialisieren in XML-Dateien JavaBeans Persistence XStream 12.15 Zugriff auf SMB-Server 12.15.1 jCIFS 12.16 Tokenizer 12.16.1 12.16.2 739 739 741 743 745 748 748 750 752 753 753 756 763 763 763 764 766 766 767 770 772 773 774 777 779 781 782 782 782 784 785 785 786 StreamTokenizer CSV (Comma Separated Values)-Dateien verarbeiten 12.17 Die Logging-API 786 789 790 13 Die eXtensible Markup Language (XAAL) 13.1 Auszeichnungssprachen 795 13.1.1 13.1.2 795 796 13.2 Die Standard Generalized Markup Language (SGML) Extensible Markup Language (XML) 793 Eigenschaften von XML-Dokumenten 796 13.2.1 13.2.2 13.2.3 796 798 801 Elemente und Attribute Beschreibungssprache für den Aufbau von XML-Dokumenten Schema-eine Alternative zu DTD Inhalt 19 13.2.4 13.2.5 803 805 13.3 Die Java-APIs für XML 13.3.1 Das Document Object Model (DOM) 13.3.2 Simple API f o r X M L Parsing (SAX) 13.3.3 Java Document Object Model (JDOM) 13.3.4 Pull-API StAX 805 805 806 806 806 13.4 Serielle Verarbeitung mit StAX 807 13.4.1 13.4.2 13.4.3 13.4.4 13.4.5 807 807 809 810 811 13.5 13.6 13.7 Unterschiede der Verarbeitungsmodelle XML-Dateien mit dem Cursor-Verfahren lesen XML-Dateien mit dem Iterator-Verfahren verarbeiten Mit Filtern arbeiten XML-Dokumente schreiben Serielle Verarbeitung von XML mit SAX 813 13.5.1 13.5.2 13.5.3 813 813 814 Schnittstellen von SAX SAX-Parser erzeugen Die wichtigsten Methoden der Schnittstelle ContentHandier XML-Dateien mit JDOM verarbeiten 815 13.6.1 13.6.2 13.6.3 13.6.4 13.6.5 13.6.6 13.6.7 13.6.8 13.6.9 13.6.10 13.6.11 13.6.12 816 816 817 818 819 819 820 822 824 825 827 830 JDOM beziehen Paketübersicht Die Document-Klasse Eingaben aus der Datei lesen Das Dokument im XML-Format ausgeben Der Dokumenttyp Elemente Zugriff auf Elementinhalte Liste mit Unterelementen erzeugen Neue Elemente einfügen und ändern Attributinhalte lesen und ändern XPath JAXP als Java-Schnittstelle zu XML 832 13.7.1 13.7.2 833 835 Einführung in XSLT Umwandlung von XML-Dateien mit JDOM und JAXP 13.8 HTML-Dokumente einlesen 14 Crafikprogrammierung mit dem AWT 14.1 20 Namensraum (Namespace) XML-Applikationen 836 839 Das Abstract-Window-Toolkit 841 14.1.1 841 Java Foundation Classes 14.2 Das Toolkit 842 14.3 Fenster unter grafischen Oberflächen 843 14.3.1 14.3.2 14.3.3 14.3.4 14.3.5 14.3.6 843 844 845 846 847 848 Inhalt AWT-Fenster darstellen Swing-Fenster darstellen Sichtbarkeit des Fensters Größe und Position des Fensters verändern Hauptprogramm von Frame/JFrame ableiten Fenster- und Dialog-Dekoration 14.4 14.5 14.6 14.7 14.8 Grundlegendes zum Zeichnen 848 14.4.1 14.4.2 14.4.3 14.4.4 848 850 851 852 Einfache Zeichenfunktionen 854 14.5.1 14.5.2 14.5.3 14.5.4 14.5.5 854 854 855 856 856 Grundbegriffe: Koordinaten, Punkte, Pixel Linien Rechtecke Ovale und Kreisbögen Polygone und Polylines Zeichenketten schreiben 860 14.6.1 14.6.2 14.6.3 14.6.4 14.6.5 860 862 863 864 867 Einen neuen Zeichensatz bestimmen Ableiten eines neuen Fonts aus einem gegebenen Font Zeichensätze des Systems ermitteln Die Klasse FontAAetrics TrueType Fonts Clipping-Operationen Farben 14.8.1 14.8.2 14.8.3 14.8.4 14.8.5 14.8.6 14.8.7 14.9 Die paintO-AAethodefür das AWT-Frame Zeichen von Inhalten mit JFrame Auffordern zum Neuzeichnen mit repaintO Die ereignisorientierte Programmierung ändert Fensterinhalte 868 872 Zufällige Farbblöcke zeichnen Farbanteile zurückgeben Vordefinierte Farben Farben aus Hexadezimalzahlen erzeugen Einen helleren oder dunkleren Farbton wählen Farbmodelle HSB und RGB Die Farben des Systems 873 875 875 876 877 878 879 Bilder anzeigen und Grafiken verwalten 882 14.9.1 14.9.2 14.9.3 14.9.4 14.9.5 14.9.6 14.9.7 14.9.8 14.9.9 14.9.10 883 884 884 885 886 886 889 889 890 892 Bilder laden: eine Übersicht Bilder über Toolkit laden für Applikationen Bilder in Applets Asynchrones Laden mit getImageO und dem AAediaTracker Programm-Icon/Fenster-Icon setzen Das Image zeichnen Grafiken zentrieren Bilder im Speicher erzeugen Kein Flackern durch Double-Buffering Bilder skalieren 14.9.11 Volatilelmage 894 14.9.12 14.9.13 14.9.14 14.9.15 14.9.16 14.9.17 14.9.18 14.9.19 894 895 895 896 897 899 899 902 Bilder lesen mit ImagelO Schreiben mit ImagelO Kann ImagelO ein Format behandeln? Komprimieren mit ImagelO Bilder im GIF-Format speichern Gif speichern mit dem ACAAE-Paket JPEG-Dateien mit dem Sun-Paket schreiben Java Image Management Interface (JIMI) 14.10 Java2D-API 14.10.1 Grafische Objekte zeichnen 14.10.2 Geometrische Objekte durch Shape gekennzeichnet 902 903 904 In 14.10.3 14.10.4 14.10.5 14.10.6 Zeichenhinweise durch RenderingHints Windungs-Regel Dicke und Art der Linien bestimmen Transformationen mit einem AffineTransform-Objekt 14.11 Produzenten, Konsumenten und Beobachter 906 907 909 912 914 914 14.11.1 14.11.2 14.11.3 14.11.4 Producer und Consumer für Bilder Beispiel für die Übermittlung von Daten Bilder selbst erstellen Die Bildinformationen wieder auslesen 14.12 Filter 14.12.1 14.12.2 14.12.3 14.12.4 Grundlegende Eigenschaft von Filtern Konkrete Filterklassen Mit CropImageFilter Teile ausschneiden Transparenz 924 Drucken mit dem einfachen Ansatz Ein PrintJob Drucken der Inhalte Komponenten drucken Den Druckeram Parallelport ansprechen 928 14.13 Drucken 14.13.1 14.13.2 14.13.3 14.13.4 14.13.5 915 918 921 924 14.13.6 Bekannte Drucker 14.14 Grafikverarbeitung ohne grafische Oberfläche 14.14.1 Xvfb-Server 14.14.2 Pure Java AWT Toolkit (PJA) 925 926 929 930 933 933 933 934 934 15 Komponenten, Container und Ereignisse 15.1 Es tut sich w a s - Ereignisse beim AWT 939 15.1.1 15.1.2 15 1 3 939 Die Klasse AWTEvent Events auf verschiedenen Ebenen Ereignisquellen und Horcher (Listener) 937 940 942 94? 15.2 15.3 22 Inhalt 15.1.4 Listener implementieren 15.1.5 Listener bei Ereignisauslöser anmelden/abmelden 15.1.6 Aufrufen der Listener Varianten, das Fenster zu schließen 15.2.1 Eine Klasse implementiert die Schnittstelle WindowListener 15.2.2 15 2 3 Adapterklassen nutzen Innere Mitgliedsklassen und innere anonyme Klassen 15.2.4 Generic Listener Komponenten im AWT und in Swing 15.3.1 Peer-Klassen und Lightweight-Komponenten 15.3.2 Die Basis aller Komponenten: Component und JComponent 15.3.3 Proportionales Vergrößern eines Fensters 15.3.4 Dynamisches Layout während einer Größenänderung 15.3.5 Hinzufügen von Komponenten 943 944 94 5 94 8 95 ° 951 955 956 957 15.4 15.5 Swing-Fenster JFrame, JDialog, JWindow 958 15.4.1 15.4.2 15.4.3 Kinder auf einem Swing-Fenster Schließen eines Swing-Fensters JWindow und JDialog 958 958 959 Informationstext über die Klasse JLabel 960 15.5.1 15.6 15.7 Mehrzelliger Text, HTML in der Darstellung 962 Die Klasse Imagelcon 963 15.6.1 15.6.2 965 966 Die Schnittstelle Icon Was Icon und Image verbindet Eine Schaltfläche (JButton) 967 15.7.1 15.7.2 15.7.3 15.7.4 969 970 973 975 Der aufmerksame ActionListener Generic Listener für Schaltflächen-Ereignisse verwenden AbstractButton JToggleButton 15.8 Tooltips 975 15.9 Der Container JPanel 976 15.10 Alles Auslegungssache: die Layoutmanager 15.10.1 15.10.2 15.10.3 15.10.4 15.10.5 15.10.6 FlowLayout Mit BorderLayout in allen Himmelsrichtungen GridLayout Der GridBagLayout-Manager Null-Layout Weitere Layoutmanager 15.11 Horizontale und vertikale Rollbalken 15.11.1 Der AdjustmentListener, der auf Änderungen hört 15.12 JSIider 977 978 980 982 984 989 989 990 993 995 15.13 Ein Auswahlmenü - Choice, JComboBox 996 15.13.1 ItemListener 15.13.2 Zuordnung einer Taste mit einem Eintrag 999 1000 15.13.3 DateComboBox 1001 15.14 Eines aus vielen - Kontrollfelder (JCheckBox) 15.14.1 Ereignisse über ItemListener 1001 1003 15.15 Kontrollfeldgruppen, Optionsfelder, JRadioButton 1003 15.16 Der Fortschrittsbalken JProgressBar 1005 15.17 Rahmen (Borders) 1007 15.18 Symbolleisten alias Toolbars 1009 15.19 Menüs 1011 15.19.1 15.19.2 15.19.3 15.19.4 Die Menüleisten und die Einträge Menüeinträge definieren Mnemonics und Shortcuts (Accelerator) Popup-Menüs 1011 1013 1014 1016 15.20 Das Konzept des Model-View-Controllers 1019 15.21 List-Boxen 1021 15.22 JSpinner 1024 Inhalt 23 15.23 Texteingabefelder 15.23.1 Text in einer Eingabezeile 15.23.2 Die Oberklasse der JText-Komponenten: JTextComponent 15.23.3 JPasswordField 15.23.4 Validierende Eingabefelder 15.23.5 Mehrzellige Textfelder 15.23.6 Die Editor-Klasse JEditorPane 1°25 1026 1026 1°27 1028 1029 1031 15.24 Bäume mit JTree-Objekten 1°34 15.24.1 Selektionen bemerken 1°36 1038 1°38 1042 1043 1046 1047 1°48 1048 1049 1050 15.26 JRootPane, JLayeredPane und JDesktopPane 1050 15.26.1 15.26.2 JRootPane und JLayeredPane JDesktopPane und die Kinder JlnternalFrame 15.27.1 15.27.2 Der Farbauswahldialog JColorChooser Der Dateiauswahldialog 15.28 Flexibles Java-Look&Feel 15.28.1 15.28.2 15.28.3 1050 1051 1053 15.27 Dialoge UlManager Ändern des Aussehens Laufzeit Verbessern des Aussehens unter Windows mit WinLAF 1054 1°56 1°58 1°59 1°60 1061 15.29 Swing-Beschriftungen einer anderen Sprache geben 1061 15.30 Die Zwischenablage (Clipboard) 1°62 15.31 Undo durchführen 1°66 15.32 Ereignisverarbeitung auf unterster Ebene 1067 15.32.1 15.32.2 Eigene Ereignisse in die Queue setzen Auf alle Ereignisse hören 1068 1069 15.33 AWT, Swing und dieThreads 15.33.1 Swing ist nicht Thread-sicher 15.33.2 Swing-Elemente bedienen mit invokeLaterO, invokeAndWait() 1°69 1070 1072 15.34 Selbst definierte Cursor 15.34.1 Flackern des Mauszeigers bei Animationen vermeiden 1°73 1074 15.35 Benutzerinteraktionen automatisieren 1°75 15.35.1 15.35.2 15.35.3 15.35.4 24 1035 15.25 Tabellen mitJTable 15.25.1 Ein eigenes Tabellen-Model 15.25.2 AbstractTableModel 15.25.3 DefaultTableModel 15.25.4 Ein eigener Renderer für Tabellen 15.25.5 Zeil-Editoren 15.25.6 Größe und Umrandung der Zellen 15.25.7 Spalten Informationen 15.25.8 Tabellenkopf von Swing-Tabellen 15.25.9 Selektionen einer Tabelle 15.25.10 Ein professionelles Tabellenlayout mit JGrid Inhalt Automatisch in dieTasten hauen Mausoperationen Methoden zur Zeitsteuerung Screenshots 1°76 1077 1077 1°77 15.35.5 Funktionsweise und Beschränkungen 1078 15.35.6 Mouselnfo und Pointerlnfo 1078 15.36 Zeitliches Ausführen mit dem javax.swing.Timer 1079 15.37 Alternativen zu AWT und Swing 15.37.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor 1079 1079 15.37.2 SWT 1080 16 Das Netz 16.1 Grundlegende Begriffe 1083 16.1.1 1083 16.2 16.3 16.4 16.5 Internet-Standards und RFC 1081 URI und URL 1084 16.2.1 16.2.2 16.2.3 16.2.4 16.2.5 1085 1085 1088 1089 1091 URI Die Klasse URL Informationen über eine URL Der Zugriff auf die Daten über die Klasse URL Verbindungen durch einen Proxy-Server Die Klasse URLConnection 1092 16.3.1 16.3.2 16.3.3 16.3.4 16.3.5 16.3.6 16.3.7 1092 1095 1095 1095 1096 1097 Methoden und Anwendung von URLConnection Protokoll- und Content-Handler Bilder-Handler Zusammenfassung Content- und Protokoll-Handler Im Detail: vom URL zu URLConnection Der Protokoll-Handler für Jar-Dateien Autorisierte URL-Verbindungen und Proxy-Authentifizierung mit Basic Authentication 1098 Das Common Gateway Interface 1100 16.4.1 16.4.2 16.4.3 1100 1101 1103 Parameter für ein CGI-Programm Kodieren der Parameter für CGI-Programme Eine Suchmaschine ansprechen Host- und IP-Adressen 1104 16.5.1 16.5.2 16.5.3 1105 1105 1106 Lebt der Rechner? Das Netz ist Klasse IP-Adresse des lokalen Hosts 16.6 Networkinterface 1107 16.7 Mit dem Socket zum Server 1108 16.7.1 Das Netzwerk ist der Computer 1108 16.7.2 Sockets 1109 16.7.3 16.7.4 16.7.5 16.7.6 16.7.7 16.7.8 16.7.9 16.7.10 16.7.11 Standarddienste unter Windows nachinstallieren Eine Verbindung zum Server aufbauen Server unter Spannung: die Ströme Die Verbindung wieder abbauen Ein kleines Echo - lebt der Rechner noch? Blockierendes Lesen Informationen über den Socket Mittelnet an den Ports horchen Reine Verbindungsdaten über SocketAddress 1110 1111 1112 1113 1113 1114 1115 1117 1118 Inhalt 25 ., ,. 16.8 1119 Client/Server-Kommunikation 16.8.1 Warten auf Verbindungen 16.8.2 Ein Multiplikations-Server 16 8 3 Von außen erreichbar sein Q 3 1124 16.9 SSL-Verbindungen mit JSSE 16.10 Apache Jakarta Commons HttpClient und Net ^ 16.10.1 Jakarta Commons HttpClient 16 10.2 Jakarta Commons Net 1126 1126 16.11 E-Mail 16 11.1 Wie eine E-Mail um die Welt geht 16.11.2 16 1 1 3 16.11.4 16.11.5 16.11.6 16 1 1 7 112g Das Simple Mail Transfer Protocol und RFC 822 POP (Post Office Protocol) E-Mails versenden mit der JavaMail API von SUN MimeMultipart-Nachrichten schicken E-Mails mittels POP3 abrufen Ereignisse und Suchen ^ ^ ^ ^ ^ ^ 1133 6 1133 L n 16.12 Arbeitsweise eines Web-Servers 16.12.1 Das Hypertext Transfer Protocol (HTTP) 16.12.2 Anfragen an den Server 16 12 3 Die Antworten vom Server ^ ^ 1137 1140 16.13 Datagram-Sockets 16 13.1 Die Klasse DatagramSocket 16.13.2 Datagramme und die Klasse DatagramPacket 16.13.3 Auf ein hereinkommendes Paket warten 16.13.4 Ein Paket zum Senden vorbereiten 16.13.5 Methoden der Klasse DatagramPacket 16 13 6 Das Paket senden , c. 16.14 Tiefer liegende Netzwerkeigenschatten 16.14.1 Internet Control Message Protocol (ICMP) 16 14.2 MAC-Adresse ^ ^ ^ ^ 1146 ^ ^ 1148 g ^ ^ 1149 16.15 Multicast-Kommunikation 17 17.1 .r , . Dynamische Web-Seiten und Servlets 17.1.1 Was sind Servlets? 17 1 2 Was sind Java Server Pages? 17 1 3 Vorteil von JSP/Servlets gegenüber CGI-Programmen _, 17.2 1151 Servlets und Java Server Pages . . ... 1153 1154 1156 Vom Client zum Server und wieder zurück 17 2 1 Der bittende Client 17.2.2 17 2 3 Welche Form von Antwort erzeugt ein Web-Server? Wer oder was ist MIME? _• . „ ^ ^ 1159 17.3 26 Inhalt Servlets und JSPs entwickeln und testen 17.3.1 Servlet-Container 17.3.2 Web-Server mit Servlet-Funktionalität ^ 1160 17.4 Java Server Pages in Tomcat und Eclipse 17.4.1 Download und Installation 17.4.2 Ablageort für eigene JSP-Seiten 17.4.3 Web-Applikationen 17.4.4 Zuordnung von Web-Applikationen zu physikalischen Verzeichnissen 1161 1161 1162 1163 1163 17.5 Skript-Elemente 17.5.1 Scriptlets 17.5.2 Ausdrücke 17.5.3 Deklarationen 17.5.4 Kommentare 17.5.5 Quoting 17.5.6 Entsprechende XML-Tags 1164 1164 1165 1165 1166 1166 1166 17.6 Implizite Objekte 1167 17.7 Was der Browser mit auf den Weg gibt- HttpServletRequest 17.7.1 Verarbeiten der Header 17.7.2 Hilfsfunktion im Umgang mit Headern 17.7.3 Übersicht der Browser-Header 1168 1168 1169 1169 17.8 Formulardaten 1170 17.9 Das HttpServletResponse-Objekt 17.9.1 Automatisches Neuladen 17.9.2 Seiten umlenken 1172 1172 1173 17.10 JSP-Direktiven 17.10.1 page-Direktiven im Überblick 17.10.2 include-Direktive 17.10.3 Mit JSPs Bilder generieren 1174 1174 1176 1177 17.11 Aktionen 17.11.1 Aktion include 17.11.2 Aktion forward 17.11.3 Aktion plugin 1178 1178 1178 1178 17.12 Beans 17.12.1 Beans in JSP-Seiten anlegen, Attribute setzen und erfragen 17.12.2 Der schnelle Zugriff auf Parameter 1179 1180 1181 17.13 Kleine Kekse: die Klasse Cookies 17.13.1 Cookies erzeugen und setzen 17.13.2 Cookies vom Servlet einlesen 17.13.3 Kleine Helfer für Cookies 17.13.4 Cookie-Status ändern 17.13.5 Langlebige Cookies 1181 1182 1183 1184 1184 1186 17.14 Sitzungsverfolgung (Session Tracking) 17.14.1 Das mit einer Sitzung verbundene Objekt HttpSession 17.14.2 Werte mit einer Sitzung assoziieren und auslesen 17.14.3 URL-Rewriting 17.14.4 Zusätzliche Informationen 1186 1187 1187 1188 1189 17.15 Tag-Libraries 17.15.1 Standard Tag Library (JSTL) 17.15.2 Jakarta Taglibs Project 1191 1191 1192 Inhalt 27 17.16 Servlets 1193 17.16.1 Servlets compilieren 17.16.2 Die Servlets in das classes-Verzeichnis 17.16.3 Servlet-AAapping 17.17 Der Lebenszyklus eines Servlets 17.17.1 17.17.2 17.17.3 17.17.4 Initialisierung in init() Abfragen bei service() Mehrere Anfragen beim Servlet und die Thread-Sicherheit Das Ende eines Servlets 17.18 Das HttpServletResponse-Objekt 17.18.1 Wir generieren eine Web-Seite 17.18.2 Binärdaten senden 17.18.3 Noch mehr über Header, die der Server setzt 17.19 Objekte und Dateien per POST verschicken 1194 1194 1194 1196 1197 1199 1200 1201 1201 1201 1202 1203 1204 17.19.1 Datei-Upload 1205 17.20 Servlets und Sessions 1206 17.21 Weiterleiten und Einbinden von Servlet-Inhalten 1207 17.22 Inter-Servlet-Kommunikation 1208 17.22.1 Daten zwischen Servlets teilen 17.23 Internationalisierung 17.23.1 Die Länderkennung des Anfragers auslesen 17.23.2 Länderkennung für die Ausgabe setzen 17.23.3 Westeuropäische Texte senden 17.24 Tomcat: Spezielles 17.24.1 Tomcat als Service unter Windows NT ausführen 17.24.2 Interessante Links zum Thema Servlets/JSP 18 18.1 Verteilte Programmierung mit RA/VI und SOAP 1208 1209 1209 1209 1209 1211 1211 1211 1213 Entfernte Methoden 1215 18.1.1 18.1.2 18.1.3 18.1.4 Wie entfernte Methoden arbeiten Stellvertreter (Proxy) RMI Wie die Stellvertreter die Daten übertragen 1215 1215 1216 1216 18.1.5 Probleme mit entfernten Methoden 1217 18.2 Nutzen von RMI bei Middleware-Lösungen 1218 18.3 Die Lösung für Java ist RMI 18.3.1 Entfernte Objekte programmieren 1219 1219 18.3.2 18.4 Entfernte und lokale Objekte im Vergleich Definition einer entfernten Schnittstelle 1220 1220 18.5 Implementierung der Remote-Schnittstelle 1221 18.6 Stellvertreterobjekte erzeugen 1221 18.7 Der Namensdienst (Registry) 18.7.1 Der Port 1222 1222 18.8 18.9 Der Server 1222 18.8.1 18.8.2 1222 1224 Entfernte Objekte beim Namensdienst anmelden Automatisches Anmelden bei Bedarf Einen Client programmieren 1224 18.9.1 1225 Einfaches Logging 18.10 Aufräumen mit dem DGC 1226 18.11 Entfernte Objekte übergeben und laden 1226 18.11.1 Klassen vom RMI-Klassenlader nachladen 1227 18.12 Registry wird vom Server gestartet 1227 18.13 RMI über die Firewall 1228 18.13.1 RMI über HTTP getunnelt 18.14 RMI und CORBA 18.15 Daily Soap 18.15.1 SOAP-Implementierungen 18.15.2 Einen Client mit der Apache-Bibliothek implementieren 18.15.3 Der Seifen-Server 18.16 Java Message Service (JMS) 19 Applets, Midlets und Sound 19.1 Applets und Applikationen - w e r darf was? 1228 1229 1229 1230 1231 1232 1233 1235 1237 19.2 Das erste Hallo-Applet 1237 19.3 Die Zyklen eines Applets 1238 19.4 Parameter an das Applet übergeben 1239 19.5 Methoden der Applet- und AppletContext-Klasse 1240 19.5.1 19.5.2 19.5.3 19.5.4 1240 1241 1242 1245 Wie das Applet den Browser-Inhalt ändern kann Den Ursprung des Applets erfragen Datenaustausch zwischen Applets Was ein Applet alles darf 19.6 Fehler in Applets finden 1245 19.7 Browserabhängiges Verhalten 1245 19.7.1 19.7.2 19.7.3 1245 1246 1247 Java im Browser aktiviert? Läuft das Applet unter Netscape oder Microsoft Explorer? Datenaustausch zwischen Applets und Java-Skripten 19.8 Musik in einem Applet und in Applikationen 1248 19.9 Webstart 1249 19.10 Java 2 Micro Edition 19.10.1 Konfigurationen 19.10.2 Profile 1250 1250 '.'.'.'.'.'.'..1251 Datenbankmanagement mit JDBC 20.1 Das relationale Modell 1257 20.2 JDBC: der Zugriff auf Datenbanken über Java 1258 20.3 Die Rolle von SQL 20.3.1 Ein Rundgang durch SQL-Anfragen 20.3.2 Datenabfrage mit der Data Query Language (DQL) 20.3.3 Tabellen anlegen mit der Data Definition Language (DDL) 1258 20.4 20.5 20.6 20.7 1259 1260 1262 Datenbanktreiber für den Zugriff 1263 20.4.1 1 Treibertypen Datenbanken und ihre Treiber 2 6 3 1264 Derby 1264 20.5.2 MySQL 1266 20.5.3 20.5.4 Microsoft Access Ein Typ-4-Treiber für den Microsoft SQL Server 2000 20.5.5 OraclelOg 1268 20.5.6 Eclipse-Plugins zum Durchschauen von Datenbanken 1268 20.5.1 1266 1268 1271 Eine Beispielabfrage Mit Java an eine Datenbank andocken 20.7.1 Der Treibermanager 1273 1273 20.7.2 20.7.3 20.7.4 20.7.5 Den Treiber laden Eine Aufzählung aller Treiber Log-Informationen Verbindung zur Datenbank 1274 1275 1276 1277 20.8 Datenbankabfragen 20.8.1 Abfragen über das Statement-Objekt 20.8.2 Ergebnisse einer Abfrage in ResultSet 20.8.3 Java und SQL-Datentypen 20.8.4 Unicode in der Spalte korrekt auslesen 20.8.5 wasNullO bei ResultSet 20.8.6 Wie viele Zeilen hat ein ResultSet? 1280 1280 1280 1281 1285 1285 1285 20.9 Die Ausnahmen bei JDBC 1286 20.10 Transaktionen 1286 20.11 Elemente einer Datenbank hinzufügen und aktualisieren 1287 20.11.1 Batch-Updates 20.12 Vorbereitete Anweisungen (Prepared Statements) 20.13 1288 1289 20.12.1 PreparedStatement-Objekte vorbereiten 20.12.2 Werte für die Platzhalter eines PreparedStatement 1289 1290 Die LOBs (Large Objects) 1291 20.13.1 Einen BLOB besorgen 1291 20.14 Die SQL3-Datentypen ARRAY, STRUCT und REF 1292 20.15 Metadaten 20.15.1 Metadaten über die Tabelle 1292 20.15.2 Informationen über die Datenbank 30 1255 20 Inhalt 1292 1296 20.16 DataSource 20.16.1 Die Schnittstelle DataSource 21 21.1 Reflection und Annotationen Metadaten 21.1.1 21.2 21.3 21.4 21.5 21.6 22 22.1 XDocIet 1297 1297 1299 1301 1301 Mit dem Class-Objekt etwas über Klassen erfahren 1302 21.2.1 21.2.2 21.2.3 21.2.4 21.2.5 21.2.6 21.2.7 21.2.8 21.2.9 21.2.10 21.2.11 21.2.12 1302 1304 1306 1308 1309 1309 1310 1311 1313 1316 1319 1321 An ein Class-Objekt kommen Was das Class-Objekt beschreibt Der Name der Klasse Die Arbeit auf dem Feld instanceof mit Class-Objekten Oberklassen finden Implementierte Interfaces einer Klasse oder eines Interfaces Modifizierer und die Klasse Modifier Die Attribute einer Klasse Methoden einer Klasse erfragen Konstruktoren einer Klasse Annotationen Objekte manipulieren 1321 21.3.1 21.3.2 21.3.3 21.3.4 21.3.5 1321 1323 1325 1326 1328 Objekte erzeugen Die Belegung der Variablen erfragen Eine generische toStringO-Funktion Variablen setzen Private Attribute ändern Methoden aufrufen 1328 21.4.1 21.4.2 1330 1331 Statische Methoden aufrufen Dynamische Methodenaufrufe bei festen Methoden beschleunigen Informationen und Identifizierung von Paketen 1332 21.5.1 1333 Geladene Pakete Annotationen 1334 21.6.1 21.6.2 21.6.3 21.6.4 21.6.5 21.6.6 21.6.7 1335 1335 1336 1339 1340 1343 1345 Neue Annotationen definieren Annotationen mit genau einem Element Beliebige Schlüssel-/Werte-Paare Vorbelegte Elemente Annotieren von Annotations-Typen Annotationen zur Laufzeit ausgelesen Mögliche Nachteile von Annotationen Komponenten durch Bohnen 1347 Grundlagen der Komponententechnik 1349 22.1.1 22.1.2 22.1.3 1349 1350 1350 Brauchen wir Komponenten überhaupt? Visuelle und nichtvisuelle Komponenten Komponenten-Technologien von Microsoft Inhalt 31 22.2 1351 22.2.1 22.2.2 Eine Beispielsitzung im BDK Verknüpfungen zwischen Komponenten 1352 1353 22.2.3 Beans speichern 1354 22.3 Die kleinste Bohne der Welt 1354 22.4 Jar-Archive für Komponenten 1355 22.5 Worauf JavaBeans basieren 1356 22.6 Eigenschaften 22.6.1 Einfache Eigenschaften 22.6.2 Boolesche Eigenschaften 22.6.3 Indizierte Eigenschaften 1357 1358 1358 1359 22.7 Ereignisse 22.7.1 Multicast und Unicast 22.7.2 Namenskonvention 1360 1360 1361 22.8 Weitere Eigenschaften 1364 22.8.1 22.8.2 22.8.3 1364 1366 1366 22.9 32 Das JavaBeans Development Kit (BDK) Gebundene Eigenschaften Anwendung von PropertyChange bei AWT-Komponenten Veto-Eigenschaften. Dagegen! Bean-Eigenschaften anpassen 1367 22.9.1 1368 Customizer 22.10 Property-Editoren 1369 22.11 Beanlnfo 1369 22.12 Beliebte Fehler 1370 23 Java Management Extensions (JAAX) 1371 23.1 Überwachen von Systemzuständen 1373 23.2 MBean-Typen, MBean-Server und weitere Begriffe 1374 23.2.1 1374 MBeans des Systems 23.3 JConsole 1376 23.4 Der MBeanServer 1377 23.5 Eine eigene Standard-MBean 1379 24 Java Native Interface (JNI) 24.1 Java Native Interface und Invocation-API 24.2 Einbinden einer C-Funktion in ein Java-Programm 1384 24.2.1 24.2.2 24.2.3 24.2.4 1384 1384 1385 1386 Inhalt Schreiben des Java-Codes Compilieren des Java-Programms Erzeugen der Header-Datei Implementierung der Methode in C 1381 1383 24.2.5 24.2.6 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek Setzen der Umgebungsvariablen 1387 1388 24.3 Nativ die Stringlänge ermitteln 1388 24.4 Erweiterte JNI-Eigenschaften 1389 24.4.1 24.4.2 1390 1390 Klassendefinitionen Zugriff auf Attribute 24.5 Links und Weiteres 25 Sicherheitskonzepte 1392 1395 25.1 Der Sandkasten (Sandbox) 1397 25.2 Sicherheitsmanager (Security Manager) 1397 25.2.1 25.2.2 25.2.3 25.2.4 25.2.5 25.2.6 1399 1401 1402 1402 1404 1405 25.3 25.4 25.5 26 Der Sicherheitsmanager bei Applets Sicherheitsmanager aktivieren Wie nutzen die Java-Bibliotheken den Sicherheitsmanager? Rechte vergeben durch Policy-Dateien Erstellen von Rechte-Dateien mit dem grafischen Policy-Tool Kritik an den Policies Dienstprogramme zur Signierung 1406 25.3.1 25.3.2 1406 1407 Mit keytool Schlüssel erzeugen Signieren mit jarsigner Digitale Unterschriften 1407 25.4.1 25.4.2 25.4.3 25.4.4 25.4.5 1408 1409 1409 1409 1412 Die MDx-Reihe Secure Hash Algorithm (SHA) Mit der Security-API einen Fingerabdruck berechnen Die Klasse MessageDigest Unix-Crypt Verschlüsseln von Daten(-strömen) 1412 25.5.1 25.5.2 25.5.3 1413 1414 1414 Den Schlüssel bitte Verschlüsseln mit Cipher Verschlüsseln von Datenströmen Dienstprogramme für die Java-Umgebung 1417 26.1 Die Werkzeuge im Überblick 1419 26.2 Der Compiler javac 1419 26.2.1 26.2.2 1420 1421 26.3 Der Java-Interpreter Java Der Unterschied zwischen Java.exe und javaw.exe Das Archivformat Jar 1422 26.3.1 26.3.2 26.3.3 26.3.4 1423 1424 1425 1426 Das Dienstprogramm Jar benutzen Das Manifest Applikationen in Jar-Archiven starten Applets in Jar-Archiven Inhalt 33 26.4 26.4.1 26.4.2 26.4.3 26.4.4 34 1426 Ant Bezug und Installation von Ant Properties Externe und vordefinierte Properties Weitere Leistungen 1427 1428 1429 1430 26.5 Einpacken von Java-Programmen in ein exe mit JSmooth 26.6 Decompiler 1430 1430 26.6.1 Jad, ein schneller Decompiler 1431 26.6.2 DecompiHeren erschweren 1434 26.7 Obfuscate Programm RetroGuard 1435 26.8 Sourcecode Beautifier 1435 A Die Begleit-CD 1437 Index 1439 Inhalt
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Related manuals
Download PDF
advertisement