Grundkurs Programmieren in Java

Dietmar Ratz, Dennis Schulmeister-Zimolong, Detlef Seese, Jan Wiesenberger

Grundkurs Programmieren in Java

2018

758 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  39,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446453845

 

Vorwort

18

Einleitung

20

Java – mehr als nur kalter Kaffee?

20

Java für Anfänger – das Konzept dieses Buches

21

Zusatzmaterial und Kontakt zu den Autoren

22

Verwendete Schreibweisen

23

I Einstieg in das Programmieren in Java

24

1 Einige Grundbegriffe aus der Welt des Programmierens

26

1.1 Computer, Software, Informatik und das Internet

26

1.2 Was heißt Programmieren?

28

1.3 Welche Werkzeuge brauchen wir?

31

2 Aller Anfang ist schwer

34

2.1 Mein erstes Programm

34

2.2 Formeln, Ausdrücke und Anweisungen

35

2.3 Zahlenbeispiele

36

2.4 Verwendung von Variablen

37

2.5 „Auf den Schirm!“

37

2.6 Das Programmgerüst

38

2.7 Eingeben, übersetzen und ausführen

40

2.8 Übungsaufgaben

41

3 Grundlagen der Programmierung in Java

42

3.1 Grundelemente eines Java-Programms

42

3.1.1 Kommentare

44

3.1.2 Bezeichner und Namen

46

3.1.3 Literale

47

3.1.4 Reservierte Wörter, Schlüsselwörter

48

3.1.5 Trennzeichen

48

3.1.6 Interpunktionszeichen

49

3.1.7 Operatorsymbole

50

3.1.8 import-Anweisungen

50

3.1.9 Zusammenfassung

51

3.1.10 Übungsaufgaben

52

3.2 Erste Schritte in Java

53

3.2.1 Grundstruktur eines Java-Programms

53

3.2.2 Ausgaben auf der Konsole

54

3.2.3 Eingaben von der Konsole

56

3.2.4 Schöner programmieren in Java

56

3.2.5 Zusammenfassung

57

3.2.6 Übungsaufgaben

58

3.3 Einfache Datentypen

58

3.3.1 Ganzzahlige Datentypen

58

3.3.1.1 Literalkonstanten in anderen Zahlensystemen

60

3.3.1.2 Unterstrich als Trennzeichen in Literalkonstanten

61

3.3.2 Gleitkommatypen

62

3.3.3 Der Datentyp char für Zeichen

64

3.3.4 Zeichenketten

64

3.3.5 Der Datentyp boolean für Wahrheitswerte

65

3.3.6 Implizite und explizite Typumwandlungen

65

3.3.7 Zusammenfassung

66

3.3.8 Übungsaufgaben

67

3.4 Der Umgang mit einfachen Datentypen

67

3.4.1 Variablen

68

3.4.2 Operatoren und Ausdrücke

71

3.4.2.1 Arithmetische Operatoren

73

3.4.2.2 Bitoperatoren

75

3.4.2.3 Zuweisungsoperator

77

3.4.2.4 Vergleichsoperatoren und logische Operatoren

77

3.4.2.5 Inkrement- und Dekrementoperatoren

80

3.4.2.6 Priorität und Auswertungsreihenfolge derOperatoren

80

3.4.3 Allgemeine Ausdrücke

82

3.4.4 Ein- und Ausgabe

82

3.4.4.1 Statischer Import der IOTools-Methoden

84

3.4.5 Zusammenfassung

85

3.4.6 Übungsaufgaben

85

3.5 Anweisungen und Ablaufsteuerung

89

3.5.1 Anweisungen

89

3.5.2 Blöcke und ihre Struktur

90

3.5.3 Entscheidungsanweisung

90

3.5.3.1 Die if-Anweisung

90

3.5.3.2 Die switch-Anweisung

92

3.5.4 Wiederholungsanweisungen, Schleifen

96

3.5.4.1 Die for-Anweisung

96

3.5.4.2 Vereinfachte for-Schleifen-Notation

