v^ Christian Ullenboom Java ist auch eine Insel Galileo Computing Inhalt Vorwort 33 Vorwort Version 2.0 42 1 Schon wieder eine neue Sprache? 1.1 Der erste Kontakt 1.2 Historischer Hintergrund 1.3 Eigenschaften von Java 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 Die virtuelle Maschine 45 Kein Präprozessor 46 Überladene Operatoren 47 Zeiger und Referenzen 47 Garbage-Collector 48 Ausnahmenbehandlung 49 Objektorientierung in Java 49 Java-Security-Model 49 1.4 1.4.1 1.4.2 Java im Vergleich zu anderen Sprachen Java und JavaScript 51 Normierungsversuche 51 43 43 43 44 50 1.5 Die Rolle von Java im Web 1.6 Aufkommen von Stand-alone-Applikationen 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 51 52 Entwicklungs- und Laufzeitumgebungen 52 Aller Anfang mit dem Java SDK 52 Die Entwicklungsumgebung von Sun: Sun ONE Studie (früher Forte) und NetBeans 53 Umgebungen von IBM 53 TogetherJ 54 JBuilder von Borland 54 • Die virtuelle Maschine Kaffe von Transvirtual Technologies 55 Die Entwicklungsumgebung CodeCuide 55 Ein Wort zu Microsoft, Java und zu J++ 56 Direkt ausführbare Programme für Windows compilieren 57 1.8 1.8.1 1.8.2 1.8.3 Installationsanleitung für das Java 2 SDK unter Microsoft Windows Das Java 2 SDK beziehen 58 Java SDK installieren 58 Compiler und Interpreter nutzen 58 1.9 1.9.1 Das erste Programm compilieren und testen 59 Häufige Compiler-und Interpreterprobleme 61 57 Inhalt 5 6 Inhalt 2 Sprachbeschreibung 2.1 Anweisungen und Programme 2.2 2.2.1 2.2.2 2.2.3 2.2.4 Programme 65 Kommentare 67 Funktionsaufrufe als Anweisungen Die leere Anweisung 69 Der Block 70 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 Elemente einer Programmiersprache 70 Textkodierung durch Unicode-Zeichen 70 Unicode-Tabellen unter Windows 72 Bezeichner 72 Reservierte Schlüsselwörter 73 Token 74 Semantik 75 2.4 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 Datentypen 75 Primitive Datentypen 76 Wahrheitswerte 76 Variablendeklarationen 77 Ganzzahlige Datentypen 78 Die Fließkommazahlen 79 Zeichen 80 Die Typanpassung (das Casting) 81 Lokale Variablen, Blöcke und Sichtbarkeit Initialisierung von lokalen Variablen 85 2.5 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 Ausdrücke 86 Zuweisungsoperator und Verbundoperator 87 Präfix- oder Postfix-Inkrement und -Dekrement 88 Unäres Minus und Plus 89 Arithmetische Operatoren 90 Die relationalen Operatoren 93 Logische Operatoren 93 Reihenfolge und Rang der Operatoren in der Auswertungsreihenfolge 94 Was C(++)-Programmierer vermissen könnten 96 2.6 2.6.1 2.6.2 2.6.3 Bedingte Anweisungen oder Fallunterscheidungen 96 Die if-Anweisung 96 Die Alternative wählen mit einer if/else-Anweisung 98 Die switch-Anweisung bietet die Alternative 101 2.7 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 Schleifen 103 Die while-Schleife 103 Schleifenbedingungen und Vergleiche mit == 104 Die do/while-Schleife 106 Die for-Schleife 107 Ausbruch planen mit break und Wiedereinstieg mit continue break und continue mit Sprungmarken 111 63 63 68 84 110 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.8.10 2.8.11 2.8.12 2.8.13 2.8.14 2.8.15 Methoden einer Klasse 112 Bestandteil einer Funktion 112 Aufruf 114 Methoden ohne Parameter 115 Statische Methoden (Klassenmethoden) 115 Parameter und Wertübergabe 116 Methoden vorzeitig mit return beenden 117 Nicht erreichbarer Quellcode bei Funktionen 118 Rückgabewerte 1}8 Methoden überladen 122 Vorinitialisierte Parameter bei Funktionen 124 Finale lokale Variablen 124 Finale Referenzen in Objekten und das fehlende const Rekursive Funktionen 126 Die Ackermann-Funktion 128 Die Türme von Hanoi 130 2.9 Weitere Operatoren 132 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 Bitoperationen 132 Vorzeichenlose Bytes in ein Integer und Char konvertieren Variablen mit Xor vertauschen 134 Die Verschiebeoperatoren 135 Setzen, Löschen, Umdrehen und Testen von Bits 137 Der Bedingungsoperator 138 Überladenes Plus für Strings 140 2.10 Einfache Benutzereingaben 3 Klassen und Objekte 3.1 3.1.1 3.1.2 Objektorientierte Programmierung 143 Warum überhaupt OOP? 143 Modularität und Wiederverwertbarkeit 144 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 Klassen benutzen 144 Die Klasse Point 145 Etwas über die UML 146 Anlegen eines Exemplars einer Klasse 147 Zugriff auf Variablen und Methoden mit dem Punkt Konstruktoren 150 Die null-Referenz 151 3.3 3.3.1 3.3.2 3.3.3 M i t Referenzen arbeiten 152 Zuweisungen bei Referenzen 152 Funktionen mit nichtprimitiven Parametern 153 Gleichheit von Objekten und die Methode equalsO 3.4 3.4.1 3.4.2 3.4.3 Arrays 156 Deklaration von Arrays 156 Arrays mit Inhalt 157 Die Länge eines Arrays mit length 125 133 141 143 149 154 158 Inhalt 7 8 Inhalt 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 3.4.9 3.4.10 3.4.11 3.4.12 3.4.13 3.4.14 3.4.15 3.4.16 3.4.17 Zugriff auf die Elemente 159 Array-Objekte erzeugen 160 Fehler bei Arrays 161 Arrays mit nichtprimitiven Elementen 162 Arrays und Objekte 162 Initialisierte Array-Objekte 163 Mehrdimensionale Arrays 164 Die Wahrheit über die Array-Initialisierung 166 Arrays kopieren und füllen 167 Mehrere Rückgabeparameter 168 Parameter per Referenz übergeben 169 Der Einstiegspunkt für das Laufzeitsystem 169 Der Rückgabewert von main() 170 Die Klasse Arrays 170 4 Der Umgang mit Zeichenketten 4.1 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 Strings und deren Anwendung 173 String-Objekte für konstante Zeichenketten String-Länge 175 Gut, dass wir verglichen haben 175 Stringteile extrahieren 179 Veränderte Strings liefern 181 Typen in Zeichenketten konvertieren 183 4.2 4.2.1 4.2.2 4.2.3 4.2.4 Veränderbare Zeichenketten mit der Klasse StringBuffer 184 Anlegen von StringBuffer-Objekten 185 Die Länge eines StringBuffer-Objekts lesen und setzen 186 Daten anhängen 186 Zeichen(folgen) setzen, erfragen, löschen und umdrehen 186 4.3 4.3.1 Vergleiche von Zeichenketten als String und StringBuffer 187 Sollte es ein equalsO und hashO bei StringBuffer geben? 188 4.4 4.4.1 4.4.2 Ein paar kleine Helfer Strings einer gegebenen rechtsbündig ausgeben Teile im String ersetzen 4.5 Zeichenkodierungen umwandeln 173 173 189 Länge erzeugen und 189 190 191 4.6 Sprachabhängiges Vergleichen mit der Collator-Klasse 4.6.1 Effiziente interne Speicherung für die Sortierung 4.7 Die Klasse StringTokenizer 4.8 StreamTokenizer 195 197 f « 4.9 Formatieren mit Format-Objekten 4.9.1 4.9.2 4.9.3 Prozente, Zahlen und Währungen ausgeben Ausgaben formatieren 202 Dezimalzahlformatierung 205 200 202 194 191 4.10 4.10.1 4.10.2 4.10.3 Reguläre Ausdrücke 206 Splitten von Zeichenketten 207 splitO in String 209 Das Paket gnu.regexp 209 4.11 4.11.1 4.11.2 Überprüfung der E-Mail-Adressen und Kreditkarteninformationen Gültige E-Mail-Adressen 209 Kreditkartennummern testen 211 209 J 5 Mathematisches 215 5.1 5.1.1 Arithmetik in Java 215 Soll eine Division durch Null zur Übersetzungszeit erkannt werden? 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 Die Funktionen der Math-Klasse 217 Attribute 217 Winkelfunktionen (trigonometrische Funktionen und Arcus-Funktionen) 218 Runden von Werten 218 Exponentialfunktionen 220 Division 220 Absolutwerte und Maximum, Minimum 221 Zufallszahlen 221 5.3 5.3.1 5.3.2 Mathe bitte strikt 222 Strikt Fließkomma mit strictfp 222 Die Klassen Math und StrictMath 222 5.4 Die Random-Klasse 5.5 5.5.1 5.5.2 Große Zahlen 224 Die Klasse Biginteger 224 Ganz lange Fakultäten 227 5.6 Probleme mit Java und der Mathematik 5.7 Das Java-Matrix-Paket Jama 228 6 Eigene Klassen schreiben 231 6.1 6.1.1 6.1.2 6.1.3 6.1.4 Eigene Klassen definieren 231 Methodenaufrufe und Nebeneffekte 232 Argumentübergabe mit Referenzen 233 Die this-Referenz 234 Überdeckte Objektvariablen nutzen 235 6.2 Assoziationen zwischen Objekten 6.3 6.3.1 6.3.2 6.3.3 6.3.4 Privatsphäre und Sichtbarkeit 237 Wieso nicht freie Methoden und Variablen für alle? 238 Privat ist nicht ganz privat. Es kommt darauf an, wer's sieht Zugriffsmethoden für Attribute definieren 241 Zusammenfassung zur Sichtbarkeit 242 216 223 228 236 239 Inhalt 9 10 Inhalt 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.4.7 6.4.8 Statische Methoden und Variablen 243 Warum statische Eigenschaften sinnvoll sind 243 Statische Eigenschaften mit static 243 Statische Eigenschaften als Objekteigenschaften nutzen 244 Statische Eigenschaften und Objekteigenschaften 245 Statische Variablen zum Datenaustausch 245 Warum die Groß- und Kleinschreibung wichtig ist 246 Konstanten mit dem Schlüsselwort final bei Variablen 247 Typsicherere Konstanten 248 6.4.9 Statische Blöcke 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.5.5 6.5.6 Objekte anlegen und zerstören 250 Konstruktoren schreiben 250 Einen anderen Konstruktor der gleichen Klasse aufrufen 253 Initialisierung der Objekt-und Klassenvariablen 255 Finale Werte im Konstruktor setzen 257 Exemplarinitialisierer (Instanzinitialisierer) 257 Zerstörung eines Objekts durch den Müllaufsammler 258 249 6.5.7 Implizit erzeugte Stringobjekte 6.5.8 Zusammenfassung: Konstruktoren und Methoden 259 6.6 Veraltete (deprecated) Methoden/Konstruktoren 6.7 6.7.1 6.7.2 6.7.3 Vererbung 262 Vererbung in Java 262 Einfach- und Mehrfachvererbung Kleidungsstücke modelliert 263 260 261 263 6.7.4 Sichtbarkeit 6.7.5 6.7.6 Das Substitutionsprinzip 265 Automatische und Explizite Typanpassung 265 6.7.7 Finale Klassen 266 267 6.7.8 Unterklassen prüfen mit dem Operator instanceof 6.8 6.8.1 6.8.2 6.8.3 Methoden überschreiben 268 super: Aufrufen einer Methode aus der Oberklasse Nicht überschreibbare Funktionen 271 Fehlende kovariante Rückgabewerte 272 267 6.9 6.9.1 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 Die oberste aller Klassen: Object 272 Klassenobjekte 273 Hashcodes 273 Objektidentifikation mit toStringO 273 Objektgleichheit mit equals() und Identität Klonen eines Objekts mit cloneO 276 Aufräumen mit finalizeO 277 Synchronisation 277 * 6.10 6.10.1 6.10.2 6.10.3 Die Oberklasse gibt Funktionalität vor 278 Dynamisches Binden als Beispiel für Polymorphie 279 Keine Polymorphie bei privaten, statischen und finalen Methoden Konstruktoren in der Vererbung 282 269 274 281 6.11 6.11.1 6.11.2 6.11.3 Abstrakte Klassen 286 Abstrakte Klassen 286 Abstrakte Methoden 287 Über abstract final 290 6.12 6.12.1 6.12.2 6.12.3 6.12.4 6.12.5 6.13 6.13.1 6.13.2 6.13.3 6.13.4 6.13.5 6.13.6 6.13.7 6.13.8 6.14 Schnittstellen 290 Die Mehrfachvererbung bei Schnittstellen 294 Erweitern von Interfaces - Sübinterfaces 295 Vererbte Konstanten bei Schnittstellen 295 Vordefinierte Methoden einer Schnittstelle 297 CharSequence als Beispiel einer Schnittstelle 298 Innere Klassen 300 Geschachtelte Top-Level-Klassen und Schnittstellen Mitglieds-oder Elementklassen 301 Lokale Klassen 304 Anonyme innere Klassen 305 Eine Sich-Selbst-Implementierung 308 this und Vererbung 309 Implementierung einer verketteten Liste 310 Funktionszeiger 312 Gegenseitige Abhängigkeiten von Klassen 314 6.15 Pakete 7 Exceptions 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.1.6 Problembereiche einzäunen 317 Exceptions in Java mit try und catch 317 Ablauf einer Ausnahmesituation 319 Wiederholung kritischer Bereiche 319 throws im Methodenkopf angeben 320 Abschließende Arbeiten mit finally 321 Nicht erreichbare catch-Klauseln 322 7.2 7.2.1 7.2.2 7.2.3 7.2.4 Die Klassenhierarchie der Fehler 323 Die Exception-Hierarchie 324 Ober-Ausnahmen fangen 324 Alles geht als Exception durch 325 Ausnahmen, die nicht gefangen werden müssen: RuntimeException 7.3 7.3.1 7.3.2 7.3.3 Werfen eigener Exceptions 327 Vorgefertigte Ausnahme-Objekte wiederverwenden 328 Typecast auf ein null-Objekt für eine NullPointerException Neue Exception-Klassen definieren 329 7.4 Rückgabewerte bei ausgelösten Ausnahmen 7.5 Stack-Aufruf analysieren 7.6 Assertions 7.7 7.7.1 Sicherheitsfragen mit dem SecurityManager klären Programm beenden 335 i 301 314 317 326 329 331 332 333 335 Inhalt 11 12 Inhalt 8 Die Funktionsbibliothek 337 8.1 8.1.1 Die Java-Klassenphilosophie 337 Übersicht über die Pakete der Standardbibliothek 8.2 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.2.7 Wrapper-Klassen 342 Die Character-Klasse 343 Die Boolean-Klasse 345 Die Number-Klasse 347 Die Klasse Integer 348 Behandlung von Überlauf 350 Unterschiedliche Ausgabeformate Boxing und Unboxing 352 8.3 8.3.1 8.3.2 Ausführung von externen Programmen 353 DOS-Programme aufrufen 354 Die Windows Registry verwenden 356 8.4 8.4.1 Kompilieren von Klassen DerSun-Compiler 357 9 Threads und nebenläufige Programmierung 9.1 9.1.1 Prozesse und Threads 359 Wie parallele Programme die Geschwindigkeit heben können 9.2 9.2.1 9.2.2 9.2.3 9.2.4 Threads erzeugen 362 Threads über die Schnittstelle Runnable implementieren 362 Threads über Runnable starten 363 Die Klasse Thread erweitern 364 Erweitern von Thread oder implementieren von Runnable? 367 9.3 Threads schlafen 9.3.1 Eine Zeituhr 9.4 Die Klassen Timer und TimerTask 9.5 Die Zustände eines Threads 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 Das Ende eines Threads 371 Einen Thread höflich mit Interrupt beenden Der stop() von außen 373 Das ThreadDeath-Objekt 374 Auf das Ende warten mit join() 375 9.6 Arbeit niederlegen und wieder aufnehmen 9.7 9.7.1 9.7.2 Priorität 377 Threads hoher Priorität und das AWT Granularität und Vorrang 378 9.8 Dämonen (engl. Daemon) 337 351 357 359 360 367 368 370 371 371 377 378 379 9.9 Kooperative und nicht kooperative Threads 9.10 9.10.1 9.10.2 Synchronisation über kritische Abschnitte 381 Gemeinsam genutzte Daten 382 Probleme beim gemeinsamen Zugriff und kritische Abschnitte 380 382 9.10.3 9.10.4 9.10.5 9.10.6 9.10.7 9.10.8 9.10.9 9.10.10 9.10.11 9.10.12 Punkte parallel initialisieren 383 i++sieht atomar aus, ist es aber nicht 383 Abschnitte mit synchronized schützen 384 Monitore 385 Synchronized-Methode am Beispiel der Klasse StringBuffer 386 Synchronisierte Blöcke 386 Vor-und Nachteile von synchronisierten Blöcken und Methoden Nachträglich synchronisieren 388 Monitore sind reentrant, gut für die Geschwindigkeit 388 Deadlocks 389 9.11 Variablen mit volatile kennzeichnen 9.12 9.12.1 9.12.2 9.12.3 9.12.4 9.12.5 Synchronisation über Warten und Benachrichtigen Warten mit waitO und Aufwecken mit notifyO 394 Mehrere Wartende und notifyAHO 396 waitO mit einer Zeitspanne 396 Beispiel Erzeuger-Verbraucher-Programm 396 Semaphoren 399 387 391 393 9.13 Grenzen von Threads 9.14 Aktive Threads in der Umgebung 401 9.15 Gruppen von Threads in einer Thread-Gruppe 9.15.1 9.15.2 9.15.3 Etwas über die aktuelle Thread-Gruppe herausfinden 403 Threads in einer Thread-Gruppe anlegen 405 Methoden von Thread und ThreadGroup im Vergleich 407 9.16 Einen Abbruch der virtuellen Maschine erkennen 10 Raum und Zeit 10.1 Greenwich Mean Time (GMT) 10.2 Wichtige Datum-Klassen im Überblick 10.3 10.3.1 Zeitzonen und Sprachen der Länder 413 Zeitzonen durch die Klasse TimeZone repräsentieren 10.4 Sprachen der Länder 10.4.1 Sprachen in Java über Locale-Objekte 10.5 Einfache Übersetzung durch ResourceBundle-Objekte 10.6 10.6.1 10.6.2 Die Klasse Date 420 Objekte erzeugen und Methoden nutzen Zeitmessung und Profiling 422 10.7 10.7.1 10.7.2 Calendar und GregorianCalendar 423 Die abstrakte Klasse Calendar 423 Der gregorianische Kalender 425 10.8 10.8.1 10.8.2 10.8.3 Formatieren der Datumsangaben 431 Mit DateFormat und SimpleDateFormat formatieren 431 Parsen von Datumswerten 438 Parsen und Formatieren ab bestimmten Positionen 440 401 402 408 411 411 413 413 415 415 418 420 Inhalt 13 11 Datenstrukturen und Algorithmen 11.1 M i t einem Iterator durch die Daten wandern 11.1.1 Bauernregeln aufzählen 11.2 Dynamische Datenstrukturen Inhalt 441 442 444 11.3 Die Klasse Vector 11.3.1 11.3.2 11.3.3 11.3.4 11.3.5 11.4 11.4.1 11.4.2 Vektoren erzeugen 444 Funktionen 445 Arbeitsweise des internen Arrays 448 Die Größe eines Felds 449 Eine Aufzählung und gleichzeitiges Verändern Stack, der Stapel 451 Die Methoden von Stack 451 Ein Stack ist ein Vektor - aha! 452 11.5 11.5.1 11.5.2 11.5.3 11.5.4 11.5.5 11.5.6 Die Klasse Hashtable und assoziative Speicher 452 Ein Objekt der Klasse Hashtable erzeugen 452 Einfügen und Abfragen der Datenstruktur 453 Die Arbeitsweise einer Hashtabelle 455 Aufzählen der Elemente 457 Ausgabe der Hashtabelle und Gleichheitstest 457 Klonen 458 11.6 11.6.1 11.6.2 11.6.3 Die abstrakte Klasse Dictionary 458 Zugriff und Abfrage 458 Metainformationen 459 Iterationen über die Elemente 459 11.7 11.7.1 11.7.2 11.7.3 11.7.4 11.7.5 11.7.6 Die Properties-Klasse 460 Über die Klasse Properties 460 putO, getO und getPropertiesO 462 Eigenschaften ausgeben 462 Systemeigenschaften der Java-Umgebung 463 Browser-Version abfragen 464 Properties von der Konsole aus setzen 464 11.8 Windows-typische INI-Datelen 11.9 Queue, die Schlange 11.10 11.10.1 11.10.2 11.10.3 11.10.4 11.10.5 Die Collection-API 11.10.6 11.10.7 11.10.8 11.10.9 14 441 444 449 466 466 467 Die Schnittstelle Collection 468 Schnittstellen, die Collection erweitern, und Map 469 Abstrakte Basisklassen für Container 471 Konkrete Container-Klassen 472 Unterschiede zu den älteren Datenstrukturen und die Synchronisation 472 __ Das erste Programm mit Container-Klassen 473 Iteratoren 474 Der Comparator 476 toArrayO von Collection verstehen - Chance für eine Falle erkennen 478 11.11 Listen 480 11.11.1 AbstractList 481 11.11.2 Optionale Methoden 11.11.3 ArrayList 485 11.11.4 LinkedList 486 482 11.12 Algorithmen 486 11.12.1 Datenmanipulation 488 11.12.2 Größten und kleinsten Wert einer Collection finden 11.12.3 Sortieren 490 11.12.4 Elemente in der Collection suchen 493 489 11.13 Typsichere Datenstrukturen 494 11.14 11.14.1 11.14.2 11.14.3 11.14.4 Die Klasse BitSet für Bitmengen 495 Ein BitSet anlegen und füllen 495 Mengenorientierte Operationen 497 Funktionsübersicht 497 Primzahlen in einem BitSet verwalten 498 11.15 11.15.1 11.15.2 Ein Design-Pattern durch Beobachten von Änderungen Design-Pattern 499 Das Beobachter-Pattern (Observer/Observable) 500 12 Datenströme und Dateien 12.1 12.1.1 12.1.2 12.1.3 12.1.4 12.1.5 12.1.6 12.1.7 Dateien und Verzeichnisse 505 Dateien und Verzeichnisse mit der Klasse File 506 Dateieigenschaften und-attribute 506 Umbenennen, Verzeichnisse anlegen und Datei löschen 509 Die Wurzel aller Verzeichnisse 509 Verzeichnisse listen und Dateien filtern 511 Implementierungsmöglichkeiten für die Klasse File 515 Verzeichnisse nach Dateien rekursiv durchsuchen 516 12.2 12.2.1 12.2.2 12.2.3 12.2.4 Dateien mit wahlfreiem Zugriff 518 Ein RandomAccessFile öffnen 518 Aus dem RandomAccessFile lesen 519 Hin und her in der Datei 520 Die Länge des RandomAccessFile 521 12.3 12.3.1 Übersicht über wichtige Stream-und WriterReader Die abstrakten Basisklassen 524 12.4 12.4.1 12.4.2 12.4.3 12.4.4 12.4.5 12.4.6 12.4.7 12.4.8 Eingabe-und Ausgabe-Klassen: InputStream und OutputStream 524 Die Klasse OutputStream 524 Ein Datenschlucker 526 Die Eingabeklasse InputStream 526 Anwenden der Klasse FilelnputStream 527 Anwendung der Klasse FileOutputStream 529 Kopieren von Dateien 530 Daten filtern durch FilterlnputStream und FilterOutputStream 531 Der besondere Filter PrintStream 532 499 505 522 Inhalt 15 12.4.9 System.in und System.out 534 12.4.10 Bytes in den Strom mit ByteArrayOutputStream 538 12.4.11 Ströme zusammensetzen mit SequencelnputStream 539 16 Inhalt 12.5 Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar-Archiven laden 542 12.6 12.6.1 12.6.2 12.6.3 12.6.4 12.6.5 12.6.6 12.6.7 12.6.8 Die Unterklassen von Writer 543 Die abstrakte Klasse Writer 543 Datenkonvertierung durch den OutputStreamWriter 545 In Dateien schreiben mit der Klasse FileWriter 546 StringWriter und CharArrayWriter 547 Writer als Filter verketten 549 Gepufferte Ausgabe durch BufferedWriter 550 Ausgabemöglichkeiten durch PrintWriter erweitern 553 Daten mit FilterWriter filtern 554 12.7 12.7.1 12.7.2 12.7.3 12.7.4 Die Klassen um Reader 560 Die abstrakte Basisklasse Reader 560 Automatische Konvertierungen mit dem InputStreamReader Dateien lesen mit der Klasse FileReader 563 StringReader und CharArrayReader 564 12.8 12.8.1 12.8.2 12.8.3 12.8.4 Schachteln von Eingabe-Streams 566 Gepufferte Eingaben mit der Klasse BufferedReader 566 LineNumberReader zählt automatisch Zeilen mit 567 Eingaben filtern mit der Klasse FilterReader 569 Daten zurücklegen mit der Klasse PushbackReader 572 12.9 12.9.1 12.9.2 Kommunikation zwischen Threads mit Pipes 575 PipedOutputStream und PipedlnputStream 575 PipedWriter und PipedReader 577 12.10 12.10.1 12.10.2 Datenkompression 578 Datenströme komprimieren Zip-Archive 582 12.11 12.11.1 12.11.2 12.11.3 Prüfsummen 590 Die Schnittstelle Checksum Die Klasse CRC32 591 Die Adler32-Klasse 594 12.12 12.12.1 12.12.2 12.12.3 12.12.4 12.12.5 12.12.6 12.12.7 12.12.8 12.12.9 12.12.10 Persistente Objekte und Serialisierung 595 Objekte speichern 596 Objekte lesen 598 Die Schnittstelle Serializable 600 Tiefe Objektkopien 601 Felder sind implizit Serializable 603 Versionenverwaltung und die SUID 603 Beispiele aus den Standard-Klassen 606 Serialisieren in XML-Dateien 607 JSX (Java Serialization to XML) 6 0 f XML-API von Sun 611 12.13 Die Logging-API 612 579 591 562 13 Die extensible Markup Language (XML) 617 13.1 13.1.1 13.1.2 Auszeichnungssprachen 617 Die Standard Generalized Markup Language (SGML) Extensible Markup Language (XML) 618 13.2 13.2.1 13.2.2 13.2.3 13.2.4 13.2.5 Eigenschaften von XML-Dokumenten 618 Elemente und Attribute 618 Beschreibungssprache für den Aufbau von XML-Dokumenten Schema - eine Alternative zu DTD 623 Namensraum (Namespace) 626 XML-Applikationen 627 13.3 13.3.1 13.3.2 13.3.3 Die Java APIs für XML 627 Das Document Object Model (DOM) 628 Simple API for XML Parsing (SAX) 628 Java Document Object Model (JDOM) 628 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.4.5 13.4.6 13.4.7 13.4.8 13.4.9 13.4.10 13.4.11 XML-Dateien mit JDOM verarbeiten 628 JDOM beziehen 629 Paketübersicht 629 Die Document-Klasse 631 Eingaben aus der Datei lesen 631 Das Dokument als XML-Datei ausgeben 632 Der Dokumenttyp 632 Elemente 633 Zugriff auf Elementinhalte 635 Liste mit Unterelementen erzeugen 637 Neue Elemente einfügen und ändern 638 Attributinhalte lesen und ändern 640 13.5 13.5.1 13.5.2 JAXP als Java-Schnittstelle zu XML 643 Einführung in XSLT 644 Umwandlung von XML-Dateien mit JDOM und JAXP 13.6 13.6.1 Serielle Verarbeitung von XML mit SAX 647 Ausgabe der Datei party.xml mit SAX 648 14 Grafikprogrammierung mit dem AWT 14.1 14.1.1 Das Abstract-Window-Toolkit Java Foundation Classes 651 14.2 14.2.1 14.2.2 14.2.3 Fenster unter grafischen Oberflächen 652 Fenster öffnen 652 Größe und Position des Fensters verändern 655 Fenster und Dialog-Dekoration 656 617 620 647 651 651 14.3 Das Toolkit 14.3.1 Einen Hinweis beepen 656 14.4 14.4.1 14.4.2 Grundlegendes zum Zeichnen 657 Die paintO-Methode 657 Auffordern zum Neuzeichnen mit repaintO 657 659 Inhalt 17 14.5 14.5.1 14.5.2 Punkte, Linien und Rechtecke aller Art Linien 660 Rechtecke 661 660 14.6 Alles was rund ist 14.7 14.7.1 14.7.2 14.7.3 Polygone und Polylines 663 Die Polygon-Klasse 664 N-Ecke zeichnen 665 Vollschlanke Linien zeichnen 667 14.8 14.8.1 14.8.2 14.8.3 14.8.4 Zeichenketten schreiben 668 Einen neuen Zeichensatz bestimmen 669 Zeichensätze des Systems ermitteln 671 Die Klasse FontMetrics 673 True Type Fonts 675 14.9 Cllpping-Operationen 662 677 14.10 Farben 681 14.10.1 Zufällige Farbblöcke zeichnen 682 14.10.2 Farbanteile zurückgeben 683 14.10.3 Vordefinierte Farben 683 14.10.4 Farben aus Hexadezimalzahlen erzeugen 684 14.10.5 Einen helleren oder dunkleren Farbton wählen 14.10.6 Farbmodelle HSB und RGB 687 14.10.7 Die Farben des Systems 687 685 14.11 14.11.1 14.11.2 14.11.3 14.11.4 14.11.5 Bilder anzeigen und Grafiken verwalten 692 Eine Grafik zeichnen 694 Grafiken zentrieren 696 Laden von Bildern mit dem MediaTracker beobachten Kein Flackern durch Double-Buffering 701 Bilder skalieren 703 14.12 14.12.1 Programm-Icon setzen Volatilelmage 706 697 705 14.13 Grafiken speichern 707 14.13.1 Bilder im GIF-Format speichern 707 14.13.2 Gif speichern mit dem ACME-Paket 709 14.13.3 JPEG-Dateien mit dem Sun-Paket schreiben 709 14.13.4 Java Image Management Interface (JIMI) 712 14.14 Von Produzenten, Konsumenten und Beobachtern 14.14.1 Producer und Consumer für Bilder 714 14.14.2 Beispiel für die Übermittlung von Daten 715 14.14.3 Bilder selbst erstellen 718 14.14.4 Die Bildinformationen wieder auslesen 721 14.15 Filter 724 14.15.1 Grundlegende Eigenschaft von Filtern 724 14.15.2 Konkrete Filterklassen 725 14.15.3 Mit CropImageFilter Teile ausschneiden 726 14.15.4 Transparenz 727 18 Inhalt 714 'S 14.16 14.16.1 14.16.2 14.16.3 Alles wird bunt mit Farbmodellen 727 Die abstrakte Klasse ColorModel 728 Farbwerte im Pixel mrt der Klasse DirectColorModel Die Klasse IndexColorModel 731 14.17 14.17.1 14.17.2 14.17.3 14.17.4 14.17.5 Drucken 735 Drucken mit dem einfachen Ansatz 735 Ein Prinüob 736 Drucken der Inhalte 738 Komponenten drucken 738 Den Drucker am Parallelport ansprechen 739 14.18 14.18.1 14.18.2 14.18.3 14.18.4 Java2D-API 739 Grafische Objekte zeichnen 740 Geometrische Objekte durch Shape gekennzeichnet 741 Eigenschaften geometrischer Objekte 743 Transformationen mit einem AffineTransform-Objekt 751 14.19 Graphic Layers Framework 730 752 14.20 Grafikverarbeitung ohne grafische Oberfläche 14.20.1 Xvfb-Server 753 14.20.2 Pure Java AWT Toolkit (PJA) 753 753 15 Komponenten, Container und Ereignisse 755 15.1 15.1.1 15.1.2 15.1.3 15.1.4 15.1.5 15.1.6 Es tut sich was - Ereignisse beim AWT 755 Was ist ein Ereignis? 755 Die Klasse AWTEvent 755 Events auf verschiedenen Ebenen 755 Ereignisquellen, -senken und Horcher (Listener) Listener implementieren 758 Listener bei Ereignisauslöser anmelden 759 15.2 15.2.1 15.2.2 15.2.3 15.2.4 Varianten, das Fenster zu schließen 760 Eine Klasse implementiert die Schnittstelle WindowListener Adapterklassen nutzen 763 Innere Mitgliedsklassen und innere anonyme Klassen 764 Generic Listener 765 15.3 15.3.1 15.3.2 15.3.3 15.3.4 15.3.5 Komponenten im AWT und in Swing 765 Peer-Klassen und Lightweight-Komponenten 766 Die Basis aller Komponenten: Component und JComponent Proportionales Vergrößern eines Fensters 768 Dynamisches Layout während einer Größenänderung 770 Hinzufügen von Komponenten 770 15.4 15.4.1 15.4.2 Das Swing-Fenster JFrame 772 Kinder auf einem Swing-Fenster 772 Schließen eines Swing-Fensters 772 15.5 15.5.1 Ein Informationstext über die Klasse JLabel Mehrzelliger Text 776 758 760 767 773 Inhalt 19 15.6 15.6.1 Die Klasse Imagelcon 776 Die Schnittstelle Icon 778 15.6.2 Was Icon und Image verbindet 15.7 15.7.1 15.7.2 15.7.3 Eine Schaltfläche (JButton) 780 Der aufmerksame ActionListener 782 Generic Listener für Schaltflächen-Ereignisse verwenden AbstractButton 787 15.7.4 JToggleButton 789 15.8 Tooltips 789 780 15.9 Horizontale und vertikale Schieberegler 790 15.9.1 Der AdjustmentListener, derauf Änderungen hört 15.10 JSIider 15.11 15.11.1 Ein Auswahlmenü - Choice, JComboBox ItemListener 799 15.12 Eines aus vielen - Kontrollfelder (JCheckBox) 15.12.1 Ereignisse über ItemListener 15.13 Kontrollfeldgruppen, Optionsfelder und JRadioButton 15.14 Der Fortschrittsbalken JProgressBar 784 793 795 796 800 801 15.15 Rahmen (Borders) 15.16 Symbolleisten alias Toolbars 808 15.17 Menüs 802 804 805 810 15.17.1 Die Menüleisten und die Einträge 810 15.17.2 Menüeinträge definieren 811 15.17.3 Mnemonics und Short-Cuts (Accelerator) 812 15.17.4 Beispiel für ein Programm mit Menüleisten 814 15.18 Popup-Menüs 819 15.19 Alles Auslegungssache: Die Layoutmanager 15.19.1 Null-Layout 822 15.19.2 FlowLayout 823 15.19.3 BorderLayout 825 15.19.4 GridLayout 827 15.19.5 Der GridBagLayout-Manager 829 822 15.19.6 Weitere Layoutmanager 834 15.20 Der Inhalt einer Zeichenfläche: JPanel 834 15.21 Das Konzept des Model-View-Controllers 15.22 List-Boxen 15.23 JSpinner 15.24 Texteingabefelder 835 837 839 ^ 841 15.24.1 Text in einer Eingabezeile 841 15.24.2 Die Oberklasse der JText-Komponenten: JTextComponent 15.24.3 JPasswordField 843 / 20 Inhalt 842 15.24.4 Validierende Eingabefelder 844 15.24.5 Mehrzellige Textfelder 845 15.24.6 Die Editor-Klasse JEditorPane 847 15.25 15.25.1 Bäume mit JTree-Objekten 850 Selektionen bemerken 851 15.26 Tabellen mit JTable 852 15.26.1 Ein eigenes Modell 853 15.26.2 AbstractTableModel 854 15.26.3 DefaultTableModel 856 15.26.4 Ein eigener Renderer für Tabellen 15.27 JRootPane und JLayeredPane 858 861 15.28 Dialoge 15.28.1 Der Farbauswahldialog JColorChooser 862 15.28.2 Der Dateiauswahldialog 863 865 15.29 Das Java Look&Feel 868 15.30 Die Zwischenablage (Clipboard) 15.31 Undo durchführen 15.32 Ereignisverarbeitung auf unterster Ebene 869 872 874 15.33 AWT, Swing und die Threads 875 15.33.1 Warum Swing nicht Thread-sicher ist 876 15.33.2 Swing-Elemente bedienen mit invokeLaterO und invokeAndWaitO 15.34 Selbst definierte Cursor 15.34.1 Flackern des Mauszeigers bei Animationen vermeiden 15.35 Mausrad-Unterstützung 15.36 Benutzerinteraktionen automatisieren 16 Netzwerkprogrammierung 16.1 16.1.1 Grundlegende Begriffe 885 Internet-Standards und RFC 885 16.2 16.2.1 16.2.2 16.2.3 URL-Verbindungen und URL-Objekte 886 Die Klasse URL 887 Informationen über eine URL 889 Der Zugriff auf die Daten über die Klasse URL 16.3 16.3.1 16.3.2 16.3.3 16.3.4 Die Klasse URLConnection 894 Methoden und Anwendung von URLConnection 894 Protokoll- und Content-Handler 897 Im Detail: von URL zu URLConnection 898 Autorisierte URL-Verbindungen mit Basic Authentication 16.4 16.4.1 16.4.2 16.4.3 Das Common Gateway Interface 901 Parameter für ein CGI-Programm 901 Kodieren der Parameter für CGI-Programme Eine Suchmaschine ansprechen 904 878 880 881 882 882 885 892 899 902 Inhalt 21 16.5 16.5.1 16.5.2 16.5.3 Host- und IP-Adressen 904 Klasse-K-Netz 906 IP-Adresse des lokalen Hosts 906 Die Methode getAIIByNameO 907 16.6 Networkinterface 908 16.7 IPv6 für Java mit Jipsy 16.8 16.8.1 16.8.2 16.8.3 16.8.4 16.8.5 16.8.6 Socket-Programmierung 910 Das Netzwerk ist der Computer 910 Standarddienste unter Windows nachinstallieren Stream-Sockets 912 Informationen über den Socket 914 Mit telnet an den Ports horchen 916 Ein kleines Echo - lebt der Rechner noch? 916 909 16.9 16.9.1 16.9.2 Client/Server-Kommunikation 917 Warten auf Verbindungen 918 Ein Multiplikations-Server 919 16.10 SLL-Verbindungen mit JSSE 920 16.11 Webprotokolle mit NetComponents nutzen 16.12 16.12.1 16.12.2 16.12.3 16.12.4 16.12.5 E-Mail 922 Wie eine E-Mail um die Welt geht 922 Übertragungsprotokolle 922 Das Simple Mail Transfer Protocol 925 E-Mails versenden mit Suns JavaMail-API E-Mails mittels POP3 abrufen 926 16.13 16.13.1 16.13.2 16.13.3 Arbeitsweise eines Webservers 928 Das Hypertext Transfer Protocol (HTTP) 928 Anfragen an den Server 929 Die Antworten vom Server 932 16.14 16.14.1 16.14.2 16.14.3 16.14.4 16.14.5 16.14.6 16.14.7 Datagram-Sockets 935 Die Klasse DatagramSocket 937 Datagramme und die Klasse Datagram Packet 939 Auf ein hereinkommendes Paket warten 939 Ein Paket zum Senden vorbereiten 941 Methoden der Klasse Datagram Packet 941 Das Paket senden 942 Die Zeitdienste und ein eigener Server und Client 943 Multicast-Kommunikation 947 i 22 Inhalt 921 925 16.15 Internet Control Message Protocol (ICMP) 16.15.1 Ping 946 16.16 912 946 17 Servlets und Java Server Pages 949 17.1 17.1.1 17.1.2 17.1.3 Dynamische Webseiten und Servlets 949 Was sind Servlets? 949 Was sind Java Server Pages? 950 Vorteil von JSP/Servlets gegenüber CGI-Programmen 17.2 17.2.1 17.2.2 17.2.3 Vom Client zum Server und wieder zurück 952 Der bittende Client 952 Was erzeugt ein Webserver für eine Antwort? 954 Wer oder was ist MIME? 954 17.3 17.3.1 17.3.2 17.3.3 Servlets und Java Server Pages entwickeln und testen Servlet-Container 956 Webserver mit Servlet-Funktionalität 956 Tomcat 957 17.4 17.4.1 Java Server Pages 958 JSP mit Tomcat nutzen 958 17.5 17.5.1 17.5.2 17.5.3 17.5.4 Skript-Elemente 959 Scriptlets 959 Ausdrücke 960 Deklarationen 960 Kommentare und Quoting 17.6 Webapplikationen 951 955 961 961 17.7 Implizite Objekte 17.8 Entsprechende XML-Tags 962 17.9 Was der Browser mit auf den Weg gibt - HttpServletRequest 17.9.1 17.9.2 17.9.3 Verarbeiten der Header 964 Hilfsfunktion im Umgang mit Headern Übersicht der Browser-Header 965 17.10 Formulardaten 963 964 965 966 17.11 Das HttpServletResponse-Objekt 17.11.1 Automatisches Neuladen 968 17.11.2 Seiten umlenken 969 17.12 JSP-Direktiven 970 17.12.1 page-Direktiven im Überblick 17.12.2 include-Direktive 972 968 970 17.13 17.13.1 17.13.2 17.13.3 Aktionen 972 Aktion include 973 Aktion forward 973 Aktion plugin 973 17.14 17.14.1 17.14.2 Beans 974 Beans in JSP-Seiten anlegen, Attribute setzen und erfragen Der schnelle Zugriff auf Parameter 976 975 Inhalt 23 17.15 17.15.1 17.15.2 17.15.3 17.15.4 17.15.5 17.15.6 Kleine Kekse: die Klasse Cookies 976 Cookies erzeugen und setzen 977 Cookies vom Servlet einlesen 977 Kleine Helfer für Cookies 979 Cookie-Status ändern 979 Langlebige Cookies 981 Ein Warenkorbsystem 981 17.16 Sitzungsverfolgung (Session Tracking) 982 17.16.1 Das mit einer Sitzung verbundene Objekt HttpSession 983 17.16.2 Werte mit einer Sitzung assoziieren und auslesen 983 17.16.3 URL-Rewriting 984 17.16.4 Zusätzliche Informationen 985 17.17 Tag-Libraries 987 17.17.1 Standard Tag Library (JSTL) der Apache-Gruppe 17.17.2 Beispiel mit einer Taglib-Direktive 989 17.18 17.18.1 17.18.2 Das erste Servlet kompilieren und ausführen Servlets kompilieren 991 Wohin mit dem Servlet? 992 988 991 17.19 Der Lebenszyklus eines Servlets 992 17.19.1 Initialisierung in init() 993 17.19.2 Abfragen bei serviceO 995 17.19.3 Mehrere Anfragen beim Servlet und die Thread-Sicherheit 17.19.4 Das Ende eines Servlets 997 17.20 Das HttpServletResponse-Objekt 997 17.20.1 Wir generieren eine Webseite 997 17.20.2 Binärdaten senden 999 17.20.3 Komprimierte Daten mit Content-Encoding 1000 17.20.4 Noch mehr über Header, die der Server setzt 1001 17.21 Servlets und Sessions 1002 17.22 Weiterleiten und Einbinden von Servlet-Inhalten 17.23 17.23.1 Inter-Servlet-Kommunikation Daten zwischen Servlets teilen 17.24 17.24.1 17.24.2 17.24.3 Internationalisierung 1005 Die Länderkennung des Anfragers auslesen 1005 Länderkennung für die Ausgabe setzen 1005 Westeuropäische Texte senden 1006 17.25 17.25.1 Sonstiges zu den Servern 1007 Den internen Compiler bei Tomcat für JSP ändern 1004 1004 17.26 Tomcat: Spezielles 1007 17.26.1 Tomcat als Service unter Windows NT ausführen 17.26.2 MIME-Types mit Tomcat verbinden 1008 17.26.3 Servlets beim Start laden 1008 "" 24 Inhalt 1003 1007 1007 996 17.27 Ein Servlet generiert WAP-Seiten für das Handy 1008 17.27.1 Ein WAP-Handy simulieren 1009 17.27.2 Übersicht der wichtigsten Tags 1010 17.27.3 Der Gateway 1011 17.27.4 WML-Seiten aufbauen 1013 17.27.5 Interessante Links zum Thema Servlets/JSP 1013 17.28 Text in HTML-konformen Text umwandeln 1014 18 Verteilte Programmierung mit R M I und SOAP 18.1 18.1.1 18.1.2 18.1.3 18.1.4 Entfernte Methoden 1017 Wie entfernte Methoden arbeiten 1017 Stellvertreter (Proxy) 1017 Wie die Stellvertreter die Daten übertragen Probleme mit entfernten Methoden 1019 18.2 Nutzen von RMI bei Middleware-Lösungen 18.3 18.3.1 18.3.2 18.3.3 Die Lösung für Java ist RMI 1021 Entfernte Objekte programmieren 1021 Entfernte und lokale Objekte im Vergleich RMI und CORBA 1022 18.4 Definition einer entfernten Schnittstelle 18.5 18.5.1 18.5.2 18.5.3 18.5.4 Das entfernte Objekt 1023 Der Bauplan für entfernte Objekte 1024 Der Konstruktor 1024 Implementierung der entfernten Methoden 1026 UnicastRemoteObjekt, RemoteServer und RemoteObject 18.6 18.6.1 Stellvertreterobjekte erzeugen 1028 Das Dienstprogramm rmic 1028 18.7 18.7.1 Der Namensdienst (Registry) Der Port 1030 18.8 18.8.1 Der Server: entfernte Objekte beim Namensdienst anmelden Automatisches Anmelden bei Bedarf 1031 18.9 Einen Client programmieren 18.9.1 Einfaches Logging 18.10 Aufräumen mit dem DGC 18.11 18.11.1 Entfernte Objekte übergeben und laden Klassen vom RMI-Klassenlader nachladen 18.11.2 Sicherheitsmanager 18.12 Registry wird vom Server gestartet 18.13 18.13.1 RMI über die Firewall 1037 RMI über HTTP getunnelt 1037 18.14 18.14.1 Daily Soap 1037 SOAP-Implementierung der Apache-Gruppe 1017 1018 1020 1021 1022 1026 1029 1030 1032 1033 1033 1033 1034 1034 1036 1039 Inhalt 25 18.14.2 18.14.3 Einen Client mit der Apache-Bibliothek implementieren Der Seifen-Server 1041 18.15 Java-API für XML Messaging (JAXM) 1039 1041 18.16 Java Message Service (JMS) 1042 18.16.1 OpenJMS 1043 18.16.2 Beispiel mit Konsument und Produzent im Publish-Subscribe-Modell 1043 26 Inhalt 19 Applets, Midlets und Sound 19.1 Applets und Applikationen - wer darf was? 19.2 Das erste Hallo-Applet 19.3 Die Zyklen eines Applets 1045 1045 1045 1047 19.4 Parameter an das Applet übergeben 19.4.1 19.4.2 19.4.3 Wie das Applet den Browserinhalt ändern kann Den Ursprung des Applets erfragen 1048 Was ein Applet alles darf 1050 1047 19.5 Fehler in Applets finden 19.6 19.6.1 19.6.2 19.6.3 Browserabhängiges Verhalten 1050 Java im Browser aktiviert? 1050 Läuft das Applet unter Netscape oder Microsoft Explorer? 1051 Datenaustausch zwischen Applets und Java-Skripten 1052 19.7 Datenaustausch zwischen Applets 19.8 19.8.1 19.8.2 19.8.3 Musik in einem Applet und in Applikationen 1055 Fest verdrahtete Musikdatei in einem Applet 1056 Variable Musikdatei über einen Parameter 1056 WAV- und MIDI-Dateien abspielen 1057 19.9 Webstart 19.10 19.10.1 19.10.2 Java 2 Micro Edition 1058 Konfigurationen 1058 Profile 1059 20 Datenbankmanagement mit JDBC 1047 1050 1052 1058 1063 20.1 Das relationale Modell 20.1.1 Relationale und objektorientierte Datenbanken 1063 20.2 JDBC: der Zugriff auf Datenbanken über Java 20.3 20.3.1 20.3.2 Die Rolle von SQL 1065 Ein Rundgang durch SQL-Anfragen 1065 Datenabfrage mit der Data Query Language (DQL) 20.4 Datenbanktreiber für den Zugriff 1068 1064 1064 ___ 1066 20.5 20.5.1 20.5.2 20.5.3 20.5.4 20.5.5 20.5.6 20.5.7 20.5.8 20.5.9 Datenbanken und ihre Treiber 1070 Datenbank Interbasejjnd Firebird 1070 InterbaseJDBC-Treiber 1071 Die freie Datenbank MySQL 1072 JDBC-Treiber für MySQL 1074 Die Datenbank Microsoft Access 1074 Ein Typ 4-Treiber für den Microsoft SQL Server 2000 1074 Die JDBC-ODBC Bridge 1074 ODBC einrichten und Access damit verwenden 1075 Oracle8i Enterprise Edition 1076 20.6 Eine Beispiel-Abfrage 20.7 20.7.1 20.7.2 20.7.3 20.7.4 20.7.5 20.7.6 Mit Java ah eine Datenbank andocken Der Treibermanager 1078 Eine Aufzählung aller Treiber 1078 Log-Informationen 1079 Den Treiber laden 1080 Wie Treiber programmiert sind 1081 Verbindung zur Datenbank 1084 20.8 20.8.1 20.8.2 20.8.3 Datenbankabfragen 1087 Abfragen über das Statement-Objekt Ergebnisse einer Abfrage in ResultSet wasNullO bei ResultSet 1089 20.9 Java und SQL-Datentypen 20.9.1 Die getXXXO-Methoden 1090 20.10 Transaktionen 20.11 20.11.1 Elemente einer Datenbank hinzufügen und aktualisieren Batch-Updates 1093 20.12 20.12.1 20.12.2 Vorbereitete Anweisungen (Prepared Statements) 1094 PreparedStatement-Objekte vorbereiten 1095 Werte für die Platzhalter eines PreparedStatement 1096 1077 1078 1087 1088 1089 1092 1092 20.13 Metadaten 1096 20.13.1 Metadaten über die Tabelle 1096 20.13.2 Informationen über die Datenbank 1100 20.14 Die Ausnahmen bei JDBC 20.15 Java Data Objects (J DO) 1102 21 Reflection 21.1 Einfach mal reinschauen 21.2 21.2.1 21.2.2 21.2.3 Mit dem Class-Objekt etwas über Klassen erfahren An ein Class-Objekt kommen 1105 Was das Class-Objekt beschreibt 1107 Der Name der Klasse 1109 1101 1105 1105 1105 Inhalt 27 28 Inhalt 21.2.4 21.2.5 21.2.6 21.2.7 21.2.8 21.2.9 Oberklassen finden 1111 Implementierte Interfaces einer Klasse oder eines Inferfaces Modifizierer und die Klasse Modifier 1112 Die Attribute einer Klasse 1114 Methoden einer Klasse erfragen 1117 Konstruktoren einer Klasse 1120 21.3 Objekte manipulieren 21.3.1 Objekte erzeugen 1122 21.3.2 21.3.3 21.3.4 Die Belegung der Variablen erfragen Variablen setzen 1126 Private Attribute ändern 1127 21.4 21.4.1 21.4.2 Methoden aufrufen 1128 Statische Methoden aufrufen 1129 Dynamische Methodenaufrufe bei festen Methoden beschleunigen 1130 21.5 21.5.1 Informationen und Identifizierung von Paketen Geladene Pakete 1133 22 Komponenten durch Bohnen 22.1 22.1.1 22.1.2 22.1.3 Grundlagen der Komponententechnik 1135 Brauchen wir überhaupt Komponenten? 1135 Visuelle und nicht visuelle Komponenten 1136 Andere Komponententechnologien oder: Was uns Microsoft brachte 1136 22.2 22.2.1 22.2.2 22.2.3 Das Java-Beans Development Kit (BDK) 1137 Eine Beispielsitzung im BDK 1138 Verknüpfungen zwischen Komponenten 1139 Beans speichern 1140 22.3 Die kleinste Bohne der Welt 1140 22.4 Jar-Archive für Komponenten 22.5 Worauf JavaBeans basieren 22.6 Eigenschaften 22.6.1 22.6.2 22.6.3 Einfache Eigenschaften 1144 Boolesche Eigenschaften 1144 Indizierte Eigenschaften 1145 22.7 22.7.1 22.7.2 Ereignisse 1146 Multicast und Unicast 1146 Namenskonvention 1147 22.8 22.8.1 22.8.2 22.8.3 Weitere Eigenschaften 1149 Gebundene Eigenschaften 1149 Anwendung von PropertyChange bei AWT-Komponenten Veto-Eigenschaften. Dagegen! 1152 1112 1122 1124 1132 1135 1141 1142 1143 i 1152 22.9 22.9.1 Bean-Eigenschaften anpassen Customizer 1154 1153 22.10 Property-Editoren 22.11 Beanlnfo 22.12 Beliebte Fehler 23 Java Native Interface (JNI) 23.1 Java Native Interface und Invocation-API 23.2 23.2.6 Die Schritte zur Einbindung einer C-Funktion in ein Java-Programm 1158 Schreiben des Java-Codes 1158 Kompilieren des Java-Codes 1158 Erzeugen der Header-Datei 1159 Implementierung der Methode in С 1160 Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek 1160 Setzen der Umgebungsvariable 1161 23.3 Erweiterung unseres Programms 23.4 23.4.1 23.4.2 Erweiterte JNI-Eigenschaften Klassendefinitionen 1162 Zugriff auf Attribute 1163 24 Sicherheitskonzepte 24.1 Der Sandkasten (Sandbox) 24.2 24.2.1 24.2.2 24.2.3 24.2.4 24.2.5 Sicherheitsmanager (Security Manager) 1167 Der Sicherheitsmanager bei Applets 1169 Sicherheitsmanager aktivieren 1171 Wie nutzen die Java-Bibliotheken den Sicherheitsmanager? Rechte vergeben durch Policy-Dateien 1172 Erstellen von Rechtedateien mit dem grafischen Policy-Tool 23.2.1 23.2.2 23.2.3 23.2.4 23.2.5 1154 1155 1155 1157 1157 1161 1162 1167 1167 24.3 Klassenlader (Class Loader) 24.3.1 Wie heißt die Klasse mit der Methode mainO? 24.4 24.4.1 24.4.2 24.4.3 24.4.4 24.4.5 Digitale Unterschriften 1176 DieMDx-Reihe 1176 Secure Hash Algorithm (SHA) 1177 Mit der Security-API einen Fingerabdruck berechnen Die Klasse MessageDigest 1178 Unix-Crypt 1181 24.5 Verschlüsseln von Datenströmen 1172 1174 1175 1175 1178 1181 Inhalt 29 25 Dienstprogramme für die Java-Umgebung 1183 25.1 Die Werkzeuge im Überblick 25.2 25.2.1 Der Compiler javac 1183 Der Java-Interpreter Java 1184 25.3 25.3.1 25.3.2 25.3.3 Das Archivformat Jar 1185 Das Dienstprogramm Jar benutzen 1186 Das Manifest 1188 Jar-Archive für Applets und Applikation 1189 25.4 25.4.1 25.4.2 25.4.3 25.4.4 M i t JavaDoc und Doclets dokumentieren 1190 M i t JavaDoc Dokumentationen erstellen 1190 Wie JavaDoc benutzt wird 1191 Eine Dokumentation erstellen 1193 JavaDoc und Doclets 1196 25.5 25.5.1 25.5.2 Dienstprogramme zur Signierung 1196 M i t keytool Schlüssel erzeugen 1196 Signieren mitjarsigner 1197 25.6 Konvertierung von Java Byte Code in ein Windows-Exe mit JET 1198 25.7 Mänteln von Javaklassen in ein Windows-Exe mit JexePack 1198 1183 25.8 Decompiler 25.8.1 25.8.2 25.8.3 Jad, ein schneller Decompiler 1199 SourceAgain 1202 Dekompilieren erschweren 1202 1198 25.9 Obfuscate Programm RetroCuard 1203 25.11 Ant 1204 25.11.1 Bezug und Installation von Ant 1205 25.11.2 Properties 1206 25.11.3 Externe und vordefinierte Properties 1207 25.11.4 Weitere Leistungen 1208 30 Inhalt 26 Style-Guide 1209 26.1 Programmierrichtlinien 1209 26.2 Allgemeine Richtlinien 1209 26.3 26.3.1 26.3.2 Quellcode kommentieren 1210 Bemerkungen über JavaDoc 1212 Cotcha-Schlüsselwörter 1213 26.4 26.4.1 26.4.2 Bezeichnernamen 1214 Ungarische Notation 1214 Vorschlag für die Namensgebung 12^5 26.5 26.5.1 26.5.2 Formatierung 1216 Einrücken von Programmcode - die Vergangenheit Verbundene Ausdrücke 1217 1216 26.5.3 Kontrollierter Datenfluss 26.5.4 Funktionen 1218 26.6 Ausdrücke 1220 26.7 26.7.1 26.7.2 Anweisungen 1221 Schleifen 1221 Switch, case und Durchfallen 26.8 Reihenfolge der Eigenschaften in Klassen 1224 26.9 26.9.1 Zugriffsrechte und Zugriffsmethoden Accessors/Zugriffsmethoden 1225 26.10 Verweise A Literatur 1227 В Spenden 1233 С Die Begleit-CD Index 1217 1223 1224 1225 1235 1237 Inhalt 31
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
advertisement