Dietmar Ratz, Jens Scheffler, Detlef Seese, Jan Wiesenberger
Grundkurs Programmieren in Java
Vorwort
19
1 Einleitung
21
1.1 Java – mehr als nur kalter Kaffee?
21
1.2 Java für Anfänger – das Konzept dieses Buches
22
1.3 Zusatzmaterial und Kontakt zu den Autoren
24
1.4 Verwendete Schreibweisen
24
2 Einige Grundbegriffe aus der Welt des Programmierens
25
2.1 Computer, Software, Informatik und das Internet
25
2.2 Was heißt Programmieren?
28
I Einstieg in das Programmieren in Java
31
3 Aller Anfang ist schwer
33
3.1 Mein erstes Programm
33
3.2 Formeln, Ausdrücke und Anweisungen
34
3.3 Zahlenbeispiele
35
3.4 Verwendung von Variablen
36
3.5 „Auf den Schirm!“
36
3.6 Das Programmgerüst
37
3.7 Eingeben, übersetzen und ausführen
39
3.8 Übungsaufgaben
40
4 Grundlagen der Programmierung in Java
41
4.1 Grundelemente eines Java-Programms
41
4.1.1 Kommentare
43
4.1.2 Bezeichner und Namen
45
4.1.3 Literale
46
4.1.4 Reservierte Wörter, Schlüsselwörter
46
4.1.5 Trennzeichen
47
4.1.6 Interpunktionszeichen
48
4.1.7 Operatorsymbole
48
4.1.8 import-Anweisungen
49
4.1.9 Zusammenfassung
50
4.1.10 Übungsaufgaben
50
4.2 Erste Schritte in Java
51
4.2.1 Grundstruktur eines Java-Programms
52
4.2.2 Ausgaben auf der Konsole
53
4.2.3 Eingaben von der Konsole
54
4.2.4 Schöner programmieren in Java
55
4.2.5 Zusammenfassung
56
4.2.6 Übungsaufgaben
56
4.3 Einfache Datentypen
57
4.3.1 Ganzzahlige Datentypen
57
4.3.2 Gleitkommatypen
59
4.3.3 Der Datentyp char für Zeichen
61
4.3.4 Zeichenketten
62
4.3.5 Der Datentyp boolean für Wahrheitswerte
62
4.3.6 Implizite und explizite Typumwandlungen
62
4.3.7 Zusammenfassung
64
4.3.8 Übungsaufgaben
64
4.4 Der Umgang mit einfachen Datentypen
65
4.4.1 Variablen
65
4.4.2 Operatoren und Ausdrücke
69
4.4.2.1 Arithmetische Operatoren
70
4.4.2.2 Bitoperatoren
72
4.4.2.3 Zuweisungsoperator
74
4.4.2.4 Vergleichsoperatoren und logische Operatoren
75
4.4.2.5 Inkrement- und Dekrementoperatoren
77
4.4.2.6 Priorität und Auswertungsreihenfolge derOperatoren
78
4.4.3 Allgemeine Ausdrücke
79
4.4.4 Ein- und Ausgabe
80
4.4.4.1 Statischer Import der IOTools-Methoden
81
4.4.5 Zusammenfassung
83
4.4.6 Übungsaufgaben
83
4.5 Anweisungen und Ablaufsteuerung
86
4.5.1 Anweisungen
87
4.5.2 Blöcke und ihre Struktur
87
4.5.3 Entscheidungsanweisung
88
4.5.3.1 Die if-Anweisung
88
4.5.3.2 Die switch-Anweisung
89
4.5.4 Wiederholungsanweisungen, Schleifen
91
4.5.4.1 Die for-Anweisung
91
4.5.4.2 Vereinfachte for-Schleifen-Notation
92
4.5.4.3 Die while-Anweisung
93
4.5.4.4 Die do-Anweisung
93
4.5.4.5 Endlosschleifen
94
4.5.5 Sprungbefehle und markierte Anweisungen
95
4.5.6 Zusammenfassung
97
4.5.7 Übungsaufgaben
97
5 Referenzdatentypen
107
5.1 Felder
109
5.1.1 Was sind Felder?
111
5.1.2 Deklaration, Erzeugung und Initialisierung von Feldern
112
5.1.3 Felder unbekannter Länge
115
5.1.4 Referenzen
117
5.1.5 Ein besserer Terminkalender
121
5.1.6 Mehrdimensionale Felder
123
5.1.7 Mehrdimensionale Felder unterschiedlicher Länge
126
5.1.8 Vorsicht, Falle: Kopieren von mehrdimensionalen Feldern
128
5.1.9 Vereinfachte for-Schleifen-Notation
129
5.1.10 Zusammenfassung
131
5.1.11 Übungsaufgaben
131
5.2 Klassen
134
5.2.1 Was sind Klassen?
135
5.2.2 Deklaration und Instantiierung von Klassen
136
5.2.3 Komponentenzugriff bei Objekten
137
5.2.4 Ein erstes Adressbuch
138
5.2.5 Klassen als Referenzdatentyp
140
5.2.6 Felder von Klassen
143
5.2.7 Vorsicht, Falle: Kopieren von geschachtelten Referenzdatentypen
146
5.2.8 Auslagern von Klassen
147
5.2.9 Zusammenfassung
149
5.2.10 Übungsaufgaben
149
6 Methoden, Unterprogramme
151
6.1 Methoden
152
6.1.1 Was sind Methoden?
152
6.1.2 Deklaration von Methoden
153
6.1.3 Parameterübergabe und Ergebnisrückgabe
154
6.1.4 Aufruf von Methoden
156
6.1.5 Überladen von Methoden
157
6.1.6 Variable Argument-Anzahl bei Methoden
159
6.1.7 Vorsicht, Falle: Referenzen als Parameter
160
6.1.8 Sichtbarkeit und Verdecken von Variablen
162
6.1.9 Zusammenfassung
164
6.1.10 Übungsaufgaben
164
6.2 Rekursiv definierte Methoden
165
6.2.1 Motivation
165
6.2.2 Gute und schlechte Beispiele für rekursive Methoden
167
6.2.3 Zusammenfassung
170
6.3 Die Methode main
170
6.3.1 Kommandozeilenparameter
171
6.3.2 Anwendung der vereinfachten for-Schleifen-Notation
172
6.3.3 Zusammenfassung
173
6.3.4 Übungsaufgaben
173
6.4 Methoden aus anderen Klassen aufrufen
175
6.4.1 Klassenmethoden
175
6.4.2 Die Methoden der Klasse java.lang.Math
176
6.4.3 Statischer Import
177
6.5 Methoden von Objekten aufrufen
178
6.5.1 Instanzmethoden
178
6.5.2 Die Methoden der Klasse java.lang.String
179
6.6 Übungsaufgaben
182
II Objektorientiertes Programmieren in Java
187
7 Die objektorientierte Philosophie
189
7.1 Die Welt, in der wir leben
189
7.2 Programmierparadigmen – Objektorientierung im Vergleich
190
7.3 Die vier Grundpfeiler objektorientierter Programmierung
192
7.3.1 Generalisierung
192
7.3.2 Vererbung
194
7.3.3 Kapselung
197
7.3.4 Polymorphismus
198
7.3.5 Weitere wichtige Grundbegriffe
199
7.4 Modellbildung – von der realen Welt in den Computer
200
7.4.1 Grafisches Modellieren mit UML
200
7.4.2 Entwurfsmuster
201
7.5 Zusammenfassung
202
7.6 Übungsaufgaben
203
8 Der grundlegende Umgang mit Klassen
205
8.1 Vom Referenzdatentyp zur Objektorientierung
205
8.2 Instanzmethoden
207
8.2.1 Zugriffsrechte
207
8.2.2 Was sind Instanzmethoden?
208
8.2.3 Instanzmethoden zur Validierung von Eingaben
211
8.2.4 Instanzmethoden als erweiterte Funktionalität
212
8.3 Statische Komponenten einer Klasse
213
8.3.1 Klassenvariablen und -methoden
214
8.3.2 Klassenkonstanten
216
8.4 Instantiierung und Initialisierung
219
8.4.1 Konstruktoren
219
8.4.2 Überladen von Konstruktoren
221
8.4.3 Der statische Initialisierer
223
8.4.4 Der Mechanismus der Objekterzeugung
226
8.5 Zusammenfassung
231
8.6 Übungsaufgaben
231
9 Vererbung und Polymorphismus
251
9.1 Wozu braucht man Vererbung?
251
9.1.1 Aufgabenstellung
251
9.1.2 Analyse des Problems
252
9.1.3 Ein erster Ansatz
252
9.1.4 Eine Klasse für sich
253
9.1.5 Stärken der Vererbung
254
9.1.6 Vererbung verhindern durch final
257
9.1.7 Übungsaufgaben
258
9.2 Die super-Referenz
259
9.3 Überschreiben von Methoden und Variablen
261
9.3.1 Dynamisches Binden
261
9.3.2 Überschreiben von Methoden verhindern durch final
263
9.4 Die Klasse java.lang.Object
264
9.5 Übungsaufgaben
267
9.6 Abstrakte Klassen und Interfaces
268
9.7 Übungsaufgaben
271
9.8 Weiteres zum Thema Objektorientierung
276
9.8.1 Erstellen von Paketen
276
9.8.2 Zugriffsrechte
278
9.8.3 Innere Klassen
279
9.8.4 Anonyme Klassen
284
9.9 Zusammenfassung
286
9.10 Übungsaufgaben
286
10 Exceptions und Errors
297
10.1 Eine Einführung in Exceptions
298
10.1.1 Was ist eine Exception?
298
10.1.2 Übungsaufgaben
300
10.1.3 Abfangen von Exceptions
300
10.1.4 Ein Anwendungsbeispiel
301
10.1.5 Die RuntimeException
304
10.1.6 Übungsaufgaben
305
10.2 Exceptions für Fortgeschrittene
307
10.2.1 Definieren eigener Exceptions
307
10.2.2 Übungsaufgaben
309
10.2.3 Vererbung und Exceptions
309
10.2.4 Vorsicht, Falle!
313
10.2.5 Der finally-Block
315
10.2.6 Die Klassen Throwable und Error
319
10.2.7 Zusammenfassung
321
10.2.8 Übungsaufgaben
321
10.3 Assertions
322
10.3.1 Zusicherungen im Programmcode
322
10.3.2 Compilieren des Programmcodes
323
10.3.3 Ausführen des Programmcodes
324
10.3.4 Zusammenfassung
324
11 Fortgeschrittene objektorientierte Programmierung
325
11.1 Aufzählungstypen
326
11.1.1 Deklaration eines Aufzählungstyps
326
11.1.2 Instanzmethoden der enum-Objekte
327
11.1.3 Selbstdefinierte Instanzmethoden für enum-Objekte
327
11.1.4 Übungsaufgaben
329
11.2 Generische Datentypen
331
11.2.1 Generizität in alten Java-Versionen
331
11.2.2 Generizität ab Java 5.0
334
11.2.3 Einschränkungen der Typ-Parameter
336
11.2.4 Wildcards
338
11.2.5 Bounded Wildcards
339
11.2.6 Generische Methoden
341
11.2.7 Ausblick
343
11.2.8 Übungsaufgaben
343
11.3 Sortieren von Feldern und das Interface Comparable
348
12 Einige wichtige Hilfsklassen
351
12.1 Die Klasse StringBuffer
351
12.1.1 Arbeiten mit String-Objekten
351
12.1.2 Arbeiten mit StringBuffer-Objekten
354
12.1.3 Übungsaufgaben
356
12.2 Die Wrapper-Klassen (Hüll-Klassen)
357
12.2.1 Arbeiten mit „eingepackten“ Daten
357
12.2.2 Aufbau der Wrapper-Klassen
358
12.2.3 Ein Anwendungsbeispiel
361
12.2.4 Automatische Typwandlung für die Wrapper-Klassen
362
12.2.5 Übungsaufgaben
364
12.3 Die Klassen BigInteger und BigDecimal
365
12.3.1 Arbeiten mit langen Ganzzahlen
365
12.3.2 Aufbau der Klasse BigInteger
367
12.3.3 Übungsaufgaben
369
12.3.4 Arbeiten mit langen Gleitkommazahlen
369
12.3.5 Aufbau der Klasse BigDecimal
372
12.3.6 Viele Stellen von Nullstellen gefällig?
375
12.3.7 Übungsaufgaben
376
12.4 Die Klasse DecimalFormat
377
12.4.1 Standard-Ausgaben in Java
377
12.4.2 Arbeiten mit Format-Objekten
378
12.4.3 Vereinfachte formatierte Ausgabe
380
12.4.4 Übungsaufgaben
381
12.5 Die Klassen Date und Calendar
381
12.5.1 Arbeiten mit „Zeitpunkten“
382
12.5.2 Auf die Plätze, fertig, los!
383
12.5.3 Spezielle Calendar-Klassen
384
12.5.4 Noch einmal: Zeitmessung
386
12.5.5 Übungsaufgaben
388
12.6 Die Klassen SimpleDateFormat und DateFormat
388
12.6.1 Arbeiten mit Format-Objekten für Datum/Zeit-Angaben
388
12.6.2 Übungsaufgaben
393
12.7 Die Collection-Klassen
393
12.7.1 „Sammlungen“ von Objekten – der Aufbau des Interface Collection
393
12.7.2 „Sammlungen“ durchgehen – der Aufbau des Interface Iterator
396
12.7.3 Mengen
397
12.7.3.1 Das Interface Set
397
12.7.3.2 Die Klasse HashSet
397
12.7.3.3 Das Interface SortedSet
399
12.7.3.4 Die Klasse TreeSet
400
12.7.4 Listen
401
12.7.4.1 Das Interface List
402
12.7.4.2 Die Klassen ArrayList und LinkedList
402
12.7.4.3 Suchen und Sortieren – die KlassenCollections und Arrays
404
12.7.5 Übungsaufgaben
407
12.8 Die Klasse StringTokenizer
408
12.8.1 Übungsaufgaben
410
III Grafische Oberflächen in Java
411
13 Aufbau grafischer Oberflächen in Frames – von AWT nach Swing
413
13.1 Grundsätzliches zum Aufbau grafischer Oberflächen
413
13.2 Ein einfaches Beispiel mit dem AWT
415
13.3 Let's swing now!
417
13.4 Etwas „Fill-in“ gefällig?
419
13.5 Die AWT- und Swing-Klassenbibliothek im Überblick
421
13.6 Übungsaufgaben
423
14 Swing-Komponenten
425
14.1 Die abstrakte Klasse Component
425
14.2 Die Klasse Container
426
14.3 Die abstrakte Klasse JComponent
427
14.4 Layout-Manager, Farben und Schriften
428
14.4.1 Die Klasse Color
429
14.4.2 Die Klasse Font
431
14.4.3 Layout-Manager
432
14.4.3.1 Die Klasse FlowLayout
433
14.4.3.2 Die Klasse BorderLayout
435
14.4.3.3 Die Klasse GridLayout
436
14.5 Einige Grundkomponenten
438
14.5.1 Die Klasse JLabel
440
14.5.2 Die abstrakte Klasse AbstractButton
440
14.5.3 Die Klasse JButton
442
14.5.4 Die Klasse JToggleButton
443
14.5.5 Die Klasse JCheckBox
444
14.5.6 Die Klassen JRadioButton und ButtonGroup
445
14.5.7 Die Klasse JComboBox
447
14.5.8 Die Klasse JList
450
14.5.9 Die abstrakte Klasse JTextComponent
453
14.5.10 Die Klassen JTextField und JPasswordField
454
14.5.11 Die Klasse JTextArea
456
14.5.12 Die Klasse JScrollPane
458
14.5.13 Die Klasse JPanel
460
14.6 Spezielle Container, Menüs und Toolbars
462
14.6.1 Die Klasse JFrame
462
14.6.2 Die Klasse JWindow
463
14.6.3 Die Klasse JDialog
463
14.6.4 Die Klasse JMenuBar
467
14.6.5 Die Klasse JToolBar
469
14.7 Übungsaufgaben
472
15 Ereignisverarbeitung
475
15.1 Zwei einfache Beispiele
476
15.1.1 Zufällige Grautöne als Hintergrund
476
15.1.2 Ein interaktiver Bilderrahmen
479
15.2 Programmiervarianten für die Ereignisverarbeitung
483
15.2.1 Innere Klasse als Listener-Klasse
483
15.2.2 Anonyme Klasse als Listener-Klasse
483
15.2.3 Container-Klasse als Listener-Klasse
484
15.2.4 Separate Klasse als Listener-Klasse
485
15.3 Event-Klassen und -Quellen
487
15.4 Listener-Interfaces und Adapter-Klassen
491
15.5 Listener-Registrierung bei den Event-Quellen
496
15.6 Auf die Plätze, fertig, los!
500
15.7 Übungsaufgaben
504
16 Einige Ergänzungen zu Swing-Komponenten
509
16.1 Zeichnen in Swing-Komponenten
509
16.1.1 Grafische Darstellung von Komponenten
509
16.1.2 Das Grafik-Koordinatensystem
510
16.1.3 Die abstrakte Klasse Graphics
511
16.1.4 Ein einfaches Zeichenprogramm
514
16.1.5 Layoutveränderungen und der Einsatz von revalidate
516
16.2 Noch mehr Swing gefällig?
519
16.3 Übungsaufgaben
520
17 Applets
523
17.1 Erstellen und Ausführen von Applets
523
17.1.1 Vom Frame zum Applet am Beispiel
523
17.1.2 Applet in HTML-Datei einbetten
525
17.1.3 Applet über HTML-Datei ausführen
527
17.2 Die Methoden der Klasse JApplet
528
17.3 Zwei Beispiele
530
17.3.1 Auf die Plätze, fertig, los!
531
17.3.2 Punkte verbinden im Applet
534
17.4 Details zur HTML-Einbettung
535
17.4.1 Der Applet-Tag
535
17.4.2 Die Methode showDocument
538
17.5 Sicherheitseinschränkungen bei Applets
540
17.6 Übungsaufgaben
544
IV Threads, Datenströme und Netzwerk-Anwendungen
547
18 Parallele Programmierung mit Threads
549
18.1 Ein einfaches Beispiel
549
18.2 Threads in Java
551
18.2.1 Die Klasse Thread
552
18.2.2 Das Interface Runnable
556
18.2.3 Threads vorzeitig beenden
558
18.3 Wissenswertes über Threads
560
18.3.1 Lebenszyklus eines Threads
560
18.3.2 Thread-Scheduling
562
18.3.3 Dämon-Threads und Thread-Gruppen
562
18.4 Thread-Synchronisation und -Kommunikation
563
18.4.1 Das Leser/Schreiber-Problem
564
18.4.2 Das Erzeuger/Verbraucher-Problem
568
18.5 Threads in Frames und Applets
575
18.5.1 Auf die Plätze, fertig, los!
575
18.5.2 Spielereien
579
18.5.3 Swing-Komponenten sind nicht Thread-sicher
581
18.6 Übungsaufgaben
582
19 Ein- und Ausgabe über I/O-Streams
585
19.1 Grundsätzliches zu I/O-Streams in Java
586
19.2 Dateien und Verzeichnisse – Die Klasse File
586
19.3 Ein- und Ausgabe über Character-Streams
589
19.3.1 Einfache Reader- und Writer-Klassen
590
19.3.2 Gepufferte Reader- und Writer-Klassen
593
19.3.3 Die Klasse StreamTokenizer
595
19.3.4 Die Klasse PrintWriter
596
19.3.5 Die Klassen IOTools und Scanner
598
19.3.5.1 Was machen eigentlich die IOTools?
598
19.3.5.2 Konsoleneingabe über ein Scanner-Objekt
599
19.4 Ein- und Ausgabe über Byte-Streams
600
19.4.1 Einige InputStream- und OutputStream-Klassen
601
19.4.2 Die Serialisierung und Deserialisierung von Objekten
603
19.4.3 Die Klasse PrintStream
605
19.5 Einige abschließende Bemerkungen
605
19.6 Übungsaufgaben
606
20 Client/Server-Programmierung in Netzwerken
609
20.1 Wissenswertes über Netzwerk-Kommunikation
610
20.1.1 Protokolle
610
20.1.2 IP-Adressen
612
20.1.3 Ports und Sockets
613
20.2 Client/Server-Programmierung
614
20.2.1 Die Klassen ServerSocket und Socket
615
20.2.2 Ein einfacher Server
617
20.2.3 Ein einfacher Client
620
20.2.4 Ein Server für mehrere Clients
621
20.2.5 Ein Mehrzweck-Client
624
20.3 Wissenswertes über URLs
627
20.3.1 Client/Server-Kommunikation über URLs
627
20.3.2 Netzwerkverbindungen in Applets
628
20.4 Übungsaufgaben
629
V Aktuelles, Ausblick und Anhang
633
21 Neuerungen in Java 7
635
21.1 Spracherweiterungen
635
21.1.1 Elementare Datentypen und Anweisungen
635
21.1.1.1 Binäre ganzzahlige Literalkonstanten
635
21.1.1.2 Unterstrich als Trennzeichen in Literalkonstanten
636
21.1.1.3 Strings in der switch-Anweisung
637
21.1.2 Verkürzte Notation bei generischen Datentypen
640
21.1.3 Ausnahmebehandlung
644
21.1.3.1 Mehrere Ausnahme-Typen in einem catch-Block
644
21.1.3.2 try-Block mit Ressourcen
647
21.2 Erweiterungen der Klassenbibliothek
650
21.2.1 Dateien und Verzeichnisse
650
21.2.1.1 Das Interface Path und die Klasse Paths
650
21.2.1.2 Die Klasse Files
651
21.2.2 Grafische Oberflächen
654
22 Neuerungen in Java 8
657
22.1 Lambda-Ausdrücke
657
22.1.1 Lambda-Ausdrücke in Aktion – zwei Beispiele
658
22.1.2 Lambda-Ausdrücke im Detail
661
22.1.3 Lambda-Ausdrücke und funktionale Interfaces
663
22.1.4 Vordefinierte funktionale Interfaces und Anwendungen auf Datenstrukturen
665
22.1.5 Methoden-Referenzen als Lambda-Ausdrücke
670
22.1.6 Zugriff auf Variablen aus der Umgebung innerhalb eines Lambda-Ausdrucks
672
22.2 Interfaces mit Default-Methoden und statischen Methoden
674
22.2.1 Deklaration von Default-Methoden
674
22.2.2 Deklaration von statischen Methoden
675
22.2.3 Auflösung von Namensgleichheiten bei Default-Methoden
676
22.2.4 Interfaces und abstrakte Klassen in Java 8
678
22.3 Streams und Pipeline-Operationen
678
22.3.1 Streams in Aktion
679
22.3.2 Streams und Pipelines im Detail
681
22.3.3 Erzeugen von endlichen und unendlichen Streams
682
22.3.4 Die Stream-API
684
23 Blick über den Tellerrand
689
23.1 Der Vorhang fällt
689
23.2 A fool with a tool …
690
23.3 Alles umsonst?
691
23.4 Und fachlich?
692
23.5 Zu guter Letzt …
694
A Der Weg zum guten Programmierer …
695
A.1 Die goldenen Regeln der Code-Formatierung
696
A.2 Die goldenen Regeln der Namensgebung
699
A.3 Zusammenfassung
701
B Die Klasse IOTools – Tastatureingaben in Java
703
B.1 Kurzbeschreibung
703
B.2 Anwendung der IOTools-Methoden
704
C Der Umgang mit der API-Spezifikation
707
C.1 Der Aufbau der API-Spezifikation
707
C.2 Der praktische Einsatz der API-Spezifikation
708
D Glossar
713
Literaturverzeichnis
727
Stichwortverzeichnis
731
© 2009-2024 ciando GmbH