97

3.5.4.3 Die while-Anweisung

98

3.5.4.4 Die do-Anweisung

98

3.5.4.5 Endlosschleifen

99

3.5.5 Sprungbefehle und markierte Anweisungen

100

3.5.6 Zusammenfassung

102

3.5.7 Übungsaufgaben

102

4 Referenzdatentypen

112

4.1 Felder

114

4.1.1 Was sind Felder?

116

4.1.2 Deklaration, Erzeugung und Initialisierung von Feldern

118

4.1.3 Felder unbekannter Länge

120

4.1.4 Referenzen

122

4.1.5 Ein besserer Terminkalender

127

4.1.6 Mehrdimensionale Felder

129

4.1.7 Mehrdimensionale Felder unterschiedlicher Länge

133

4.1.8 Vorsicht, Falle: Kopieren von mehrdimensionalen Feldern

135

4.1.9 Vereinfachte for-Schleifen-Notation

136

4.1.10 Zusammenfassung

137

4.1.11 Übungsaufgaben

138

4.2 Klassen

141

4.2.1 Willkommen in der ersten Klasse!

142

4.2.2 Komponentenzugriff bei Objekten

146

4.2.3 Ein erstes Adressbuch

146

4.2.4 Klassen als Referenzdatentyp

148

4.2.5 Felder von Klassen

151

4.2.6 Vorsicht, Falle: Kopieren von geschachtelten Referenzdatentypen

154

4.2.7 Zusammenfassung

155

4.2.8 Übungsaufgaben

155

5 Methoden, Unterprogramme

158

5.1 Methoden

159

5.1.1 Was sind Methoden?

159

5.1.2 Deklaration von Methoden

160

5.1.3 Parameterübergabe und Ergebnisrückgabe

161

5.1.4 Aufruf von Methoden

162

5.1.5 Überladen von Methoden

164

5.1.6 Variable Argumentanzahl bei Methoden

165

5.1.7 Vorsicht, Falle: Referenzen als Parameter

166

5.1.8 Sichtbarkeit und Verdecken von Variablen

169

5.1.9 Zusammenfassung

170

5.1.10 Übungsaufgaben

171

5.2 Rekursiv definierte Methoden

172

5.2.1 Motivation

172

5.2.2 Gute und schlechte Beispiele für rekursive Methoden

174

5.2.3 Zusammenfassung

177

5.3 Die Methode main

177

5.3.1 Kommandozeilenparameter

177

5.3.2 Anwendung der vereinfachten for-Schleifen-Notation

179

5.3.3 Zusammenfassung

179

5.3.4 Übungsaufgaben

180

5.4 Methoden aus anderen Klassen aufrufen

181

5.4.1 Klassenmethoden

182

5.4.2 Die Methoden der Klasse java.lang.Math

183

5.4.3 Statischer Import

184

5.5 Methoden von Objekten aufrufen

185

5.5.1 Instanzmethoden

185

5.5.2 Die Methoden der Klasse java.lang.String

186

5.6 Übungsaufgaben

188

II Objektorientiertes Programmieren in Java

194

6 Die objektorientierte Philosophie

196

6.1 Die Welt, in der wir leben

196

6.2 Programmierparadigmen – Objektorientierung im Vergleich

197

6.3 Die vier Grundpfeiler objektorientierter Programmierung

199

6.3.1 Generalisierung

199

6.3.2 Vererbung

201

6.3.3 Kapselung

204

6.3.4 Polymorphie

205

6.3.5 Weitere wichtige Grundbegriffe

206

6.4 Modellbildung – von der realen Welt in den Computer

207

6.4.1 Grafisches Modellieren mit UML

207

6.4.2 Entwurfsmuster

208

6.5 Zusammenfassung

209

6.6 Übungsaufgaben

210

7 Der grundlegende Umgang mit Klassen

212

7.1 Vom Referenzdatentyp zur Objektorientierung

212

7.2 Instanzmethoden

214

7.2.1 Zugriffsrechte

