Gary Cornell Cay S Horstmann
Core Java 2. Band 1. Grundlagen
Gary Cornell Cay S Horstmann
Core Java 2. Band 1. Grundlagen
- Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
Die Übersetzung des internationalen Bestsellers zur Java-Programmierung. Sie erfahren hier alle wesentlichen Aspekte des Java2-Standards. Die Autoren gehen besonders auf die objektorientierte Programmierung unter Java ein und behandeln ausführlich die Möglichkeiten der neuen Swing-Klasse. Die Praxisnähe des Buches wird durch zahlreiche Beispiele aus dem Programmieralltag hergestellt, die kontrovers diskutiert werden. Auf der CD-ROM: Sun SDK J2SE 1.3 für Windows und Solaris, Quelltexte zum Buch.
Die Übersetzung des internationalen Bestsellers zur Java-Programmierung. Sie erfahren hier alle wesentlichen Aspekte des Java2-Standards. Die Autoren gehen besonders auf die objektorientierte Programmierung unter Java ein und behandeln ausführlich die Möglichkeiten der neuen Swing-Klasse. Die Praxisnähe des Buches wird durch zahlreiche Beispiele aus dem Programmieralltag hergestellt, die kontrovers diskutiert werden. Auf der CD-ROM: Sun SDK J2SE 1.3 für Windows und Solaris, Quelltexte zum Buch.
Produktdetails
- Produktdetails
- Verlag: Markt & Technik ein Imprint von Pearson Deutschland
- ISBN-13: 9783827260161
- ISBN-10: 3827260167
- Artikelnr.: 25130527
- Herstellerkennzeichnung Die Herstellerinformationen sind derzeit nicht verfügbar.
- Verlag: Markt & Technik ein Imprint von Pearson Deutschland
- ISBN-13: 9783827260161
- ISBN-10: 3827260167
- Artikelnr.: 25130527
- Herstellerkennzeichnung Die Herstellerinformationen sind derzeit nicht verfügbar.
Vorwort 13
Einige Worte an den Leser 14
Über dieses Buch 16
Konventionen 17
1 Einführung in Java 19
1.1 Java als Programmierwerkzeug 20
1.2 Vorteile von Java 21
1.3 Schlagwörter zu Java im "White Paper" 22
1.3.1 Einfach 23
1.3.2 Objektorientiert 24
1.3.3 Verteilt 24
1.3.4 Robust 25
1.3.5 Sicher 25
1.3.6 Architekturneutral 27
1.3.7 Portabel 27
1.3.8 Interpretiert 28
1.3.9 Leistungsfähig 28
1.3.10 Multithreaded 28
1.3.11 Dynamisch 29
1.4 Java und das Internet 29
1.4.1 Applets in der Praxis 30
1.4.2 Serverseitiges Java 31
1.5 Geschichtlicher Abriss zu Java 32
1.6 Java - falsch verstanden 34
2 Die Programmierumgebung 39
2.1 Das Java Software Development Kit installieren 40
2.1.1 Ausführungspfad festlegen 41
2.1.2 Bibliotheksquellen und Dokumentation installieren 42
2.1.3 Programmbeispiele von CoreJava installieren 43
2.1.4 Die Java-Verzeichnisse 43
2.2 Entwicklungsumgebungen 44
2.3 Befehlszeilenwerkzeuge 45
2.3.1 Hinweise zur Fehlersuche 47
2.4 Eine integrierte Entwicklungsumgebung 48
2.4.1 Kompilierfehler aufspüren 50
2.5 Programme aus einem Editor heraus kompilieren und ausführen 51
2.6 Grafikanwendungen 56
2.7 Applets 59
3 Grundlegende Programmstrukturen 65
3.1 Ein einfaches Java-Programm 66
3.2 Kommentare 69
3.3 Datentypen 70
3.3.1 Ganzzahlen 71
3.3.2 Gleitkommatypen 72
3.3.3 Der Zeichentyp (char) 73
3.3.4 Der Typ boolean 74
3.4 Variablen 74
3.5 Zuweisungen und Initialisierungen 76
3.5.1 Konstanten 77
3.6 Operatoren 78
3.6.1 Operatoren zum Inkrementieren und Dekrementieren 79
3.6.2 Relationale und boolesche Operatoren 80
3.6.3 Bitoperatoren 81
3.6.4 Mathematische Funktionen und Konstanten 82
3.6.5 Umwandlungen zwischen numerischen Typen 83
3.6.6 Typumwandlungen 84
3.6.7 Klammern und Operatorvorrang 85
3.7 Strings 86
3.7.1 Verkettung 86
3.7.2 Teilstrings 87
3.7.3 Strings bearbeiten 87
3.7.4 Strings auf Gleichheit testen 89
3.7.5 Die API-Onlinedokumentation 92
3.7.6 Eingaben lesen 95
3.7.7 Ausgabe formatieren 97
3.8 Den Programmfluss steuern 101
3.8.1 Gültigkeitsbereich eines Blocks 101
3.8.2 Bedingungsanweisungen 102
3.8.3 Unbestimmte Schleifen 105
3.8.4 Bestimmte Schleifen 110
3.8.5 Mehrfachauswahl - die switch-Anweisung 113
3.8.6 Benannte Breaks 114
3.9 Große Zahlen 118
3.10 Arrays 121
3.10.1 Arrays initialisieren und anonyme Arrays 122
3.10.2 Arrays kopieren 123
3.10.3 Befehlszeilenparameter 125
3.10.4 Ein Array sortieren 126
3.10.5 Mehrdimensionale Arrays 129
3.10.6 Unregelmäßige Arrays 132
4 Objekte und Klassen 137
4.1 Einführung in die objektorientierte Programmierung 138
4.1.1 Das Vokabular der objektorientierten Programmierung 140
4.1.2 Objekte 141
4.1.3 Beziehungen zwischen Klassen 142
4.1.4 Objektorientierte und prozedurale Programmierung 144
4.2 Vorhandene Klassen verwenden 146
4.2.1 Objekte und Objektvariablen 147
4.2.2 Die Klasse GregorianCalendar der Java-Bibliothek 150
4.2.3 Mutator- und Accessormethoden 152
4.3 Eigene Klassen 158
4.3.1 Eine Klasse Employee 158
4.3.2 Mehrere Quelldateien 162
4.3.3 Die Klasse Employee im Detail 163
4.3.4 Erste Schritte mit Konstruktoren 163
4.3.5 Die Methoden der Klasse Employee 165
4.3.6 Methodenzugriff auf private Daten 169
4.3.7 Private Methoden 170
4.3.8 Private Instanzfelder 170
4.4 Statische Felder und Methoden 171
4.4.1 Statische Felder 171
4.4.2 Konstanten 172
4.4.3 Statische Methoden 173
4.4.4 Factory-Methoden 174
4.4.5 Die Methode main 175
4.5 Methodenparameter 178
4.6 Objektkonstruktion 184
4.6.1 Überladen 184
4.6.2 Standardinitialisierung von Feldern 185
4.6.3 Standardkonstruktoren 186
4.6.4 Explizite Feldinitialisierung 187
4.6.5 Parameternamen 188
4.6.6 Einen anderen Konstruktor aufrufen 189
4.6.7 Initialisierungsblöcke 189
4.6.8 Objektzerstörung und die Methode finalize 194
4.7 Pakete 195
4.7.1 Pakete im Einsatz 195
4.7.2 Eine Klasse in ein Paket hinzufügen 197
4.8 Kommentare zur Dokumentation 205
4.8.1 Kommentare einfügen 205
4.8.2 Kommentare für Klassen 206
4.8.3 Kommentare für Methoden 207
4.8.4 Feldkommentare 207
4.8.5 Allgemeine Kommentare 208
4.8.6 Kommentare für Pakete und Übersichten 209
4.8.7 Kommentare extrahieren 209
4.9 Tipps zum Entwurf von Klassen 210
5 Vererbung 213
5.1 Klassen erweitern 214
5.1.1 Vererbungshierarchien 222
5.1.2 Polymorphismus 222
5.1.3 Dynamische Bindung 224
5.1.4 Vererbung verhindern: Finale Klassen und Methoden 226
5.1.5 Typumwandlung 228
5.1.6 Abstrakte Klassen 230
5.1.7 Geschützter Zugriff 236
5.2 Object: Die kosmische Superklasse 237
5.2.1 Die Methoden equals und toString 238
5.2.2 Generische Programmierung 246
5.2.3 Array-Listen 249
5.3 Objekt-Wrapper 257
5.4 Die Klasse Class 262
5.5 Reflection 266
5.5.1 Die Fähigkeiten einer Klasse per Reflection analysieren 267
5.5.2 Objekte zur Laufzeit per Reflection analysieren 273
5.5.3 Reflection für generischen Array-Code 279
5.5.4 Methodenzeiger 283
5.6 Entwurfstipps für die Vererbung 288
6 Schnittstellen und innere Klassen 291
6.1 Schnittstellen 292
6.1.1 Eigenschaften von Schnittstellen 298
6.1.2 Schnittstellen und abstrakte Klassen 300
6.1.3 Schnittstellen und Callbacks 301
6.2 Objekte klonen 304
6.3 Innere Klassen 311
6.3.1 Auf den Objektzustand mit einer inneren Klasse zugreifen 312
6.3.2 Spezielle Syntaxregeln für innere Klassen 317
6.3.3 Innere Klassen - nützlich, notwendig, sicher? 318
6.3.4 Lokale innere Klassen 321
6.3.5 Statische innere Klassen 327
6.4 Proxies 330
6.4.1 Eigenschaften von Proxy-Klassen 336
7 Grafikprogrammierung 339
7.1 Einführung 340
7.2 Einen Rahmen erzeugen 345
7.3 Rahmen positionieren 349
7.4 Informationen auf einer Grundfläche anzeigen 354
7.5 2D-Figuren 361
7.6 Farben 371
7.6.1 Figuren füllen 375
7.7 Text und Schriften 377
7.8 Bilder 389
8 Ereignisbehandlung 397
8.1 Grundlagen der Ereignisbehandlung 398
8.1.1 Beispiel: Einen Schaltflächenklick behandeln 401
8.1.2 Ereignisempfänger auswählen 408
8.1.3 Beispiel: Erscheinungsbild ändern 413
8.1.4 Beispiel: Fensterereignisse abfangen 416
8.2 Die AWT-Ereignishierarchie 419
8.3 Semantische und systemnahe Ereignisse im AWT 422
8.3.1 Zusammenfassung zur Ereignisbehandlung 423
8.4 Systemnahe Ereignistypen 426
8.4.1 Fokusereignisse 426
8.4.2 Tastaturereignisse 428
8.4.3 Ereignisse konsumieren 435
8.4.4 Mausereignisse 436
8.5 Aktionen 446
8.6 Multicasting 457
8.7 Ereigniswarteschlange 460
8.7.1 Benutzerdefinierte Ereignisse hinzufügen 462
9 Benutzeroberflächen mit Swing 473
9.1 Modell - Ansicht - Steuerung 474
9.1.1 Swing-Schaltflächen im Muster Modell - Ansicht - Steuerung 480
9.2 Eine Einführung in das Layout-Management 481
9.2.1 Rahmen-Layout 484
9.2.2 Grundflächen (Panels) 486
9.3 Texteingaben 488
9.3.1 Textfelder 489
9.3.2 Eingaben auf Gültigkeit prüfen 496
9.3.3 Kennwortfelder 506
9.3.4 Textbereiche 507
9.3.5 Bezeichnungsfelder und Bezeichnungskomponenten 512
9.3.6 Text markieren 514
9.3.7 Text bearbeiten 515
9.4 Auswahlelemente 517
9.4.1 Kontrollkästchen 518
9.4.2 Optionsfelder 521
9.4.3 Rahmenlinien 526
9.4.4 Kombinationsfelder 532
9.4.5 Schieberegler 536
9.5 Menüs 543
9.5.1 Menüs erstellen 544
9.5.2 Symbole in Menübefehlen 547
9.5.3 Menübefehle mit Kontrollkästchen und Optionsfeldern 549
9.5.4 Kontextmenüs 551
9.5.5 Tastenkürzel und Tastenkombinationen 553
9.5.6 Menübefehle aktivieren und deaktivieren 555
9.6 Symbolleisten 561
9.6.1 QuickInfos 564
9.7 Intelligentes Layout-Management 567
9.7.1 Raster-Layout 571
9.7.2 Box-Layout 576
9.7.3 Grid Bag-Layout 581
9.7.4 Die Parameter gridx, gridy, gridwidth und gridheight 584
9.7.5 Weight-Felder (Gewichtsfelder) 584
9.7.6 Die Parameter fill und anchor 584
9.7.7 Padding 585
9.7.8 Alternative Methode, um die Parameter gridx, gridy, gridwidth
und gridheight festzulegen 585
9.7.9 Ohne Layout-Manager arbeiten 590
9.7.10 Benutzerdefinierte Layout-Manager 590
9.7.11 Aktivierreihenfolge 595
9.8 Dialogfelder 598
9.8.1 Optionsdialogfelder 599
9.8.2 Dialogfelder erstellen 612
9.8.3 Datenaustausch 617
9.8.4 Dateidialogfelder 624
9.8.5 Farbenauswahl 638
10 Applets 647
10.1 Grundlagen zu Applets 648
10.1.1 Ein einfaches Applet 651
10.1.2 Der Applet-Viewer 653
10.1.3 Ein Applet in einem Browser ansehen 654
10.1.4 Anwendungen in Applets umwandeln 659
10.1.5 Lebenszyklus eines Applets 661
10.1.6 Grundlagen zur Sicherheit 663
10.1.7 Popup-Fenster in Applets 664
10.2 HTML-Tags und Attribute für Applets 667
10.2.1 Applet-Attribute für die Positionierung 668
10.2.2 Applet-Attribute für Code 669
10.2.3 Applet-Attribute für nicht Java-fähige Betrachter 673
10.2.4 Das OBJECT-Tag 673
10.2.5 Tags des Java Plug-Ins 674
10.2.6 Informationen an Applets übergeben 675
10.3 Multimedia 682
10.3.1 URLs 682
10.3.2 Multimedia-Dateien abrufen 683
10.4 Der Applet-Kontext 685
10.4.1 Kommunikation zwischen Applets 685
10.4.2 Objekte im Browser anzeigen 686
10.4.3 Ein Lesezeichen-Applet 688
10.4.4 Applet oder Anwendung? Beides! 691
10.5 JAR-Dateien 697
10.5.1 Das Manifest 699
10.5.2 JAR-Caching 700
10.5.3 Selbststartende JAR-Dateien 701
10.5.4 Ressourcen 702
10.5.5 Optionale Pakete 707
10.5.6 Versiegelung 708
11 Ausnahmen und Fehlersuche 709
11.1 Fehler behandeln 710
11.1.1 Klassifizierung von Ausnahmen 712
11.1.2 Ausnahmen ankündigen 713
11.1.3 Ausnahmen auslösen 716
11.1.4 Ausnahmeklassen erstellen 718
11.2 Ausnahmen auffangen 719
11.2.1 Mehrfache Ausnahmen auffangen 722
11.2.2 Ausnahmen erneut auslösen 722
11.2.3 Die Klausel finally 723
11.2.4 Ein abschließender Blick auf die Behandlung von Fehlern
und Ausnahmen durch Java 726
11.3 Tipps zur Verwendung von Ausnahmen 731
11.4 Verfahren zur Fehlersuche 734
11.4.1 Nützliche Tricks bei der Fehlersuche 735
11.4.2 Annahmen (Assertions) 740
11.4.3 Ein Konsolenfenster verwenden 742
11.4.4 AWT-Ereignisse verfolgen 744
11.4.5 Der AWT-Roboter 749
11.4.6 Profiling 753
11.4.7 Codeverwendung testen 758
11.5 Debugger 759
11.5.1 Der JDB-Debugger 759
11.5.2 Der Forte-Debugger 765
12 Streams und Dateien 769
12.1 Streams 770
12.1.1 Bytes lesen und schreiben 771
12.2 Vielfalt der Streams 773
12.2.1 Stream-Filter überlagern 774
12.2.2 Datenströme 781
12.2.3 Dateiströme mit wahlfreiem Zugriff 785
12.3 Streams für ZIP-Dateien 796
12.4 Streams einsetzen 806
12.4.1 Durch Begrenzer getrennte Ausgaben schreiben 806
12.4.2 String-Tokenizer und durch Begrenzer getrennter Text 807
12.4.3 Durch Begrenzer getrennte Daten lesen 809
12.4.4 Streams mit wahlfreiem Zugriff 813
12.5 Objektströme 822
12.5.1 Objekte mit variablem Typ speichern 822
12.5.2 Dateiformat der Objektserialisierung 827
12.5.3 Problem: Objektreferenzen speichern 831
12.5.4 Ausgabeformat für Objektreferenzen 839
12.5.5 Sicherheit 841
12.5.6 Versionsverwaltung 846
12.5.7 Serialisierung zum Klonen 849
12.6 Dateiverwaltung 851
A Java-Schlüsselwörter 859
B Die CD-ROM zum Buch 863
B.1 Inhalt der CD-ROM 864
B.1.1 Beispieldateien von Core Java installieren 864
B.1.2 Updates und Bugfixes 865
Stichwortverzeichnis 867
Einige Worte an den Leser 14
Über dieses Buch 16
Konventionen 17
1 Einführung in Java 19
1.1 Java als Programmierwerkzeug 20
1.2 Vorteile von Java 21
1.3 Schlagwörter zu Java im "White Paper" 22
1.3.1 Einfach 23
1.3.2 Objektorientiert 24
1.3.3 Verteilt 24
1.3.4 Robust 25
1.3.5 Sicher 25
1.3.6 Architekturneutral 27
1.3.7 Portabel 27
1.3.8 Interpretiert 28
1.3.9 Leistungsfähig 28
1.3.10 Multithreaded 28
1.3.11 Dynamisch 29
1.4 Java und das Internet 29
1.4.1 Applets in der Praxis 30
1.4.2 Serverseitiges Java 31
1.5 Geschichtlicher Abriss zu Java 32
1.6 Java - falsch verstanden 34
2 Die Programmierumgebung 39
2.1 Das Java Software Development Kit installieren 40
2.1.1 Ausführungspfad festlegen 41
2.1.2 Bibliotheksquellen und Dokumentation installieren 42
2.1.3 Programmbeispiele von CoreJava installieren 43
2.1.4 Die Java-Verzeichnisse 43
2.2 Entwicklungsumgebungen 44
2.3 Befehlszeilenwerkzeuge 45
2.3.1 Hinweise zur Fehlersuche 47
2.4 Eine integrierte Entwicklungsumgebung 48
2.4.1 Kompilierfehler aufspüren 50
2.5 Programme aus einem Editor heraus kompilieren und ausführen 51
2.6 Grafikanwendungen 56
2.7 Applets 59
3 Grundlegende Programmstrukturen 65
3.1 Ein einfaches Java-Programm 66
3.2 Kommentare 69
3.3 Datentypen 70
3.3.1 Ganzzahlen 71
3.3.2 Gleitkommatypen 72
3.3.3 Der Zeichentyp (char) 73
3.3.4 Der Typ boolean 74
3.4 Variablen 74
3.5 Zuweisungen und Initialisierungen 76
3.5.1 Konstanten 77
3.6 Operatoren 78
3.6.1 Operatoren zum Inkrementieren und Dekrementieren 79
3.6.2 Relationale und boolesche Operatoren 80
3.6.3 Bitoperatoren 81
3.6.4 Mathematische Funktionen und Konstanten 82
3.6.5 Umwandlungen zwischen numerischen Typen 83
3.6.6 Typumwandlungen 84
3.6.7 Klammern und Operatorvorrang 85
3.7 Strings 86
3.7.1 Verkettung 86
3.7.2 Teilstrings 87
3.7.3 Strings bearbeiten 87
3.7.4 Strings auf Gleichheit testen 89
3.7.5 Die API-Onlinedokumentation 92
3.7.6 Eingaben lesen 95
3.7.7 Ausgabe formatieren 97
3.8 Den Programmfluss steuern 101
3.8.1 Gültigkeitsbereich eines Blocks 101
3.8.2 Bedingungsanweisungen 102
3.8.3 Unbestimmte Schleifen 105
3.8.4 Bestimmte Schleifen 110
3.8.5 Mehrfachauswahl - die switch-Anweisung 113
3.8.6 Benannte Breaks 114
3.9 Große Zahlen 118
3.10 Arrays 121
3.10.1 Arrays initialisieren und anonyme Arrays 122
3.10.2 Arrays kopieren 123
3.10.3 Befehlszeilenparameter 125
3.10.4 Ein Array sortieren 126
3.10.5 Mehrdimensionale Arrays 129
3.10.6 Unregelmäßige Arrays 132
4 Objekte und Klassen 137
4.1 Einführung in die objektorientierte Programmierung 138
4.1.1 Das Vokabular der objektorientierten Programmierung 140
4.1.2 Objekte 141
4.1.3 Beziehungen zwischen Klassen 142
4.1.4 Objektorientierte und prozedurale Programmierung 144
4.2 Vorhandene Klassen verwenden 146
4.2.1 Objekte und Objektvariablen 147
4.2.2 Die Klasse GregorianCalendar der Java-Bibliothek 150
4.2.3 Mutator- und Accessormethoden 152
4.3 Eigene Klassen 158
4.3.1 Eine Klasse Employee 158
4.3.2 Mehrere Quelldateien 162
4.3.3 Die Klasse Employee im Detail 163
4.3.4 Erste Schritte mit Konstruktoren 163
4.3.5 Die Methoden der Klasse Employee 165
4.3.6 Methodenzugriff auf private Daten 169
4.3.7 Private Methoden 170
4.3.8 Private Instanzfelder 170
4.4 Statische Felder und Methoden 171
4.4.1 Statische Felder 171
4.4.2 Konstanten 172
4.4.3 Statische Methoden 173
4.4.4 Factory-Methoden 174
4.4.5 Die Methode main 175
4.5 Methodenparameter 178
4.6 Objektkonstruktion 184
4.6.1 Überladen 184
4.6.2 Standardinitialisierung von Feldern 185
4.6.3 Standardkonstruktoren 186
4.6.4 Explizite Feldinitialisierung 187
4.6.5 Parameternamen 188
4.6.6 Einen anderen Konstruktor aufrufen 189
4.6.7 Initialisierungsblöcke 189
4.6.8 Objektzerstörung und die Methode finalize 194
4.7 Pakete 195
4.7.1 Pakete im Einsatz 195
4.7.2 Eine Klasse in ein Paket hinzufügen 197
4.8 Kommentare zur Dokumentation 205
4.8.1 Kommentare einfügen 205
4.8.2 Kommentare für Klassen 206
4.8.3 Kommentare für Methoden 207
4.8.4 Feldkommentare 207
4.8.5 Allgemeine Kommentare 208
4.8.6 Kommentare für Pakete und Übersichten 209
4.8.7 Kommentare extrahieren 209
4.9 Tipps zum Entwurf von Klassen 210
5 Vererbung 213
5.1 Klassen erweitern 214
5.1.1 Vererbungshierarchien 222
5.1.2 Polymorphismus 222
5.1.3 Dynamische Bindung 224
5.1.4 Vererbung verhindern: Finale Klassen und Methoden 226
5.1.5 Typumwandlung 228
5.1.6 Abstrakte Klassen 230
5.1.7 Geschützter Zugriff 236
5.2 Object: Die kosmische Superklasse 237
5.2.1 Die Methoden equals und toString 238
5.2.2 Generische Programmierung 246
5.2.3 Array-Listen 249
5.3 Objekt-Wrapper 257
5.4 Die Klasse Class 262
5.5 Reflection 266
5.5.1 Die Fähigkeiten einer Klasse per Reflection analysieren 267
5.5.2 Objekte zur Laufzeit per Reflection analysieren 273
5.5.3 Reflection für generischen Array-Code 279
5.5.4 Methodenzeiger 283
5.6 Entwurfstipps für die Vererbung 288
6 Schnittstellen und innere Klassen 291
6.1 Schnittstellen 292
6.1.1 Eigenschaften von Schnittstellen 298
6.1.2 Schnittstellen und abstrakte Klassen 300
6.1.3 Schnittstellen und Callbacks 301
6.2 Objekte klonen 304
6.3 Innere Klassen 311
6.3.1 Auf den Objektzustand mit einer inneren Klasse zugreifen 312
6.3.2 Spezielle Syntaxregeln für innere Klassen 317
6.3.3 Innere Klassen - nützlich, notwendig, sicher? 318
6.3.4 Lokale innere Klassen 321
6.3.5 Statische innere Klassen 327
6.4 Proxies 330
6.4.1 Eigenschaften von Proxy-Klassen 336
7 Grafikprogrammierung 339
7.1 Einführung 340
7.2 Einen Rahmen erzeugen 345
7.3 Rahmen positionieren 349
7.4 Informationen auf einer Grundfläche anzeigen 354
7.5 2D-Figuren 361
7.6 Farben 371
7.6.1 Figuren füllen 375
7.7 Text und Schriften 377
7.8 Bilder 389
8 Ereignisbehandlung 397
8.1 Grundlagen der Ereignisbehandlung 398
8.1.1 Beispiel: Einen Schaltflächenklick behandeln 401
8.1.2 Ereignisempfänger auswählen 408
8.1.3 Beispiel: Erscheinungsbild ändern 413
8.1.4 Beispiel: Fensterereignisse abfangen 416
8.2 Die AWT-Ereignishierarchie 419
8.3 Semantische und systemnahe Ereignisse im AWT 422
8.3.1 Zusammenfassung zur Ereignisbehandlung 423
8.4 Systemnahe Ereignistypen 426
8.4.1 Fokusereignisse 426
8.4.2 Tastaturereignisse 428
8.4.3 Ereignisse konsumieren 435
8.4.4 Mausereignisse 436
8.5 Aktionen 446
8.6 Multicasting 457
8.7 Ereigniswarteschlange 460
8.7.1 Benutzerdefinierte Ereignisse hinzufügen 462
9 Benutzeroberflächen mit Swing 473
9.1 Modell - Ansicht - Steuerung 474
9.1.1 Swing-Schaltflächen im Muster Modell - Ansicht - Steuerung 480
9.2 Eine Einführung in das Layout-Management 481
9.2.1 Rahmen-Layout 484
9.2.2 Grundflächen (Panels) 486
9.3 Texteingaben 488
9.3.1 Textfelder 489
9.3.2 Eingaben auf Gültigkeit prüfen 496
9.3.3 Kennwortfelder 506
9.3.4 Textbereiche 507
9.3.5 Bezeichnungsfelder und Bezeichnungskomponenten 512
9.3.6 Text markieren 514
9.3.7 Text bearbeiten 515
9.4 Auswahlelemente 517
9.4.1 Kontrollkästchen 518
9.4.2 Optionsfelder 521
9.4.3 Rahmenlinien 526
9.4.4 Kombinationsfelder 532
9.4.5 Schieberegler 536
9.5 Menüs 543
9.5.1 Menüs erstellen 544
9.5.2 Symbole in Menübefehlen 547
9.5.3 Menübefehle mit Kontrollkästchen und Optionsfeldern 549
9.5.4 Kontextmenüs 551
9.5.5 Tastenkürzel und Tastenkombinationen 553
9.5.6 Menübefehle aktivieren und deaktivieren 555
9.6 Symbolleisten 561
9.6.1 QuickInfos 564
9.7 Intelligentes Layout-Management 567
9.7.1 Raster-Layout 571
9.7.2 Box-Layout 576
9.7.3 Grid Bag-Layout 581
9.7.4 Die Parameter gridx, gridy, gridwidth und gridheight 584
9.7.5 Weight-Felder (Gewichtsfelder) 584
9.7.6 Die Parameter fill und anchor 584
9.7.7 Padding 585
9.7.8 Alternative Methode, um die Parameter gridx, gridy, gridwidth
und gridheight festzulegen 585
9.7.9 Ohne Layout-Manager arbeiten 590
9.7.10 Benutzerdefinierte Layout-Manager 590
9.7.11 Aktivierreihenfolge 595
9.8 Dialogfelder 598
9.8.1 Optionsdialogfelder 599
9.8.2 Dialogfelder erstellen 612
9.8.3 Datenaustausch 617
9.8.4 Dateidialogfelder 624
9.8.5 Farbenauswahl 638
10 Applets 647
10.1 Grundlagen zu Applets 648
10.1.1 Ein einfaches Applet 651
10.1.2 Der Applet-Viewer 653
10.1.3 Ein Applet in einem Browser ansehen 654
10.1.4 Anwendungen in Applets umwandeln 659
10.1.5 Lebenszyklus eines Applets 661
10.1.6 Grundlagen zur Sicherheit 663
10.1.7 Popup-Fenster in Applets 664
10.2 HTML-Tags und Attribute für Applets 667
10.2.1 Applet-Attribute für die Positionierung 668
10.2.2 Applet-Attribute für Code 669
10.2.3 Applet-Attribute für nicht Java-fähige Betrachter 673
10.2.4 Das OBJECT-Tag 673
10.2.5 Tags des Java Plug-Ins 674
10.2.6 Informationen an Applets übergeben 675
10.3 Multimedia 682
10.3.1 URLs 682
10.3.2 Multimedia-Dateien abrufen 683
10.4 Der Applet-Kontext 685
10.4.1 Kommunikation zwischen Applets 685
10.4.2 Objekte im Browser anzeigen 686
10.4.3 Ein Lesezeichen-Applet 688
10.4.4 Applet oder Anwendung? Beides! 691
10.5 JAR-Dateien 697
10.5.1 Das Manifest 699
10.5.2 JAR-Caching 700
10.5.3 Selbststartende JAR-Dateien 701
10.5.4 Ressourcen 702
10.5.5 Optionale Pakete 707
10.5.6 Versiegelung 708
11 Ausnahmen und Fehlersuche 709
11.1 Fehler behandeln 710
11.1.1 Klassifizierung von Ausnahmen 712
11.1.2 Ausnahmen ankündigen 713
11.1.3 Ausnahmen auslösen 716
11.1.4 Ausnahmeklassen erstellen 718
11.2 Ausnahmen auffangen 719
11.2.1 Mehrfache Ausnahmen auffangen 722
11.2.2 Ausnahmen erneut auslösen 722
11.2.3 Die Klausel finally 723
11.2.4 Ein abschließender Blick auf die Behandlung von Fehlern
und Ausnahmen durch Java 726
11.3 Tipps zur Verwendung von Ausnahmen 731
11.4 Verfahren zur Fehlersuche 734
11.4.1 Nützliche Tricks bei der Fehlersuche 735
11.4.2 Annahmen (Assertions) 740
11.4.3 Ein Konsolenfenster verwenden 742
11.4.4 AWT-Ereignisse verfolgen 744
11.4.5 Der AWT-Roboter 749
11.4.6 Profiling 753
11.4.7 Codeverwendung testen 758
11.5 Debugger 759
11.5.1 Der JDB-Debugger 759
11.5.2 Der Forte-Debugger 765
12 Streams und Dateien 769
12.1 Streams 770
12.1.1 Bytes lesen und schreiben 771
12.2 Vielfalt der Streams 773
12.2.1 Stream-Filter überlagern 774
12.2.2 Datenströme 781
12.2.3 Dateiströme mit wahlfreiem Zugriff 785
12.3 Streams für ZIP-Dateien 796
12.4 Streams einsetzen 806
12.4.1 Durch Begrenzer getrennte Ausgaben schreiben 806
12.4.2 String-Tokenizer und durch Begrenzer getrennter Text 807
12.4.3 Durch Begrenzer getrennte Daten lesen 809
12.4.4 Streams mit wahlfreiem Zugriff 813
12.5 Objektströme 822
12.5.1 Objekte mit variablem Typ speichern 822
12.5.2 Dateiformat der Objektserialisierung 827
12.5.3 Problem: Objektreferenzen speichern 831
12.5.4 Ausgabeformat für Objektreferenzen 839
12.5.5 Sicherheit 841
12.5.6 Versionsverwaltung 846
12.5.7 Serialisierung zum Klonen 849
12.6 Dateiverwaltung 851
A Java-Schlüsselwörter 859
B Die CD-ROM zum Buch 863
B.1 Inhalt der CD-ROM 864
B.1.1 Beispieldateien von Core Java installieren 864
B.1.2 Updates und Bugfixes 865
Stichwortverzeichnis 867
Vorwort 13
Einige Worte an den Leser 14
Über dieses Buch 16
Konventionen 17
1 Einführung in Java 19
1.1 Java als Programmierwerkzeug 20
1.2 Vorteile von Java 21
1.3 Schlagwörter zu Java im "White Paper" 22
1.3.1 Einfach 23
1.3.2 Objektorientiert 24
1.3.3 Verteilt 24
1.3.4 Robust 25
1.3.5 Sicher 25
1.3.6 Architekturneutral 27
1.3.7 Portabel 27
1.3.8 Interpretiert 28
1.3.9 Leistungsfähig 28
1.3.10 Multithreaded 28
1.3.11 Dynamisch 29
1.4 Java und das Internet 29
1.4.1 Applets in der Praxis 30
1.4.2 Serverseitiges Java 31
1.5 Geschichtlicher Abriss zu Java 32
1.6 Java - falsch verstanden 34
2 Die Programmierumgebung 39
2.1 Das Java Software Development Kit installieren 40
2.1.1 Ausführungspfad festlegen 41
2.1.2 Bibliotheksquellen und Dokumentation installieren 42
2.1.3 Programmbeispiele von CoreJava installieren 43
2.1.4 Die Java-Verzeichnisse 43
2.2 Entwicklungsumgebungen 44
2.3 Befehlszeilenwerkzeuge 45
2.3.1 Hinweise zur Fehlersuche 47
2.4 Eine integrierte Entwicklungsumgebung 48
2.4.1 Kompilierfehler aufspüren 50
2.5 Programme aus einem Editor heraus kompilieren und ausführen 51
2.6 Grafikanwendungen 56
2.7 Applets 59
3 Grundlegende Programmstrukturen 65
3.1 Ein einfaches Java-Programm 66
3.2 Kommentare 69
3.3 Datentypen 70
3.3.1 Ganzzahlen 71
3.3.2 Gleitkommatypen 72
3.3.3 Der Zeichentyp (char) 73
3.3.4 Der Typ boolean 74
3.4 Variablen 74
3.5 Zuweisungen und Initialisierungen 76
3.5.1 Konstanten 77
3.6 Operatoren 78
3.6.1 Operatoren zum Inkrementieren und Dekrementieren 79
3.6.2 Relationale und boolesche Operatoren 80
3.6.3 Bitoperatoren 81
3.6.4 Mathematische Funktionen und Konstanten 82
3.6.5 Umwandlungen zwischen numerischen Typen 83
3.6.6 Typumwandlungen 84
3.6.7 Klammern und Operatorvorrang 85
3.7 Strings 86
3.7.1 Verkettung 86
3.7.2 Teilstrings 87
3.7.3 Strings bearbeiten 87
3.7.4 Strings auf Gleichheit testen 89
3.7.5 Die API-Onlinedokumentation 92
3.7.6 Eingaben lesen 95
3.7.7 Ausgabe formatieren 97
3.8 Den Programmfluss steuern 101
3.8.1 Gültigkeitsbereich eines Blocks 101
3.8.2 Bedingungsanweisungen 102
3.8.3 Unbestimmte Schleifen 105
3.8.4 Bestimmte Schleifen 110
3.8.5 Mehrfachauswahl - die switch-Anweisung 113
3.8.6 Benannte Breaks 114
3.9 Große Zahlen 118
3.10 Arrays 121
3.10.1 Arrays initialisieren und anonyme Arrays 122
3.10.2 Arrays kopieren 123
3.10.3 Befehlszeilenparameter 125
3.10.4 Ein Array sortieren 126
3.10.5 Mehrdimensionale Arrays 129
3.10.6 Unregelmäßige Arrays 132
4 Objekte und Klassen 137
4.1 Einführung in die objektorientierte Programmierung 138
4.1.1 Das Vokabular der objektorientierten Programmierung 140
4.1.2 Objekte 141
4.1.3 Beziehungen zwischen Klassen 142
4.1.4 Objektorientierte und prozedurale Programmierung 144
4.2 Vorhandene Klassen verwenden 146
4.2.1 Objekte und Objektvariablen 147
4.2.2 Die Klasse GregorianCalendar der Java-Bibliothek 150
4.2.3 Mutator- und Accessormethoden 152
4.3 Eigene Klassen 158
4.3.1 Eine Klasse Employee 158
4.3.2 Mehrere Quelldateien 162
4.3.3 Die Klasse Employee im Detail 163
4.3.4 Erste Schritte mit Konstruktoren 163
4.3.5 Die Methoden der Klasse Employee 165
4.3.6 Methodenzugriff auf private Daten 169
4.3.7 Private Methoden 170
4.3.8 Private Instanzfelder 170
4.4 Statische Felder und Methoden 171
4.4.1 Statische Felder 171
4.4.2 Konstanten 172
4.4.3 Statische Methoden 173
4.4.4 Factory-Methoden 174
4.4.5 Die Methode main 175
4.5 Methodenparameter 178
4.6 Objektkonstruktion 184
4.6.1 Überladen 184
4.6.2 Standardinitialisierung von Feldern 185
4.6.3 Standardkonstruktoren 186
4.6.4 Explizite Feldinitialisierung 187
4.6.5 Parameternamen 188
4.6.6 Einen anderen Konstruktor aufrufen 189
4.6.7 Initialisierungsblöcke 189
4.6.8 Objektzerstörung und die Methode finalize 194
4.7 Pakete 195
4.7.1 Pakete im Einsatz 195
4.7.2 Eine Klasse in ein Paket hinzufügen 197
4.8 Kommentare zur Dokumentation 205
4.8.1 Kommentare einfügen 205
4.8.2 Kommentare für Klassen 206
4.8.3 Kommentare für Methoden 207
4.8.4 Feldkommentare 207
4.8.5 Allgemeine Kommentare 208
4.8.6 Kommentare für Pakete und Übersichten 209
4.8.7 Kommentare extrahieren 209
4.9 Tipps zum Entwurf von Klassen 210
5 Vererbung 213
5.1 Klassen erweitern 214
5.1.1 Vererbungshierarchien 222
5.1.2 Polymorphismus 222
5.1.3 Dynamische Bindung 224
5.1.4 Vererbung verhindern: Finale Klassen und Methoden 226
5.1.5 Typumwandlung 228
5.1.6 Abstrakte Klassen 230
5.1.7 Geschützter Zugriff 236
5.2 Object: Die kosmische Superklasse 237
5.2.1 Die Methoden equals und toString 238
5.2.2 Generische Programmierung 246
5.2.3 Array-Listen 249
5.3 Objekt-Wrapper 257
5.4 Die Klasse Class 262
5.5 Reflection 266
5.5.1 Die Fähigkeiten einer Klasse per Reflection analysieren 267
5.5.2 Objekte zur Laufzeit per Reflection analysieren 273
5.5.3 Reflection für generischen Array-Code 279
5.5.4 Methodenzeiger 283
5.6 Entwurfstipps für die Vererbung 288
6 Schnittstellen und innere Klassen 291
6.1 Schnittstellen 292
6.1.1 Eigenschaften von Schnittstellen 298
6.1.2 Schnittstellen und abstrakte Klassen 300
6.1.3 Schnittstellen und Callbacks 301
6.2 Objekte klonen 304
6.3 Innere Klassen 311
6.3.1 Auf den Objektzustand mit einer inneren Klasse zugreifen 312
6.3.2 Spezielle Syntaxregeln für innere Klassen 317
6.3.3 Innere Klassen - nützlich, notwendig, sicher? 318
6.3.4 Lokale innere Klassen 321
6.3.5 Statische innere Klassen 327
6.4 Proxies 330
6.4.1 Eigenschaften von Proxy-Klassen 336
7 Grafikprogrammierung 339
7.1 Einführung 340
7.2 Einen Rahmen erzeugen 345
7.3 Rahmen positionieren 349
7.4 Informationen auf einer Grundfläche anzeigen 354
7.5 2D-Figuren 361
7.6 Farben 371
7.6.1 Figuren füllen 375
7.7 Text und Schriften 377
7.8 Bilder 389
8 Ereignisbehandlung 397
8.1 Grundlagen der Ereignisbehandlung 398
8.1.1 Beispiel: Einen Schaltflächenklick behandeln 401
8.1.2 Ereignisempfänger auswählen 408
8.1.3 Beispiel: Erscheinungsbild ändern 413
8.1.4 Beispiel: Fensterereignisse abfangen 416
8.2 Die AWT-Ereignishierarchie 419
8.3 Semantische und systemnahe Ereignisse im AWT 422
8.3.1 Zusammenfassung zur Ereignisbehandlung 423
8.4 Systemnahe Ereignistypen 426
8.4.1 Fokusereignisse 426
8.4.2 Tastaturereignisse 428
8.4.3 Ereignisse konsumieren 435
8.4.4 Mausereignisse 436
8.5 Aktionen 446
8.6 Multicasting 457
8.7 Ereigniswarteschlange 460
8.7.1 Benutzerdefinierte Ereignisse hinzufügen 462
9 Benutzeroberflächen mit Swing 473
9.1 Modell - Ansicht - Steuerung 474
9.1.1 Swing-Schaltflächen im Muster Modell - Ansicht - Steuerung 480
9.2 Eine Einführung in das Layout-Management 481
9.2.1 Rahmen-Layout 484
9.2.2 Grundflächen (Panels) 486
9.3 Texteingaben 488
9.3.1 Textfelder 489
9.3.2 Eingaben auf Gültigkeit prüfen 496
9.3.3 Kennwortfelder 506
9.3.4 Textbereiche 507
9.3.5 Bezeichnungsfelder und Bezeichnungskomponenten 512
9.3.6 Text markieren 514
9.3.7 Text bearbeiten 515
9.4 Auswahlelemente 517
9.4.1 Kontrollkästchen 518
9.4.2 Optionsfelder 521
9.4.3 Rahmenlinien 526
9.4.4 Kombinationsfelder 532
9.4.5 Schieberegler 536
9.5 Menüs 543
9.5.1 Menüs erstellen 544
9.5.2 Symbole in Menübefehlen 547
9.5.3 Menübefehle mit Kontrollkästchen und Optionsfeldern 549
9.5.4 Kontextmenüs 551
9.5.5 Tastenkürzel und Tastenkombinationen 553
9.5.6 Menübefehle aktivieren und deaktivieren 555
9.6 Symbolleisten 561
9.6.1 QuickInfos 564
9.7 Intelligentes Layout-Management 567
9.7.1 Raster-Layout 571
9.7.2 Box-Layout 576
9.7.3 Grid Bag-Layout 581
9.7.4 Die Parameter gridx, gridy, gridwidth und gridheight 584
9.7.5 Weight-Felder (Gewichtsfelder) 584
9.7.6 Die Parameter fill und anchor 584
9.7.7 Padding 585
9.7.8 Alternative Methode, um die Parameter gridx, gridy, gridwidth
und gridheight festzulegen 585
9.7.9 Ohne Layout-Manager arbeiten 590
9.7.10 Benutzerdefinierte Layout-Manager 590
9.7.11 Aktivierreihenfolge 595
9.8 Dialogfelder 598
9.8.1 Optionsdialogfelder 599
9.8.2 Dialogfelder erstellen 612
9.8.3 Datenaustausch 617
9.8.4 Dateidialogfelder 624
9.8.5 Farbenauswahl 638
10 Applets 647
10.1 Grundlagen zu Applets 648
10.1.1 Ein einfaches Applet 651
10.1.2 Der Applet-Viewer 653
10.1.3 Ein Applet in einem Browser ansehen 654
10.1.4 Anwendungen in Applets umwandeln 659
10.1.5 Lebenszyklus eines Applets 661
10.1.6 Grundlagen zur Sicherheit 663
10.1.7 Popup-Fenster in Applets 664
10.2 HTML-Tags und Attribute für Applets 667
10.2.1 Applet-Attribute für die Positionierung 668
10.2.2 Applet-Attribute für Code 669
10.2.3 Applet-Attribute für nicht Java-fähige Betrachter 673
10.2.4 Das OBJECT-Tag 673
10.2.5 Tags des Java Plug-Ins 674
10.2.6 Informationen an Applets übergeben 675
10.3 Multimedia 682
10.3.1 URLs 682
10.3.2 Multimedia-Dateien abrufen 683
10.4 Der Applet-Kontext 685
10.4.1 Kommunikation zwischen Applets 685
10.4.2 Objekte im Browser anzeigen 686
10.4.3 Ein Lesezeichen-Applet 688
10.4.4 Applet oder Anwendung? Beides! 691
10.5 JAR-Dateien 697
10.5.1 Das Manifest 699
10.5.2 JAR-Caching 700
10.5.3 Selbststartende JAR-Dateien 701
10.5.4 Ressourcen 702
10.5.5 Optionale Pakete 707
10.5.6 Versiegelung 708
11 Ausnahmen und Fehlersuche 709
11.1 Fehler behandeln 710
11.1.1 Klassifizierung von Ausnahmen 712
11.1.2 Ausnahmen ankündigen 713
11.1.3 Ausnahmen auslösen 716
11.1.4 Ausnahmeklassen erstellen 718
11.2 Ausnahmen auffangen 719
11.2.1 Mehrfache Ausnahmen auffangen 722
11.2.2 Ausnahmen erneut auslösen 722
11.2.3 Die Klausel finally 723
11.2.4 Ein abschließender Blick auf die Behandlung von Fehlern
und Ausnahmen durch Java 726
11.3 Tipps zur Verwendung von Ausnahmen 731
11.4 Verfahren zur Fehlersuche 734
11.4.1 Nützliche Tricks bei der Fehlersuche 735
11.4.2 Annahmen (Assertions) 740
11.4.3 Ein Konsolenfenster verwenden 742
11.4.4 AWT-Ereignisse verfolgen 744
11.4.5 Der AWT-Roboter 749
11.4.6 Profiling 753
11.4.7 Codeverwendung testen 758
11.5 Debugger 759
11.5.1 Der JDB-Debugger 759
11.5.2 Der Forte-Debugger 765
12 Streams und Dateien 769
12.1 Streams 770
12.1.1 Bytes lesen und schreiben 771
12.2 Vielfalt der Streams 773
12.2.1 Stream-Filter überlagern 774
12.2.2 Datenströme 781
12.2.3 Dateiströme mit wahlfreiem Zugriff 785
12.3 Streams für ZIP-Dateien 796
12.4 Streams einsetzen 806
12.4.1 Durch Begrenzer getrennte Ausgaben schreiben 806
12.4.2 String-Tokenizer und durch Begrenzer getrennter Text 807
12.4.3 Durch Begrenzer getrennte Daten lesen 809
12.4.4 Streams mit wahlfreiem Zugriff 813
12.5 Objektströme 822
12.5.1 Objekte mit variablem Typ speichern 822
12.5.2 Dateiformat der Objektserialisierung 827
12.5.3 Problem: Objektreferenzen speichern 831
12.5.4 Ausgabeformat für Objektreferenzen 839
12.5.5 Sicherheit 841
12.5.6 Versionsverwaltung 846
12.5.7 Serialisierung zum Klonen 849
12.6 Dateiverwaltung 851
A Java-Schlüsselwörter 859
B Die CD-ROM zum Buch 863
B.1 Inhalt der CD-ROM 864
B.1.1 Beispieldateien von Core Java installieren 864
B.1.2 Updates und Bugfixes 865
Stichwortverzeichnis 867
Einige Worte an den Leser 14
Über dieses Buch 16
Konventionen 17
1 Einführung in Java 19
1.1 Java als Programmierwerkzeug 20
1.2 Vorteile von Java 21
1.3 Schlagwörter zu Java im "White Paper" 22
1.3.1 Einfach 23
1.3.2 Objektorientiert 24
1.3.3 Verteilt 24
1.3.4 Robust 25
1.3.5 Sicher 25
1.3.6 Architekturneutral 27
1.3.7 Portabel 27
1.3.8 Interpretiert 28
1.3.9 Leistungsfähig 28
1.3.10 Multithreaded 28
1.3.11 Dynamisch 29
1.4 Java und das Internet 29
1.4.1 Applets in der Praxis 30
1.4.2 Serverseitiges Java 31
1.5 Geschichtlicher Abriss zu Java 32
1.6 Java - falsch verstanden 34
2 Die Programmierumgebung 39
2.1 Das Java Software Development Kit installieren 40
2.1.1 Ausführungspfad festlegen 41
2.1.2 Bibliotheksquellen und Dokumentation installieren 42
2.1.3 Programmbeispiele von CoreJava installieren 43
2.1.4 Die Java-Verzeichnisse 43
2.2 Entwicklungsumgebungen 44
2.3 Befehlszeilenwerkzeuge 45
2.3.1 Hinweise zur Fehlersuche 47
2.4 Eine integrierte Entwicklungsumgebung 48
2.4.1 Kompilierfehler aufspüren 50
2.5 Programme aus einem Editor heraus kompilieren und ausführen 51
2.6 Grafikanwendungen 56
2.7 Applets 59
3 Grundlegende Programmstrukturen 65
3.1 Ein einfaches Java-Programm 66
3.2 Kommentare 69
3.3 Datentypen 70
3.3.1 Ganzzahlen 71
3.3.2 Gleitkommatypen 72
3.3.3 Der Zeichentyp (char) 73
3.3.4 Der Typ boolean 74
3.4 Variablen 74
3.5 Zuweisungen und Initialisierungen 76
3.5.1 Konstanten 77
3.6 Operatoren 78
3.6.1 Operatoren zum Inkrementieren und Dekrementieren 79
3.6.2 Relationale und boolesche Operatoren 80
3.6.3 Bitoperatoren 81
3.6.4 Mathematische Funktionen und Konstanten 82
3.6.5 Umwandlungen zwischen numerischen Typen 83
3.6.6 Typumwandlungen 84
3.6.7 Klammern und Operatorvorrang 85
3.7 Strings 86
3.7.1 Verkettung 86
3.7.2 Teilstrings 87
3.7.3 Strings bearbeiten 87
3.7.4 Strings auf Gleichheit testen 89
3.7.5 Die API-Onlinedokumentation 92
3.7.6 Eingaben lesen 95
3.7.7 Ausgabe formatieren 97
3.8 Den Programmfluss steuern 101
3.8.1 Gültigkeitsbereich eines Blocks 101
3.8.2 Bedingungsanweisungen 102
3.8.3 Unbestimmte Schleifen 105
3.8.4 Bestimmte Schleifen 110
3.8.5 Mehrfachauswahl - die switch-Anweisung 113
3.8.6 Benannte Breaks 114
3.9 Große Zahlen 118
3.10 Arrays 121
3.10.1 Arrays initialisieren und anonyme Arrays 122
3.10.2 Arrays kopieren 123
3.10.3 Befehlszeilenparameter 125
3.10.4 Ein Array sortieren 126
3.10.5 Mehrdimensionale Arrays 129
3.10.6 Unregelmäßige Arrays 132
4 Objekte und Klassen 137
4.1 Einführung in die objektorientierte Programmierung 138
4.1.1 Das Vokabular der objektorientierten Programmierung 140
4.1.2 Objekte 141
4.1.3 Beziehungen zwischen Klassen 142
4.1.4 Objektorientierte und prozedurale Programmierung 144
4.2 Vorhandene Klassen verwenden 146
4.2.1 Objekte und Objektvariablen 147
4.2.2 Die Klasse GregorianCalendar der Java-Bibliothek 150
4.2.3 Mutator- und Accessormethoden 152
4.3 Eigene Klassen 158
4.3.1 Eine Klasse Employee 158
4.3.2 Mehrere Quelldateien 162
4.3.3 Die Klasse Employee im Detail 163
4.3.4 Erste Schritte mit Konstruktoren 163
4.3.5 Die Methoden der Klasse Employee 165
4.3.6 Methodenzugriff auf private Daten 169
4.3.7 Private Methoden 170
4.3.8 Private Instanzfelder 170
4.4 Statische Felder und Methoden 171
4.4.1 Statische Felder 171
4.4.2 Konstanten 172
4.4.3 Statische Methoden 173
4.4.4 Factory-Methoden 174
4.4.5 Die Methode main 175
4.5 Methodenparameter 178
4.6 Objektkonstruktion 184
4.6.1 Überladen 184
4.6.2 Standardinitialisierung von Feldern 185
4.6.3 Standardkonstruktoren 186
4.6.4 Explizite Feldinitialisierung 187
4.6.5 Parameternamen 188
4.6.6 Einen anderen Konstruktor aufrufen 189
4.6.7 Initialisierungsblöcke 189
4.6.8 Objektzerstörung und die Methode finalize 194
4.7 Pakete 195
4.7.1 Pakete im Einsatz 195
4.7.2 Eine Klasse in ein Paket hinzufügen 197
4.8 Kommentare zur Dokumentation 205
4.8.1 Kommentare einfügen 205
4.8.2 Kommentare für Klassen 206
4.8.3 Kommentare für Methoden 207
4.8.4 Feldkommentare 207
4.8.5 Allgemeine Kommentare 208
4.8.6 Kommentare für Pakete und Übersichten 209
4.8.7 Kommentare extrahieren 209
4.9 Tipps zum Entwurf von Klassen 210
5 Vererbung 213
5.1 Klassen erweitern 214
5.1.1 Vererbungshierarchien 222
5.1.2 Polymorphismus 222
5.1.3 Dynamische Bindung 224
5.1.4 Vererbung verhindern: Finale Klassen und Methoden 226
5.1.5 Typumwandlung 228
5.1.6 Abstrakte Klassen 230
5.1.7 Geschützter Zugriff 236
5.2 Object: Die kosmische Superklasse 237
5.2.1 Die Methoden equals und toString 238
5.2.2 Generische Programmierung 246
5.2.3 Array-Listen 249
5.3 Objekt-Wrapper 257
5.4 Die Klasse Class 262
5.5 Reflection 266
5.5.1 Die Fähigkeiten einer Klasse per Reflection analysieren 267
5.5.2 Objekte zur Laufzeit per Reflection analysieren 273
5.5.3 Reflection für generischen Array-Code 279
5.5.4 Methodenzeiger 283
5.6 Entwurfstipps für die Vererbung 288
6 Schnittstellen und innere Klassen 291
6.1 Schnittstellen 292
6.1.1 Eigenschaften von Schnittstellen 298
6.1.2 Schnittstellen und abstrakte Klassen 300
6.1.3 Schnittstellen und Callbacks 301
6.2 Objekte klonen 304
6.3 Innere Klassen 311
6.3.1 Auf den Objektzustand mit einer inneren Klasse zugreifen 312
6.3.2 Spezielle Syntaxregeln für innere Klassen 317
6.3.3 Innere Klassen - nützlich, notwendig, sicher? 318
6.3.4 Lokale innere Klassen 321
6.3.5 Statische innere Klassen 327
6.4 Proxies 330
6.4.1 Eigenschaften von Proxy-Klassen 336
7 Grafikprogrammierung 339
7.1 Einführung 340
7.2 Einen Rahmen erzeugen 345
7.3 Rahmen positionieren 349
7.4 Informationen auf einer Grundfläche anzeigen 354
7.5 2D-Figuren 361
7.6 Farben 371
7.6.1 Figuren füllen 375
7.7 Text und Schriften 377
7.8 Bilder 389
8 Ereignisbehandlung 397
8.1 Grundlagen der Ereignisbehandlung 398
8.1.1 Beispiel: Einen Schaltflächenklick behandeln 401
8.1.2 Ereignisempfänger auswählen 408
8.1.3 Beispiel: Erscheinungsbild ändern 413
8.1.4 Beispiel: Fensterereignisse abfangen 416
8.2 Die AWT-Ereignishierarchie 419
8.3 Semantische und systemnahe Ereignisse im AWT 422
8.3.1 Zusammenfassung zur Ereignisbehandlung 423
8.4 Systemnahe Ereignistypen 426
8.4.1 Fokusereignisse 426
8.4.2 Tastaturereignisse 428
8.4.3 Ereignisse konsumieren 435
8.4.4 Mausereignisse 436
8.5 Aktionen 446
8.6 Multicasting 457
8.7 Ereigniswarteschlange 460
8.7.1 Benutzerdefinierte Ereignisse hinzufügen 462
9 Benutzeroberflächen mit Swing 473
9.1 Modell - Ansicht - Steuerung 474
9.1.1 Swing-Schaltflächen im Muster Modell - Ansicht - Steuerung 480
9.2 Eine Einführung in das Layout-Management 481
9.2.1 Rahmen-Layout 484
9.2.2 Grundflächen (Panels) 486
9.3 Texteingaben 488
9.3.1 Textfelder 489
9.3.2 Eingaben auf Gültigkeit prüfen 496
9.3.3 Kennwortfelder 506
9.3.4 Textbereiche 507
9.3.5 Bezeichnungsfelder und Bezeichnungskomponenten 512
9.3.6 Text markieren 514
9.3.7 Text bearbeiten 515
9.4 Auswahlelemente 517
9.4.1 Kontrollkästchen 518
9.4.2 Optionsfelder 521
9.4.3 Rahmenlinien 526
9.4.4 Kombinationsfelder 532
9.4.5 Schieberegler 536
9.5 Menüs 543
9.5.1 Menüs erstellen 544
9.5.2 Symbole in Menübefehlen 547
9.5.3 Menübefehle mit Kontrollkästchen und Optionsfeldern 549
9.5.4 Kontextmenüs 551
9.5.5 Tastenkürzel und Tastenkombinationen 553
9.5.6 Menübefehle aktivieren und deaktivieren 555
9.6 Symbolleisten 561
9.6.1 QuickInfos 564
9.7 Intelligentes Layout-Management 567
9.7.1 Raster-Layout 571
9.7.2 Box-Layout 576
9.7.3 Grid Bag-Layout 581
9.7.4 Die Parameter gridx, gridy, gridwidth und gridheight 584
9.7.5 Weight-Felder (Gewichtsfelder) 584
9.7.6 Die Parameter fill und anchor 584
9.7.7 Padding 585
9.7.8 Alternative Methode, um die Parameter gridx, gridy, gridwidth
und gridheight festzulegen 585
9.7.9 Ohne Layout-Manager arbeiten 590
9.7.10 Benutzerdefinierte Layout-Manager 590
9.7.11 Aktivierreihenfolge 595
9.8 Dialogfelder 598
9.8.1 Optionsdialogfelder 599
9.8.2 Dialogfelder erstellen 612
9.8.3 Datenaustausch 617
9.8.4 Dateidialogfelder 624
9.8.5 Farbenauswahl 638
10 Applets 647
10.1 Grundlagen zu Applets 648
10.1.1 Ein einfaches Applet 651
10.1.2 Der Applet-Viewer 653
10.1.3 Ein Applet in einem Browser ansehen 654
10.1.4 Anwendungen in Applets umwandeln 659
10.1.5 Lebenszyklus eines Applets 661
10.1.6 Grundlagen zur Sicherheit 663
10.1.7 Popup-Fenster in Applets 664
10.2 HTML-Tags und Attribute für Applets 667
10.2.1 Applet-Attribute für die Positionierung 668
10.2.2 Applet-Attribute für Code 669
10.2.3 Applet-Attribute für nicht Java-fähige Betrachter 673
10.2.4 Das OBJECT-Tag 673
10.2.5 Tags des Java Plug-Ins 674
10.2.6 Informationen an Applets übergeben 675
10.3 Multimedia 682
10.3.1 URLs 682
10.3.2 Multimedia-Dateien abrufen 683
10.4 Der Applet-Kontext 685
10.4.1 Kommunikation zwischen Applets 685
10.4.2 Objekte im Browser anzeigen 686
10.4.3 Ein Lesezeichen-Applet 688
10.4.4 Applet oder Anwendung? Beides! 691
10.5 JAR-Dateien 697
10.5.1 Das Manifest 699
10.5.2 JAR-Caching 700
10.5.3 Selbststartende JAR-Dateien 701
10.5.4 Ressourcen 702
10.5.5 Optionale Pakete 707
10.5.6 Versiegelung 708
11 Ausnahmen und Fehlersuche 709
11.1 Fehler behandeln 710
11.1.1 Klassifizierung von Ausnahmen 712
11.1.2 Ausnahmen ankündigen 713
11.1.3 Ausnahmen auslösen 716
11.1.4 Ausnahmeklassen erstellen 718
11.2 Ausnahmen auffangen 719
11.2.1 Mehrfache Ausnahmen auffangen 722
11.2.2 Ausnahmen erneut auslösen 722
11.2.3 Die Klausel finally 723
11.2.4 Ein abschließender Blick auf die Behandlung von Fehlern
und Ausnahmen durch Java 726
11.3 Tipps zur Verwendung von Ausnahmen 731
11.4 Verfahren zur Fehlersuche 734
11.4.1 Nützliche Tricks bei der Fehlersuche 735
11.4.2 Annahmen (Assertions) 740
11.4.3 Ein Konsolenfenster verwenden 742
11.4.4 AWT-Ereignisse verfolgen 744
11.4.5 Der AWT-Roboter 749
11.4.6 Profiling 753
11.4.7 Codeverwendung testen 758
11.5 Debugger 759
11.5.1 Der JDB-Debugger 759
11.5.2 Der Forte-Debugger 765
12 Streams und Dateien 769
12.1 Streams 770
12.1.1 Bytes lesen und schreiben 771
12.2 Vielfalt der Streams 773
12.2.1 Stream-Filter überlagern 774
12.2.2 Datenströme 781
12.2.3 Dateiströme mit wahlfreiem Zugriff 785
12.3 Streams für ZIP-Dateien 796
12.4 Streams einsetzen 806
12.4.1 Durch Begrenzer getrennte Ausgaben schreiben 806
12.4.2 String-Tokenizer und durch Begrenzer getrennter Text 807
12.4.3 Durch Begrenzer getrennte Daten lesen 809
12.4.4 Streams mit wahlfreiem Zugriff 813
12.5 Objektströme 822
12.5.1 Objekte mit variablem Typ speichern 822
12.5.2 Dateiformat der Objektserialisierung 827
12.5.3 Problem: Objektreferenzen speichern 831
12.5.4 Ausgabeformat für Objektreferenzen 839
12.5.5 Sicherheit 841
12.5.6 Versionsverwaltung 846
12.5.7 Serialisierung zum Klonen 849
12.6 Dateiverwaltung 851
A Java-Schlüsselwörter 859
B Die CD-ROM zum Buch 863
B.1 Inhalt der CD-ROM 864
B.1.1 Beispieldateien von Core Java installieren 864
B.1.2 Updates und Bugfixes 865
Stichwortverzeichnis 867