Auswirkungen des Klimawandels auf Gewässer und Wassertourismus in Brandenburg Foto: Steyer .
Ralph Steyer - Java 2 Kompendium - Professionelle Programmierung Mit J2SE Version 1.3
description
Transcript of Ralph Steyer - Java 2 Kompendium - Professionelle Programmierung Mit J2SE Version 1.3
-
JJJJaaaavvvva aaa 2222KKKKoooommmmppppeeeennnnddddiiiiuuuummmm
-
RRRRaaaallllpppph hhh SSSStttteeeeyyyyeeeerrrr
MMMMaaaarrrrkkkktttt++++TeTeTeTecccchhhhnnnniiiik kkk VVVVeeeerrrrllllaaaagggg
Java 2
Professionelle Programmierung mit J2SE Version 1.3
-
Die Deutsche Bibliothek CIP-Einheitsaufnahme
Ein Titeldatensatz fr diese Publikation ist bei Der Deutschen Bibliothek erhltlich.
Die Informationen in diesem Buch werden ohne Rcksicht auf einen eventuellen Patentschutz verffentlicht. Warennamen werden ohne Ge-whrleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstel-lung von Texten und Abbildungen wurde mit grter Sorgfalt vorgegan-gen. Trotzdem knnen Fehler nicht vollstndig ausgeschlossen werden. Verlag, Herausgeber und Autoren knnen fr fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung bernehmen. Fr Verbesserungsvorschlge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar.
Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nut-zung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zu-lssig.
Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch er-whnt werden, sind gleichzeitig auch eingetragene Warenzeichen oder sollten als solche betrachtet werden.
Umwelthinweis:Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt.Die Einschrumpffolie zum Schutz vor Verschmutzung ist aus um-weltvertrglichem und recyclingfhigem PE-Material.
10 9 8 7 6 5 4 3 2 1
05 04 03 02 01
ISBN 3-8272-6039-6
2001 by Markt+Technik Verlag,ein Imprint der Pearson Education Deutschland GmbH,Martin-Kollar-Strae 1012, D-81829 Mnchen/GermanyAlle Rechte vorbehaltenEinbandgestaltung: Grafikdesign Heinz H. Rauner, GmundLektorat: Jrgen Bergmoser, [email protected]: Elisabeth Egger, [email protected]: reemers publishing services gmbh, Krefeld (www.reemers.de)Druck und Verarbeitung: Bercker, KevelaerPrinted in Germany
-
Java 2 Kompendium 5
Java 2 Kompendium 5 Inhaltsbersicht Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Hinweise zum Buch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Kapitel 1 What's new? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Kapitel 2 Schnuppertour Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Kapitel 3 Das JDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Kapitel 4 Unterschiede zwischen Java-Applikakkationen und -Applets . . . . . . . . . . 137 Kapitel 5 Java-Hintergrnde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Kapitel 6 Java die Hauptbestandteile der Sprache. . . . . . . . . . . . . . . . . . . . . . . . . 183 Kapitel 7 Grundlagen der Applet-Erstellllung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 Kapitel 8 Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Kapitel 9 Grafik und Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 Kapitel 10 Das AWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 Kapitel 11 Swing & Co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .623 Kapitel 12 Debugging und Ausnahmebehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . 667 Kapitel 13 Ein- und Ausgabe in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .697 Kapitel 14 Java-Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 Kapitel 15 Andere Sprachen in Verbindung mit Java. . . . . . . . . . . . . . . . . . . . . . . . . 777 Kapitel 16 Weiterfhrende Themen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829 Anhang A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905 Anhang B. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955 Anhang C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075 Anhang D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
-
Java 2 Kompendium 7
Inhaltsverzeichnis
VVVVoooorrrrwwwwoooorrrrtttt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
HHHHiiiinnnnwwwweeeeiiiisssse eee zzzzuuuum mmm BBBBuuuucccchhhh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
KKKKaaaappppiiiitttteeeel lll 1111 WWWWhhhhaaaatttt''''s sss nnnneeeewwww???? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.1 Java 1.2, Java 2.0, JDK 1.2 und JDK 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.2 JavaSoft und Sun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.3 Die Java-Neuerungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Kompatibilitt und das Java-Plug-In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Interoperabilitt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Anpassung einer Applikation an verschiedene Lnderstandards . . . . . . . . . . . . . . . . . . . . 40
Erweiterung der Sicherheitsschnittstelle von Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Verschlsselung in Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Das Abstract Window Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Java-Archive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Datenbankuntersttzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Verteilte Programmierung und Object Serialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Java IDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
JavaBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Inner Classes und Anonymous Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Native Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Reference Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Multimedia-Untersttzung in Java 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Die Java-2D-API-Referenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Swing JDK 1.2/1.3 und die Java Accessibility API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Drag&Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Die Java-Standardklassen und die Datei classes.zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Vernderungen bei den Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Neues Lizenzierungsmodell fr Java 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
-
Java 2 Kompendium8
Inhaltsverzeichnis
KKKKaaaappppiiiitttteeeel lll 2222 SSSScccchhhhnunununuppppppppeeeerrrrttttoooouuuur rrr JJJJaaaavvvvaaaa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.1 Was ist Java? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Das Internet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Ein kurzer Abriss der Internet-Geschichte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Die Organisation des Internets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Die Adressierung im Internet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Die IP-Nummern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Das DNS-Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Uniform Resource Locator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.2 Die Geschichte von Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Erstes Java-Auftreten, HotJava und das JDK 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Was macht Java so einzigartig? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Die Herkunft von Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
KKKKaaaappppiiiitttteeeel lll 3333 DDDDaaaas sss JJJJDDDDKKKK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.1 Bezug des JDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.2 Installation des JDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91classes.zip, src.zip, src.jar, rt.jar & Co. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Verzeichnisstruktur innerhalb des JDK-Verzeichnisses . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Die Java-Laufzeitumgebung jre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Das Java-Plug-In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.3 Die JDK-Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.4 Fehlervorbeugung und Fehlerbehebung beim JDK . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Pfad-Angaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
CLASSPATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Verwendung von mehreren JDK-Versionen unter Windows . . . . . . . . . . . . . . . . . . . . . . . . 109
Class not found und andere Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Die Java-Umgebungsvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Unbekannte Fehler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3.5 Die wichtigsten JDK-Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117Ein paar allgemeine Hinweise zu den JDK-Programmen . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Der Appletviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Der Java-Compiler Javac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Der Java-Interpreter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
3.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
-
Java 2 Kompendium 9
Inhaltsverzeichnis
KKKKaaaappppiiiitttteeeel lll 4444 UUUUnnnntttteeeerrrrsssscccchhhhiiiieeeedddde eee zzzzwwwwiiiisssscccchhhheeeen nnn JJJJaaaavvvvaaaa----AAAApppppppplllliiiikakakakattttiiiioooonnnneeeen un un un unnnnd ddd ----AAAApppppppplllleeeettttssss . . . . . . . . . . . . . . . . . . . . . 137
4.1 Die technischen Unterschiede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.2 Eine erste Beispielanwendung und ein erstes Applet. . . . . . . . . . . . . . . . . . . . . . . . . 141
Eine erste Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
bergabe von Aufrufargumenten an ein Java-Programm . . . . . . . . . . . . . . . . . . . . . . . . . 144
Ein erstes Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
4.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
KKKKaaaappppiiiitttteeeel lll 5555 JJJJaaaavvvvaaaa----HHHHiiiinnnntttteeeerrrrggggrrrrnnnnddddeeee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
5.1 Was ist OOP?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
5.2 Die Definition von Objektorientierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Objektmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Who's calling?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
5.3 Klassen und Instanzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Superklasse und Subklasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Metaklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Abstrakte Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
5.4 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Mehrfachvererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
5.5 berschreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.6 Polymorphismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.7 Binden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Frhes Binden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Sptes Binden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
5.8 Die Grundprinzipien der objektorientierten Programmierung . . . . . . . . . . . . . . . . . . . 166
5.9 Objektorientierte Analyse und objektorientiertes Design . . . . . . . . . . . . . . . . . . . . . . 167
Die objektorientierte Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Das objektorientierte Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
5.10 Die Objektorientierung von Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Java-Klassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Polymorphismus und Binden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Schnittstellen und Pakete statt Mehrfachvererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
berladen, berschreiben und berschatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Globale Vereinbarungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
-
Java 2 Kompendium10
Inhaltsverzeichnis
5.11 Plattformunabhngigkeit von Java und die JVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Die binre Plattformunabhngigkeit von Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Die JVM-Architektur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Die Datentypen der JVM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Die Java-Plattformunabhngigkeit auf Quellebene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
5.12 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
KKKKaaaappppiiiitttteeeel lll 6666 JJJJaaaavvvva aaa ddddiiiie eee HHHHaaaaupupupupttttbbbbeeeessssttttaaaandndndndtttteeeeiiiilllle eee ddddeeeer rrr SSSSpppprrrraaaacccchhhheeee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.1 Token. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Der Unicode-Zeichensatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Die UTF-8-Codierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Kleiner Vorgriff auf die Datentypen von Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Die Java-Token-Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Literale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Operatoren-Prioritt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
6.2 Typen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Operationen mit den Datentypen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
6.3 Datenfelder (Arrays) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Deklarieren von Datenfeldern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Erstellen von Datenfeldobjekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Dynamische Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Speichern und Zugreifen auf Datenfeldelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
6.4 Ausdrcke, Operatoren und Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Ausdrcke. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Typkonvertierungen und der Casting-Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Der Instanceof-Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
6.5 Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Blcke und Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Leere Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Bezeichnete Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Deklarationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Ausdrucksanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
-
Java 2 Kompendium 11
Inhaltsverzeichnis
Auswahlanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Iterationsanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Java-Sprunganweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Schutzanweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Unerreichbare Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
6.6 Klassen und Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Allgemeines zu Klassen in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Allgemeine Klassendeklaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Klassen-Modifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Der Klassenname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Superklassen und das Schlsselwort extends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Designregeln fr Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Innere und anonyme Klassen bzw. Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Adapterklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Konstruktoren und der new-Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Das Speichermanagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Das Schlsselwort this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
6.7 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Deklaration einer Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Die Zugriffsspezifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Die Methodenmodifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Die Rckgabewerte von Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Der Methodenname. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Die Parameterliste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Der Methodenkrper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Methoden berladen und berschreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
6.8 Schnittstellen und das Schlsselwort implements . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Erstellung einer Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Namensregeln fr Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Die Erweiterung anderer Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Der Krper einer Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
berschreiben und Verwenden von Schnittstellenmethoden . . . . . . . . . . . . . . . . . . . . . . . 322
Verwenden von Feldern einer Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Beispiele mit Schnittstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
-
Java 2 Kompendium12
Inhaltsverzeichnis
6.9 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Instanzvariablen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Klassenvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Klassenvariablen versus Instanzvariablen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Lokale Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Die Java-Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
6.10 Der Zugriff auf Java-Elemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
6.11 Pakete und die import-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Die Verwendung von Paketen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Erstellung eines Paketes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Das anonyme Default-Paket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Zugriffslevel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
6.12 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
KKKKaaaappppiiiitttteeeel lll 7777 GGGGrrrruuuunnnnddddllllaaaaggggeeeen dn dn dn deeeer rrr AAAApppppppplllleeeetttt----EEEErrrrsssstttteeeellllllllunununungggg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
7.1 Die Vorbereitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
7.2 Grundlagen der Einbindung von Java-Applets in HTML-Seiten. . . . . . . . . . . . . . . . . . 343
HTML-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
7.3 Konkrete Referenzierung eines Java-Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Die -Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Die Parameter des -Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Die -Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Die -Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Welches Tag ist sinnvoll? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Die ursprngliche HotJava-Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
7.4 Die interne Arbeitsweise eines Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Erstellung und Grundmethoden eines Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Ein Musterapplet als Schablone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
7.5 Die Applet-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Ausgabe in einem Applet mit der paint()-Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
bergabewerte fr ein Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
Bilder importieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Importieren und Abspielen von Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Die Interaktion des Applets mit der Umgebung und den Lebenszyklus eines Applets verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Methoden zur Ereignisbehandlung in Applets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
-
Java 2 Kompendium 13
Inhaltsverzeichnis
7.6 Multithreading bei Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
7.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
KKKKaaaappppiiiitttteeeel lll 8888 MMMMuuuullllttttiiiitttthhhhrrrreaeaeaeaddddiiiingngngng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
8.1 Klassen Thread-fhig machen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Die Erweiterung der Klasse Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Implementation von Runnable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
8.2 Thread-Gruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Eine Thread-Gruppe erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Hinzufgen eines Threads zu einer Thread-Gruppe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
8.3 Dmonen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
8.4 Schutzmanahmen bei Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Methoden synchronisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Vorsicht, Deadlock! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Synchronisierte Blcke. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Thread-sicherer Zugriff auf Datenstrukturen und Objekte . . . . . . . . . . . . . . . . . . . . . . . . . 415
8.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
KKKKaaaappppiiiitttteeeel lll 9999 GGGGrrrraaaaffffiiiik kkk unununund ddd AAAAnnnniiiimmmmaaaattttiiiioooonnnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
9.1 Zeichnen, Update und neu zeichnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
9.2 Punkte, Linien, Kreise und Bgen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Das Koordinatensystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Eine Linie zeichnen die drawLine()-Methode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Ein Rechteck zeichnen die drawRect()-Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Ein geflltes Rechteck zeichnen fillRect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Lschen eines Bereichs clearRect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Kopieren eines Bereichs copyArea(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Ein 3D-Rechteck zeichnen die draw3dRect()-Methode . . . . . . . . . . . . . . . . . . . . . . . . . 425
Ein geflltes 3D-Rechteck zeichnen fill3dRect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Abgerundete Rechtecke drawRoundRect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Abgerundete gefllte Rechtecke fillRoundRect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Zeichnen von Polygonen drawPolygon() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Zeichnen von gefllten Polygonen fillPolygon() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
Zeichnen von Kreisen und Ellipsen drawOval() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Zeichnen von gefllten Kreisen und Ellipsen fillOval() . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Zeichnen von Bgen drawArc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Zeichnen von gefllten Bgen fillArc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
-
Java 2 Kompendium14
Inhaltsverzeichnis
9.3 Farbangaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Die Color-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Farben setzen setColor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Hintergrundfarben und Vordergrundfarben pauschal setzen setBackground() und setForeground() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Ein Apfelmnnchen als Java-Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Abrufen von Farbinformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
Textausgabe ber den Zeichnen-Modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Erstellen von Fontobjekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Abfragen der zur Verfgung stehenden Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Informationen ber einen speziellen Font abfragen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
9.4 Die Java-Zeichenmodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Der Paint-Modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Der XOR-Zeichenmodus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
9.5 Zeichnen von Bildern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Laden von Bildern getImage() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Anzeigen von Bildern drawImage() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Der Imageobserver und der MediaTacker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
9.6 Animationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Aufbau eines Animationsrahmens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Abspielen einer Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Flimmereffekte in Animationen reduzieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Clipping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Double-Buffering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
9.7 Das 2D-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
Java-2D-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
Zeichnen unter dem Java-2D-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Komplexere Zeichnenoperationen im 2D-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Text unter Java 2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
9.8 Bilder unter Java 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Anzeige von Bildern unter Java 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Transparenz und Bilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Rendering als Bestandteil von Java 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Kontrolle der Ausgabequalitt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Transformation von 2D-Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Neue Formen kreieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
-
Java 2 Kompendium 15
Inhaltsverzeichnis
Stroking Paths. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Fllen von Formen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Komposition von Bildern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Transparenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Text und Fonts unter Java 2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Farbmanagement unter Java 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
2D-Bildbearbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Offscreen-Puffer unter Java 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
2D-Graphics Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
9.9 Die Java-2D-API-Referenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
9.10 Sound und Tne in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Das Abspielen und Stoppen eines Audio-Clips play() . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Die Sound-Mglichkeiten der JDK-Demos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Das Java Media Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
9.11 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
KKKKaaaappppiiiitttteeeel lll 11110000 DDDDaaaas sss AAAAWWWWTTTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
10.1 Was ist das Abstract Window Toolkit? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
10.2 Woraus besteht das AWT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Was sind AWT-Komponenten? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
Was versteht man unter AWT-Container? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Container und Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Der Aufbau der AWT-Klassenhierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Was ist ein AWT-Layoutmanager? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
10.3 Container. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
Dialoge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
10.4 Schaltflchen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
10.5 Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
10.6 Kontrollkstchen und Optionsfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Kontrollkstchen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Optionsfelder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Reaktionen auf Kontrollfelder und Radiobuttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
-
Java 2 Kompendium16
Inhaltsverzeichnis
10.7 Auswahlmens und Listenfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Einzeilige Listenfelder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Mehrzeilige Listenfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
10.8 Textbereiche und Textfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
Textbereiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
Textfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Gemeinsame Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
Spezielle TextField-Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
Spezielle TextArea-Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
10.9 Schieber und Bildlaufleisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
10.10 Zeichenbereiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
10.11 Mens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
10.12 Eine Schablone fr alle Flle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
10.13 Layoutmanager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Layout-Regeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Die Layoutmanager im Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
10.14 Die Eventmodelle 1.0 und 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
Der AWT-Event-Handler 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
Tastaturereignisse des AWT-Event-Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
Mausereignisse des AWT-Event-Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
Zentrale Aspekte des 1.0-Eventhandlings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
Das Eventhandling 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
Der Umstieg vom 1.0-Eventmodell auf das 1.1-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
10.15 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
KKKKaaaappppiiiitttteeeel lll 11111111 SSSSwwwwiiiinnnng ggg & &&& CCCCoooo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
11.1 Das Swing-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
11.2 Swing und AWT im Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
Einige Swing-Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
11.3 Swing in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Umschalten von Look and Feel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Swing und Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
11.4 Eigenstndige Applikationen und Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Eine Swing-Applikations-Schablone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
-
Java 2 Kompendium 17
Inhaltsverzeichnis
11.5 Swing-Komponenten im Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
11.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
KKKKaaaappppiiiitttteeeel lll 11112222 DDDDeeeebubububuggggggggiiiing unng unng unng und ddd AAAAuuuussssnnnnaaaahhhhmmmmeeeebbbbeeeehhhhaaaannnnddddllllunununungggg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
12.1 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Fehler im Vorfeld abfangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Vernnftige Sicherungsmanahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Fehler finden und beseitigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Fehlerlokalisierung ohne Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
Fehlerlokalisierung mit Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
12.2 Ausnahmebehandlung und andere Fehlerbehandlungen . . . . . . . . . . . . . . . . . . . . . . 675
Die individuell programmierte Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
Die Ausnahmebehandlung von Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
Benutzerdefinierte Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
Die RuntimeException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
12.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
KKKKaaaappppiiiitttteeeel lll 11113333 EEEEiiiinnnn- --- unununund ddd AAAAuuuussssggggaaaabbbbe eee iiiin nnn JJJJaaaavvvvaaaa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
13.1 Allgemeines zur Ein- und Ausgabe unter Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
13.2 Die Klasse InputStream. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
Methoden zum Einlesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
Blockaden vorher abfragen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
berspringen von Daten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
Positionen beim Lesen markieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
Ressourcen freigeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
13.3 Die Klasse OutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
Methoden zum Schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
Den gepufferten Cache ausgeben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
Ressourcen freigeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
13.4 Byte-Datenfeldstrme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
13.5 Der StringBufferInputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
13.6 Gefilterte Strme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
13.7 Gepufferte Strme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
13.8 Datenstrme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Die DataInput-Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
-
Java 2 Kompendium18
Inhaltsverzeichnis
Die DataOutput-Schnittstelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
Die DataInputStream- und DataOutputStream-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
13.9 Die PrintStream-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
13.10 Pipe-Strme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
13.11 Objektstrme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
13.12 Einige spezielle Utility-Strme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Die LineNumberInputStream-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Die SequenceInputStream-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Die PushbackInputStream-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Die StreamTokenizer-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
13.13 Die File-Klasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
berprfung, ob Datei oder Verzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
Lese- und Schreiberlaubnis berprfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Die letzte nderung berprfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Die Existenz eines Objekts berprfen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Pfadkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Namen und Pfad einer Datei oder eines Verzeichnisses ermitteln . . . . . . . . . . . . . . . . . . . 719
Eine Datei oder ein Verzeichnis umbenennen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Dateien lschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Verzeichnisse erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Den Inhalt eines Verzeichnisses angeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
13.14 Dateistrme FileInputStream und FileOutputStream . . . . . . . . . . . . . . . . . . . . . . . . 721
Die RandomAccessFile-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
13.15 Praktische Java-Beispiele mit Datenstrmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
13.16 Drucken unter Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
Drucken unter dem JDK 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
Drucken unter dem SDK 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
13.17 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
KKKKaaaappppiiiitttteeeel lll 11114444 JJJJaaaavvvvaaaa----SSSSiiiicccchhhheeeerrrrhhhheeeeiiiitttt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
14.1 Das Java-Sicherheitskonzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Die Missbrauchsfhigkeiten einer Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756
Viren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
Unkontrollierte Systemzugriffe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
Verifizierung des Bytecodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
Der Verifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
-
Java 2 Kompendium 19
Inhaltsverzeichnis
Der Classloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
Der Sicherheitsmanager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
Digitale Unterschriften eines Applets und Verschlsselungin Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Native Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Weitere unerwnschte Aktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
14.2 ActiveX-Sicherheitskonzept im Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
Was sind ActiveX-Controls? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
Sicherheitskonzept von ActiveX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
14.3 Bekannte Sicherheitslcken der Java-Vergangenheit . . . . . . . . . . . . . . . . . . . . . . . . 771
Der Bytecode-Bug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
Schwarze Witwen und der DNS-Bug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
Der CLASSPATH-Bug. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
Weitere Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
Informationen zur Sicherheit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
14.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
KKKKaaaappppiiiitttteeeel lll 11115555 AAAAnnnnddddeeeerrrre eee SSSSpppprrrraaaacccchhhheeeen nnn iiiin Vn Vn Vn Veeeerrrrbbbbiiiindndndnduuuung ngngng mmmmiiiit ttt JJJJaaaavvvvaaaa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
15.1 C/C++ Unterschiede und Gemeinsamkeiten sowie die Einbindung . . . . . . . . . . . . 777
Unterschiede und Gemeinsamkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
15.2 Die Verbindung von Java und nativem Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
Konventioneller Einbau von C-Code in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
Das Java Native Interface (JNI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
JNI-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
Datenaustausch zwischen Java und C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
Java-C++-Verbindung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
Alternativen zum direkten Einbinden von nativen Methoden . . . . . . . . . . . . . . . . . . . . . . . 795
15.3 Verbindung von Java zu JavaScript und anderen Scriptsprachen . . . . . . . . . . . . . . . 795
Kleiner Exkurs zu JavaScript-Interna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
Das Objektmodell von JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
Verbindung von Java und JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
Applets dynamisch schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
Verbindung mit weiteren Techniken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
15.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
-
Java 2 Kompendium20
Inhaltsverzeichnis
KKKKaaaappppiiiitttteeeel lll 11116666 WWWWeeeeiiiitttteeeerrrrffffhhhhrrrreeeendndndnde Te Te Te Thhhheeeemmmmeeeennnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
16.1 Reflection und Serialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Serialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
16.2 JavaBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
Wie passen JavaBeans in Java? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Beans erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
Spezielle Anwendungen von JavaBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
Beans einer IDE bereitstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
16.3 Verteilte Systeme RMI, IDL und CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
Java IDL oder wie ist RMI in Bezug auf CORBA zu sehen? . . . . . . . . . . . . . . . . . . . . . . . . 844
Entwicklung einer CORBA-Anwendung in Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
16.4 Netzwerkzugriffe, Sockets und Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Java-Servlets, JSP und SSI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Allgemeine Netzwerkzugriffe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 870
Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
16.5 Datenbanken und JDBC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
Was sind relationale Datenbanken?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
Was ist SQL?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
JDBC versus ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
Grundaufbau von JDBC und des JDBC-Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
Woraus besteht das JDBC-API? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Die JDBC-Treiber. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
Schematischer Aufbau einer Datenbank-Applikation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
Praktischer Einsatz von JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
16.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
AAAAnnnnhhhhaaaannnng ggg AAAA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905
A.1 Ergnzungen zu den JDK-Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905
Erweiterte Basisprogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905
Internationalization Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927
Security Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
Java IDL- und RMI-Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936
-
Java 2 Kompendium 21
Inhaltsverzeichnis
A.2 IDEs fr Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938
JCreator fr Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938
Forte 2.0 for Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
JBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
Kawa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951
AAAAnnnnhhhhaaaannnng ggg BBBB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
B.1 Das Java-1.3-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
B.2 Beschreibung der Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959
java.applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960
java.awt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960
java.awt.color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966
java.awt.datatransfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
java.awt.dnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
java.awt.event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
java.awt.font . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970
java.awt.geom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971
java.awt.im . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
java.awt.im.spi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
java.awt.image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
java.awt.image.renderable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
java.awt.print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
java.beans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
java.bean.beancontext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
java.io. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979
java.lang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
java.lang.ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
java.lang.reflect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
java.math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
java.net. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
java.rmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
java.rmi.activation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
java.rmi.dgc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
java.rmi.registry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
java.rmi.server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
java.security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
java.security.acl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
-
Java 2 Kompendium22
Inhaltsverzeichnis
java.security.cert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
java.security.interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
java.security.spec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
java.sql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
java.text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
java.util . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
java.util.jar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
java.util.zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
javax.accessibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
javax.naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
javax.naming.directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
javax.naming.event, javax.naming.ldap und javax.naming.spi . . . . . . . . . . . . . . . . . . . . . . 1007
javax.rmi und javax.rmi.CORBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
javax.sound.midi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
javax.sound.midi.spi, javax.sound.sampled und javax.sound.sampled.spi . . . . . . . . . . . . . 1009
javax.swing & Co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
javax.swing.event. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014
javax.swing.undo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
Die CORBA-Pakete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
Nicht enthalten das Servlets-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
B.3 Die veralteten Elemente des Java-API 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
Klassen (deprecated) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Interfaces (deprecated). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Exceptions (deprecated) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Felder (deprecated) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Methoden (deprecated) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
Constructors (deprecated) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
B.4 HTML-Elemente und -Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
HTML-Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
Die HTML 4.0-Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030
B.5 JavaScript- Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
AAAAnnnnhhhhaaaannnng ggg CCCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075
C.1 JAR-Archive oder wie arbeiten Komprimierungstechnologien? . . . . . . . . . . . . . . . . . 1075
Komprimierungsverfahren und Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075
Der Huffman-Algorithmus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078
-
Java 2 Kompendium 23
Inhaltsverzeichnis
Selbstextrahierende Programme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082
Wie gro ist die Reduzierung der Datenmenge?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083
C.2 Wie funktionieren Verschlsselungsverfahren? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083
Verschlsselungs- bzw. Kryptographieprogramme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084
Einige Verschlsselungsverfahren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086
PGP oder wie Java verschlsselt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089
Die heutigen Standard-Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089
Eine kleine Abschlussbemerkung zum Thema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090
C.3 Von der Dezimalrechnung abweichende Rechenarten . . . . . . . . . . . . . . . . . . . . . . . . 1091
Binrrechnung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091
Oktalrechnung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092
Hexadezimalrechnung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093
C.4 Die Theorie des Zweierkomplements bei ganzen Zahlen . . . . . . . . . . . . . . . . . . . . . . 1095
C.5 Farbangaben in Java und JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097
Die direkte Angabe eines Farbnamens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097
Die Farbangabe mittels RGB-Werten in Hexadezimalform. . . . . . . . . . . . . . . . . . . . . . . . . 1097
C.6 Erluterung der Kurzschreibweisen von Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . 1098
C.7 Java-Quellen im Internet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099
AAAAnnnnhhhhaaaannnng ggg DDDD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101
D.1 Neuerungen der Java-2-Plattform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101
SSSSttttiiiicccchhhhwwwwoooorrrrttttvvvveeeerrrrzzzzeeeeiiiicccchnhnhnhniiiissss. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
-
Java 2 Kompendium 25
erstellt von ciando
Vorwort
Wllkommen zu Java! Vielleicht stellen Sie sich gerade die Frage: Waskann ich mit Java machen? Eine einfache Antwort: Fast alles! Zumindest,wenn Sie an Programmierung denken. Grafische Animationen, Chats imRahmen von Webseiten, Spiele, Verschlsselungsprogramme, interaktiveWebseiten, Musik, Textverarbeitungen, kleine und groe Internet-Applets,riesige Programmpakete, Programme zur Bildverarbeitung, neuartige Benut-zeroberflchen, bersetzungsprogramme, Bestellsysteme, Lernanwendun-gen, Uhren, Office-Programme und noch viel mehr. Mit anderen Worten:Mit der Programmiersprache Java kann man jedes denkbare Programmschreiben. Zuerst profitieren natrlich das Internet und das WWW davon auf allen mglichen WWW-Seiten werden Java-Applets eingesetzt. Aberauch jenseits des Internets gibt es einen unerschpflichen Fundus an poten-ziellen Anwendungen. Sie finden mittlerweile zahlreiche in Java erstellteApplikationen auf den verschiedensten Computersystemen.
Das Einsatzgebiet von Java ist jedoch nicht nur auf reine Computersystemebeschrnkt, sondern erstreckt sich insbesondere auch auf die Programmie-rung von einer Vielzahl verwandter Gerte, die einen Prozessor beinhalten.Das sind einmal naheliegende Beispiele wie Mobiltelefone, insbesondere sol-che, die den neuen UMTS-Standard Universal Mobile TelecommunicationSystem (universelles mobiles Telekommunikationssystem) untersttzensollen und Videorecorder, aber auch viele andere Gerte des tglichenGebrauchs, von denen einige auch erst in der Zukunft eine Zielplattform freine umfangreiche Programmierung bieten. Sei es der voll programmierbareKhlschrank, der mit einem Warenmanagementsystem selbst seinen Inhaltverwaltet und bei Bedarf selbststndig eine Bestellung per Internet aufgibtoder die Mikrowelle, die aus dem Auto heraus via Handy und Internetangeschaltet werden kann. Diese und viele andere Gerte sind keine Fiktion,sondern bereits Realitt, und es ist nur noch eine Frage der Zeit, wann siezu selbstverstndlichen Gebrauchsgegenstnden werden. Und mit Java stehtdie Technik bereit, den damit verbundenen Anforderungen der Program-mierung zu begegnen.
Auf jeden Fall ist Java hipp, ist hei. Fast alle wichtigen Firmen der Com-puterbranche setzen seit lngerer Zeit verstrkt auf Java. Zwar hatte sichdie anfngliche Euphorie um Java zwischenzeitlich etwas gelegt, aber mit-tlerweile ist die Bedeutung von Java wieder erheblich gestiegen (nicht zuletzt
-
Java 2 Kompendium26
Vorwort
durch die Mglichkeiten bei der Programmierung von intelligenten Gertendes tglichen Gebrauchs). Java hat sich als eine feste Gre in der EDV eta-bliert und wenn die Visionre Recht behalten, wird Java bereits in naherZukunft in fast allen datenbasierenden Gerten zu finden sein. Die immerstrker werdende Nachfrage nach Java-Programmierern zeigt zudem, wieviel Potenzial die Wirtschaft in Java sieht.
Seit der Version 1.0 wurden Java und das zugehrige EntwicklungspaketJDK (Java Development Kit) immer weiter verbessert. Vor allem kann manseit dem JDK 1.2 davon ausgehen, dass Kinderkrankheiten der ersten bei-den Versionen 1.0/1.1 (vor allem der Version 1.0) der Vergangenheit ange-hren. Das JDK 1.3 als aktuelle Basis der Java-2-Plattform hat sich insbe-sondere noch einmal der Performance von Java-Programmen angenommenund Java ist damit zu einer der leistungsfhigsten Entwicklerplattformenberhaupt geworden. Vor allem ist Java aber spannend und eine der inno-vativsten Entwicklungen der EDV-Welt seit vielen Jahren. Viel Spa beimErforschen, Erlernen und Programmieren wnscht Ihnen
Ralph Steyer
HTTP://WWW.RJS.DE
-
Java 2 Kompendium 27
Hinweise zum Buch
Um sich die Arbeit mit dem Buch und den Beispielen zu erleichtern, solltenSie folgende Hinweise beachten:
Beachten Sie die Tipps, Warnungen und Hinweise auerhalb des Flie-textes, ebenso besonders hervorgehobene Textpassagen.
Sie finden die Beispiele und die dort verwendeten Dateien (Bilder,Datenbanken usw.) allesamt auf der Buch-CD. Aus didaktischen Grn-den ist jedoch ein explizites Abtippen der Quelltexte immer sinnvoller.
Aus satztechnischen Grnden ist es in einigen Listings notwendig,Strings (in Hochkommata eingeschlossene Texte) auf mehrere Zeilenaufzuteilen. Das darf im Editor bei der Eingabe des Quelltextes abernicht gemacht werden. Mit anderen Worten Strings mssen unbe-dingt in eine Zeile geschrieben werden.
Zwischen den Versionen von Java bestehen erhebliche Differenzen undteilweise Inkompatibilitten. Darauf wird an diversen Stellen im Buchhingewiesen.
Die Entwicklungen rund um Java sind permanent im Fluss. Deshalbsollten Sie immer aktuelle Entwicklungen im Internet verfolgen undneueste Programme und Dokumentationen aus dem Internet bei Bedarfparat haben.
-
Java 2 Kompendium 29
1 What's new?
Lassen Sie uns gleich damit beginnen, uns an die faszinierende Welt vonJava heranzutasten. Bevor wir jedoch zur eigentlichen Java-Schnuppertourkommen, sollen fr die Leser, die Java bereits kennen, kompakt die Neue-rungen von Java 2.0 und dem JDK 1.2/1.3 aufgefhrt werden.
In diesem Abschnitt wird eine gewisse Vertrautheit mit den wichtigstenBegriffen von Java und seinem Umfeld vorausgesetzt. Wer sich mit Javanoch nicht auskennt, kann gerne spter auf diesen Abschnitt zurckkom-men.
1.1 Java 1.2, Java 2.0, JDK 1.2 und JDK 1.3
Java 2.0! Erheblich versptet, aber dafr mit umso lauterem Getse gingJava nach dem fulminanten 1.0-Einstieg und den Zwischenversionen 1.1und 1.2 (Beta) Anfang 1999 in die zweite Runde. Im Dezember 1998 hatteSun Microsystem (der Eigentmer von Java) endlich die bereits Anfang1998 angekndigte und mehrfach verschobene Finalversion des JDK 1.2(Java Development Kit) der Java-Entwicklungsumgebung freigegeben.Kurz danach gab Sun auf der Java Business Expo bekannt, dass es nicht nurein neues JDK, sondern ein vollstndiges Plattform-Update unter demNamen Java 2.0 gibt.
Diese Namenspolitik berraschte zum damaligen Zeitpunkt doch ziemlich,denn es schien bis dahin klar, dass das vollstndige Update der bis dahinvertriebenen JDK-Finalversion 1.1 und seiner ergnzenden Tools als Ver-sion 1.2 in Umlauf kommt. So ganz berzeugt von seiner Namenspolitikscheint auch Sun nicht gewesen zu sein, denn das erste JDK von Java 2 Kern der Java-2.0-Plattform wurde innerhalb der Java-2.0-Plattform alsJDK 1.2 eingefhrt und auch das neue JDK von Java 2 luft als Version 1.3.Sogar Publikationen zur Gesamtplattform wurden von Sun Microsystemsnoch Anfang 1999 unter dem Titel Java 1.2 verffentlicht. Aber um esgleich vorab festzuhalten die Vernderungen des Java-APIs (API ist dieAbkrzung fr Application Programming Interface -Programmier- undAnwendungsschnittstelle), die sich noch zwischen den Betaversionen desJDK 1.2 und der als Final freigegebenen Version ergeben haben, erzwangeneine solche Namenspolitik fast unweigerlich. Es war leider so, dass bei-
-
Java 2 Kompendium30
Kapitel 1 What's new?
spielsweise das API der dritten Betaversion 1.2 und das 1.2/2.0-Final-APIextrem viele Unterschiede aufwiesen. Der Oberbegriff Java 2 macht denBreak zu den Vorgngerversionen (insbesondere den inkompatiblen Beta-versionen) deutlich. Mit der Einfhrung des JDK 1.2 und der Java-2-Platt-form hatte Sun endlich einen Stand geschaffen, von dem aus es weitgehendum die Verbesserung der Stabilitt (ein rigoroses Qualittssicherungspro-gramm) und Performance (Vervollkommnung der virtuellen Maschine)ging. Davor lag der Hauptfokus auf dem Ausbau und der Entwicklung vonneuen Features und der Beseitigung von Schwachstellen. Zwischen demJDK 1.2 und dem Mitte 2000 eingefhrten JDK 1.3 (Codename Kestrel)hingegen sind die Unterschiede nicht mehr so gravierend, weshalb Java 2ohne gravierende Probleme als Obermenge fr beide JDK-Welten fungierenkann. Vor allem sind die Vernderungen von dem JDK 1.3 fast nur als echteErweiterungen und Verbesserungen zu sehen, die keine gravierendenInkompatibilitten zum JDK 1.2 nach sich ziehen. Dementsprechend wer-den das JDK 1.3 wie auch das JDK 1.2 und die dazwischen liegenden Ver-sionen JDK 1.2.1 und 1.2.2 zur Java-2-Plattform gezhlt. Die vielleichtbedeutendste Erweiterung des JDK 1.3 ist die Einfhrung der HotSpot-Technologie. Diese beinhaltet im Wesentlichen eine so genannte adaptiveCompilertechnologie, bei der interpretierte Programmteile bei Bedarf zurAusfhrungszeit des Programms in Maschinencode bersetzt werden kann.Dazu zhlt ebenso eine geschwindigkeitsoptimierte virtuelle Maschine frden Client und die zugehrigen, mit dem JDK 1.3 neu eingefhrten neuenOptionen bei einigen Programmen des JDK.
Der Mischmasch der Versionen fhrt bei vielen Betrachtern zu Verwirrung.Deshalb zur Klrung wir werden uns in dem Buch mit Java 2.0 und vorallem dem dazu gehrenden JDK 1.3 beschftigen, aber die Aussagen geltenauch meist fr das JDK 1.2. Allgemein wird das gesamte Konzept zur Ent-wicklung von Applikationen fr Java 2 mit dem JDK 1.3 unter Java 2SDK zusammengefasst (SDK steht fr Software Development Kit).
Wesentlicher Unterschied zwischen der vollstndigen Java-Plattform unddem JDK ist, dass die Plattform weitere APIs, Programme, Tools und Kon-zepte enthlt. Hierzu zhlen das JSDK (Java Servlet Development Kit), dasbis zur Beta 4-Version des JDK 1.2 noch z