214

7.2.2 Was sind Instanzmethoden?

215

7.2.3 Instanzmethoden zur Validierung von Eingaben

218

7.2.4 Instanzmethoden als erweiterte Funktionalität

219

7.3 Statische Komponenten einer Klasse

220

7.3.1 Klassenvariablen und -methoden

221

7.3.2 Klassenkonstanten

223

7.4 Instanziierung und Initialisierung

226

7.4.1 Konstruktoren

226

7.4.2 Überladen von Konstruktoren

228

7.4.3 Der statische Initialisierer

230

7.4.4 Der Mechanismus der Objekterzeugung

232

7.5 Zusammenfassung

237

7.6 Übungsaufgaben

238

8 Vererbung und Polymorphie

258

8.1 Wozu braucht man Vererbung?

258

8.1.1 Aufgabenstellung

258

8.1.2 Analyse des Problems

259

8.1.3 Ein erster Ansatz

259

8.1.4 Eine Klasse für sich

260

8.1.5 Stärken der Vererbung

261

8.1.6 Vererbung verhindern durch final

264

8.1.7 Übungsaufgaben

265

8.2 Die super-Referenz

266

8.3 Überschreiben von Methoden und Variablen

268

8.3.1 Dynamisches Binden

268

8.3.2 Überschreiben von Methoden verhindern durch final

270

8.4 Die Klasse java.lang.Object

270

8.5 Übungsaufgaben

274

8.6 Abstrakte Klassen und Interfaces

274

8.6.1 Einsatzszenarien am Beispiel

274

8.6.2 Abstrakte Klassen im Detail

278

8.6.3 Interfaces im Detail

281

8.7 Interfaces mit Default-Methoden und statischen Methoden

284

8.7.1 Deklaration von Default-Methoden

284

8.7.2 Deklaration von statischen Methoden

285

8.7.3 Auflösung von Namensgleichheiten bei Default-Methoden

286

8.7.4 Interfaces und abstrakte Klassen im Vergleich

288

8.8 Weiteres zum Thema Objektorientierung

288

8.8.1 Erstellen von Paketen

288

8.8.2 Zugriffsrechte

290

8.8.3 Innere Klassen

291

8.8.4 Anonyme Klassen

297

8.9 Zusammenfassung

300

8.10 Übungsaufgaben

300

9 Exceptions und Errors

312

9.1 Eine Einführung in Exceptions

313

9.1.1 Was ist eine Exception?

313

9.1.2 Übungsaufgaben

315

9.1.3 Abfangen von Exceptions

315

9.1.4 Ein Anwendungsbeispiel

316

9.1.5 Die RuntimeException

319

9.1.6 Übungsaufgaben

320

9.2 Exceptions für Fortgeschrittene

322

9.2.1 Definieren eigener Exceptions

322

9.2.2 Übungsaufgaben

324

9.2.3 Vererbung und Exceptions

324

9.2.4 Vorsicht, Falle!

328

9.2.5 Der finally-Block

330

9.2.6 Die Klassen Throwable und Error

334

9.2.7 Zusammenfassung

336

9.2.8 Übungsaufgaben

336

9.3 Assertions

337

9.3.1 Zusicherungen im Programmcode

337

9.3.2 Ausführen des Programmcodes

338

9.3.3 Zusammenfassung

339

9.4 Mehrere Ausnahmetypen in einem catch-Block

339

9.5 Ausblick: try-Block mit Ressourcen

341

10 Fortgeschrittene objektorientierte Programmierung

342

10.1 Aufzählungstypen

342

10.1.1 Deklaration eines Aufzählungstyps

343

10.1.2 Instanzmethoden der enum-Objekte

343

10.1.3 Selbstdefinierte Instanzmethoden für enum-Objekte

344

10.1.4 Übungsaufgaben

345

10.2 Generische Datentypen

347

10.2.1 Herkömmliche Generizität

348

10.2.2 Generizität durch Typ-Parameter

350

10.2.3 Einschränkungen der Typ-Parameter

