Click here to load reader

Prof. Dr. Karl Friedrich Gebhardt - DHBW kfg/java/java.pdf · PDF file c 1996 { 2017 Karl Friedrich Gebhardt Au age vom 10. Oktober 2019 Prof. Dr. K. F. Gebhardt Tel: 0711-667345-11(16)(15)(12)

  • View
    2

  • Download
    0

Embed Size (px)

Text of Prof. Dr. Karl Friedrich Gebhardt - DHBW kfg/java/java.pdf · PDF file c 1996 { 2017 Karl...

  • Intensivkurs Java

    Prof. Dr. Karl Friedrich Gebhardt

  • c©1996 – 2021 Karl Friedrich Gebhardt

    Auflage vom 9. März 2021

    Prof. Dr. K. F. Gebhardt

    Tel: 0711-184945-11(16)(15)(12) Fax: 0711-184945-10 email: [email protected]

  • i

    Vorwort

    Das vorliegende Skriptum ist die Arbeitsunterlage für einen drei- bis viertägigen Java Intensiv- kurs. Es eignet sich daher nur bedingt zum Selbstudium.

    Sprachkenntnisse einer höheren Programmiersprache (z.B. C, Pascal, FORTRAN, BASIC) sind erfahrungsgemäß eine Voraussetzung, um den Stoff in drei bis vier Tagen zu erarbeiten.

  • ii

  • Inhaltsverzeichnis

    1 Einleitung 1

    1.1 Erste Java-Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    1.1.1 ”Hello-World”-Programm . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    1.1.2 Produkt von zwei Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    1.1.3 Schmier-Programm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.2 Geschichte und Entwicklungsstand von Java . . . . . . . . . . . . . . . . . . . . . 9

    1.3 Objektorientierte Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.4 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2 Datentypen 17

    2.1 Programmstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.1.1 main-Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.1.2 Umgebungsvariable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.1.3 Namensraum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.2 Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    2.3 Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    2.4 Standarddatentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    2.5 Referenzdatentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    2.5.1 Zuweisung von Referenztypen . . . . . . . . . . . . . . . . . . . . . . . . . 24

    2.5.2 Vergleich von Referenztypen . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    2.5.3 Erzeugung von Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    2.6 Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    2.7 Modifikatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    2.8 Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    2.9 Klasse ArrayList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    iii

  • iv INHALTSVERZEICHNIS

    2.10 Klasse Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    2.11 Klasse Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    2.12 Aufzählungstyp enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    2.13 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    3 Operatoren 37

    3.1 Unäre, binäre und ternäre Operatoren . . . . . . . . . . . . . . . . . . . . . . . . 37

    3.2 Operatoren und ihre Hierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    3.3 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    4 Kontrollstrukturen 41

    4.1 Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    4.2 Bedingte oder if-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    4.3 Fallunterscheidung (switch-Anweisung) . . . . . . . . . . . . . . . . . . . . . . . 42

    4.4 while-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    4.5 for-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    4.5.1 Enhanced for-Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    4.6 Sprünge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    4.7 Wertrückgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    4.8 Methoden, Funktionen, Operationen . . . . . . . . . . . . . . . . . . . . . . . . . 47

    4.9 Assertions – Zusicherungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    4.10 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

    5 Die Java-Klasse 51

    5.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    5.2 Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    5.3 Instanz-Initialisatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    5.4 Aufgabe von Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    5.5 Klassenvariable und -methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    5.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

  • INHALTSVERZEICHNIS v

    6 Vererbung 65

    6.1 Syntax des Vererbungsmechanismus . . . . . . . . . . . . . . . . . . . . . . . . . 65

    6.2 Polymorphismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    6.3 Zugriff auf verdeckte Variable und Methoden . . . . . . . . . . . . . . . . . . . . 69

    6.4 Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    6.5 Initialisierungsreihenfolge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    6.6 Abstrakte Klassen und Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . 73

    6.6.1 Abstrakte Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    6.6.2 Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    6.7 Klasse java.lang.Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

    6.8 Implementation von clone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    6.9 Implementation von objektorientiertem Design in Java . . . . . . . . . . . . . . . 81

    6.9.1 ”Ist-ein”– Beziehung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

    6.9.2 ”Ist-fast-ein”– Beziehung . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

    6.9.3 ”Hat-ein”– Beziehung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    6.9.4 ”Benutzt-ein”– Beziehung . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    6.9.5 Andere Beziehungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    6.9.6 Botschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    6.9.7 Mehrfachvererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

    6.10 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    7 Ausnahmebehandlung 89

    7.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

    7.2 Ausnahme-Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

    7.3 Deklaration von Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    7.4 Basisklasse Throwable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    7.5 Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    7.6 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    7.7 Ausnahmen in Initialisatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    7.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

  • vi INHALTSVERZEICHNIS

    8 Innere Klassen 99

    8.1 Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    8.1.1 Behandlung von Ereignissen . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    8.1.2 Callable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    8.2 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

    9 Threads 107

    9.1 Einzelner Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

    9.2 Methoden der Klasse Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    9.3 Gruppen von Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    9.4 Priorität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

    9.5 Synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

    9.5.1 synchronized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

    9.5.2 wait, notify und notifyAll . . . . . . . . . . . . . . . . . . . . . . . . . 114

    9.6 Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    9.6.1 Erzeuger-Verbraucher-Problem . . . . . . . . . . . . . . . . . . . . . . . . 115

    9.6.2 Beispiel: Queue . . . . . . . . . . . . . .