Grundkurs Programmieren in Java

Dietmar Ratz, Jens Scheffler, Detlef Seese, Jan Wiesenberger

Grundkurs Programmieren in Java

2014

768 Seiten

Format: PDF, Online Lesen

E-Book: €  27,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446441101

 

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