352

10.2.4 Wildcards

354

10.2.5 Bounded Wildcards

355

10.2.6 Generische Methoden

357

10.2.7 Verkürzte Notation bei generischen Datentypen

359

10.2.8 Ausblick

362

10.2.9 Übungsaufgaben

362

10.3 Sortieren von Feldern und das Interface Comparable

367

11 Einige wichtige Hilfsklassen

370

11.1 Die Klasse StringBuffer

370

11.1.1 Arbeiten mit String-Objekten

370

11.1.2 Arbeiten mit StringBuffer-Objekten

373

11.1.3 Übungsaufgaben

375

11.2 Die Wrapper-Klassen (Hüll-Klassen)

376

11.2.1 Arbeiten mit „eingepackten“ Daten

376

11.2.2 Aufbau der Wrapper-Klassen

378

11.2.3 Ein Anwendungsbeispiel

380

11.2.4 Automatische Typwandlung für die Wrapper-Klassen

381

11.2.5 Übungsaufgaben

383

11.3 Die Klassen BigInteger und BigDecimal

383

11.3.1 Arbeiten mit langen Ganzzahlen

384

11.3.2 Aufbau der Klasse BigInteger

385

11.3.3 Übungsaufgaben

387

11.3.4 Arbeiten mit langen Gleitkommazahlen

388

11.3.5 Aufbau der Klasse BigDecimal

391

11.3.6 Viele Stellen von Nullstellen gefällig?

393

11.3.7 Übungsaufgaben

395

11.4 Die Klasse DecimalFormat

395

11.4.1 Standardausgaben in Java

395

11.4.2 Arbeiten mit Format-Objekten

396

11.4.3 Vereinfachte formatierte Ausgabe

399

11.4.4 Übungsaufgaben

399

11.5 Die Klassen Date und Calendar

400

11.5.1 Arbeiten mit „Zeitpunkten“

400

11.5.2 Auf die Plätze, fertig, los!

401

11.5.3 Spezielle Calendar-Klassen

402

11.5.4 Noch einmal: Zeitmessung

405

11.5.5 Übungsaufgaben

406

11.6 Die Klassen SimpleDateFormat und DateFormat

406

11.6.1 Arbeiten mit Format-Objekten für Datum/Zeit-Angaben

406

11.6.2 Übungsaufgaben

411

11.7 Die Collection-Klassen

411

11.7.1 „Sammlungen“ von Objekten – der Aufbau des Interface Collection

412

11.7.2 „Sammlungen“ durchgehen – der Aufbau des Interface Iterator

414

11.7.3 Mengen

415

11.7.3.1 Das Interface Set

415

11.7.3.2 Die Klasse HashSet

416

11.7.3.3 Das Interface SortedSet

417

11.7.3.4 Die Klasse TreeSet

418

11.7.4 Listen

420

11.7.4.1 Das Interface List

420

11.7.4.2 Die Klassen ArrayList und LinkedList

421

11.7.4.3 Suchen und Sortieren – die KlassenCollections und Arrays

423

11.7.5 Verkürzte Notation bei Collection-Datentypen

425

11.7.6 Übungsaufgaben

427

11.8 Die Klasse StringTokenizer

427

11.8.1 Übungsaufgaben

430

III Grafische Oberflächen in Java

432

12 Aufbau grafischer Oberflächen in Frames – von AWT nach Swing

434

12.1 Grundsätzliches zum Aufbau grafischer Oberflächen

434

12.2 Ein einfaches Beispiel mit dem AWT

435

12.3 Let's swing now!

438

12.4 Etwas „Fill-in“ gefällig?

440

12.5 Die AWT- und Swing-Klassenbibliothek im Überblick

442

12.6 Übungsaufgaben

444

13 Swing-Komponenten

446

13.1 Die abstrakte Klasse Component

446

13.2 Die Klasse Container

447

13.3 Die abstrakte Klasse JComponent

448

13.4 Layout-Manager, Farben und Schriften

449

13.4.1 Die Klasse Color

450

13.4.2 Die Klasse Font

452

13.4.3 Layout-Manager

453

13.4.3.1 Die Klasse FlowLayout

454

13.4.3.2 Die Klasse BorderLayout

456

13.4.3.3 Die Klasse GridLayout

457

13.5 Einige Grundkomponenten

459

13.5.1 Die Klasse JLabel

460

13.5.2 Die abstrakte Klasse AbstractButton

462

13.5.3 Die Klasse JButton

462

13.5.4 Die Klasse JToggleButton

464

13.5.5 Die Klasse JCheckBox

465

13.5.6 Die Klassen JRadioButton und ButtonGroup

466

13.5.7 Die Klasse JComboBox

468

13.5.8 Die Klasse JList

471

13.5.9 Die abstrakte Klasse JTextComponent

474

13.5.10 Die Klassen JTextField und JPasswordField

474

13.5.11 Die Klasse JTextArea

477

13.5.12 Die Klasse JScrollPane

479

13.5.13 Die Klasse JPanel

481

13.6 Spezielle Container, Menüs und Toolbars

482

13.6.1 Die Klasse JFrame

483

13.6.2 Die Klasse JWindow

484

13.6.3 Die Klasse JDialog

484

13.6.4 Die Klasse JMenuBar

487

13.6.5 Die Klasse JToolBar

490

13.7 Übungsaufgaben

493

14 Ereignisverarbeitung

496

14.1 Zwei einfache Beispiele

497

14.1.1 Zufällige Grautöne als Hintergrund

497

14.1.2 Ein interaktiver Bilderrahmen

500

14.2 Programmiervarianten für die Ereignisverarbeitung

504

14.2.1 Innere Klasse als Listener-Klasse

504

14.2.2 Anonyme Klasse als Listener-Klasse

504

14.2.3 Container-Klasse als Listener-Klasse

505

14.2.4 Separate Klasse als Listener-Klasse

506

14.3 Event-Klassen und -Quellen

508

14.4 Listener-Interfaces und Adapter-Klassen

511

14.5 Listener-Registrierung bei den Event-Quellen

517

14.6 Auf die Plätze, fertig, los!

520

14.7 Übungsaufgaben

525

15 Einige Ergänzungen zu Swing-Komponenten

530

15.1 Zeichnen in Swing-Komponenten

530

15.1.1 Grafische Darstellung von Komponenten

530

15.1.2 Das Grafikkoordinatensystem

531

15.1.3 Die abstrakte Klasse Graphics

532

15.1.4 Ein einfaches Zeichenprogramm

535

15.1.5 Layoutveränderungen und der Einsatz von revalidate

537

15.2 Noch mehr Swing gefällig?

539

15.3 Übungsaufgaben

541

IV Threads, Datenströme und Netzwerkanwendungen

544

16 Parallele Programmierung mit Threads

546

16.1 Ein einfaches Beispiel

546

16.2 Threads in Java

548

16.2.1 Die Klasse Thread

549

16.2.2 Das Interface Runnable

553

16.2.3 Threads vorzeitig beenden

555

16.3 Wissenswertes über Threads

557

16.3.1 Lebenszyklus eines Threads

557

16.3.2 Thread-Scheduling

559

16.3.3 Dämon-Threads und Thread-Gruppen

559

16.4 Thread-Synchronisation und -Kommunikation

560

16.4.1 Das Leser/Schreiber-Problem

561

16.4.2 Das Erzeuger/Verbraucher-Problem

564

16.5 Threads in Swing-Anwendungen

572

16.5.1 Auf die Plätze, fertig, los!

572

16.5.2 Spielereien

575

16.5.3 Swing-Komponenten sind nicht Thread-sicher

578

16.6 Übungsaufgaben

579

17 Ein- und Ausgabe über I/O-Streams

582

17.1 Grundsätzliches zu I/O-Streams in Java

583

17.2 Dateien und Verzeichnisse – die Klasse File

583

17.3 Ein- und Ausgabe über Character-Streams

586

17.3.1 Einfache Reader- und Writer-Klassen

587

17.3.2 Gepufferte Reader- und Writer-Klassen

590

17.3.3 Die Klasse StreamTokenizer

592

17.3.4 Die Klasse PrintWriter

593

17.3.5 Die Klassen IOTools und Scanner

595

17.3.5.1 Was machen eigentlich die IOTools?

595

17.3.5.2 Konsoleneingabe über ein Scanner-Objekt

596

17.4 Ein- und Ausgabe über Byte-Streams

597

17.4.1 Einige InputStream- und OutputStream-Klassen

598

17.4.2 Die Serialisierung und Deserialisierung von Objekten

600

17.4.3 Die Klasse PrintStream

602

17.5 Streams im try-Block mit Ressourcen

603

17.6 Einige abschließende Bemerkungen

605

17.6.1 Das Paket java.nio

606

17.6.2 Das Paket java.nio.file

607

17.6.2.1 Das Interface Path und die Klasse Paths

607

17.6.2.2 Die Klasse Files

608

17.7 Übungsaufgaben

611

18 Client/Server-Programmierung in Netzwerken

614

18.1 Wissenswertes über Netzwerkkommunikation

615

18.1.1 Protokolle

615

18.1.2 IP-Adressen

617

18.1.3 Ports und Sockets

618

18.2 Client/Server-Programmierung

619

18.2.1 Die Klassen ServerSocket und Socket

620

18.2.2 Ein einfacher Server

622

18.2.3 Ein einfacher Client

625

18.2.4 Ein Server für mehrere Clients

626

18.2.5 Ein Mehrzweck-Client

629

18.2.6 Client/Server-Kommunikation über URLs

632

18.3 Übungsaufgaben

633

19 Lambda-Ausdrücke, Streams und Pipeline-Operationen

638

19.1 Lambda-Ausdrücke

638

19.1.1 Lambda-Ausdrücke in Aktion – zwei Beispiele

639

19.1.2 Lambda-Ausdrücke im Detail

642

19.1.3 Lambda-Ausdrücke und funktionale Interfaces

644

19.1.4 Vordefinierte funktionale Interfaces und Anwendungen auf Datenstrukturen

646

19.1.5 Methodenreferenzen als Lambda-Ausdrücke

650

19.1.6 Zugriff auf Variablen aus der Umgebung innerhalb eines Lambda-Ausdrucks

653

19.1.7 Übungsaufgaben

654

19.2 Streams und Pipeline-Operationen

655

19.2.1 Streams in Aktion

656

19.2.2 Streams und Pipelines im Detail

658

19.2.3 Erzeugen von endlichen und unendlichen Streams

659

19.2.4 Die Stream-API

662

19.2.5 Übungsaufgaben

665

V Abschluss, Ausblick und Anhang

668

20 Blick über den Tellerrand

670

20.1 JShell für kleine Skripte

671

20.2 Das Java-Modulsystem

675

20.3 Bühne frei für JavaFX

682

20.4 Beginn einer neuen Zeitrechnung

691

20.5 Webprogrammierung und verteilte Systeme

693

20.6 Zu guter Letzt

696

A Der Weg zum guten Programmierer …

698

A.1 Die goldenen Regeln der Code-Formatierung

699

A.2 Die goldenen Regeln der Namensgebung

702

A.3 Zusammenfassung

704

B Ohne Werkzeug geht es nicht

706

B.1 Die API-Dokumentation zum Nachschlagen

707

B.2 Die IDE, dein Freund und Helfer

709

B.3 Alle Versionen stets im Griff

711

B.4 Testen bitte nicht vergessen

713

B.5 Der Automat kann es besser

715

C Die Klasse IOTools – Tastatureingaben in Java

718

C.1 Kurzbeschreibung

718

C.2 Anwendung der IOTools-Methoden

719

Glossar

722

Stichwortverzeichnis

742

 

© 2009-2024 ciando GmbH