41
Leseprobe Dieses Taschenbuch ist der ideale Begleiter, wenn Sie in Java einsteigen und eine kompakte Einführung in die Sprache suchen. Leicht verständlich führt Sie Michael Kofler in die Java-Welt ein und bietet Ihnen zahlreiche Übungsaufgaben mitsamt Lösungen. Diese Leseprobe stellt Ihnen Java vor und zeigt, wie Sie Operatoren einsetzen. Michael Kofler Java – Der Grundkurs 436 Seiten, broschiert, 2. Auflage, Dezember 2017 12,90 Euro, ISBN 978-3-8362-4581-4 www.rheinwerk-verlag.de/4397 »Hello World!« »Operatoren« »Lösungen zu den Übungen« Inhaltsverzeichnis Index Der Autor Leseprobe weiterempfehlen Wissen, wie’s geht.

issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

LeseprobeDieses Taschenbuch ist der ideale Begleiter, wenn Sie in Java einsteigen und eine kompakte Einführung in die Sprache suchen. Leicht verständlich führt Sie Michael Kofler in die Java-Welt ein und bietet Ihnen zahlreiche Übungsaufgaben mitsamt Lösungen. Diese Leseprobe stellt Ihnen Java vor und zeigt, wie Sie Operatoren einsetzen.

Michael Kofler

Java – Der Grundkurs436 Seiten, broschiert, 2. Auflage, Dezember 2017 12,90 Euro, ISBN 978-3-8362-4581-4

www.rheinwerk-verlag.de/4397

»Hello World!« »Operatoren« »Lösungen zu den Übungen«

Inhaltsverzeichnis

Index

Der Autor

Leseprobe weiterempfehlen

Wissen, wie’s geht.

Page 2: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 23 — #19

1Kapitel 1

Hello World!

Traditionell ist Hello World das erste Programm in jeder Programmier-

anleitung bzw. in jedem Programmierbuch. Die Aufgabe dieses Pro-

gramms besteht darin, die Zeichenkette 'Hello World' auf dem Bildschirm

bzw. in einem Terminalfenster auszugeben.

»Eine ziemlich triviale Aufgabe«, werden Sie einwenden. »Dazu muss ich

nicht das Programmieren lernen!« Damit haben Sie natürlich recht. Tat-

sächlich besteht der Sinn des Hello-World-Programms nicht darin, eine

Zeichenkette auszugeben, sondern vielmehr darin, die Syntax und Werk-

zeuge einer neuen Programmiersprache erstmals auszuprobieren.

Genau darum geht es in diesem Kapitel: Sie lernen die wichtigsten Eigen-

schaften von Java kennen, erfahren, was Sie installieren müssen, bevor

Sie Ihr erstes Programm verfassen können, und werden mit Java-Entwick-

lungswerkzeugen wie java, javac und der IntelliJ IDEA vertraut. Gleich-

zeitig gibt das Kapitel einen ersten Überblick über die wichtigsten Java-

Syntaxregeln.

1.1 Einführung

Programmieren heißt, einem Computer in einer für ihn verständlichen

Sprache Anweisungen zu geben. Als Nicht-Programmierer können Sie

Computer selbstverständlich schon anwenden, im Web surfen, eine Mail

verfassen, eine Android-App bedienen oder auf dem iPad Schach spielen.

Aber wenn Sie ein Programm benötigen, das es in dieser Form noch nicht

gibt, dann müssen Sie dieses selbst entwickeln. Dieses Buch vermittelt

Ihnen die dazu erforderlichen Grundkenntnisse.

23

Page 3: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 24 — #20

1 Hello World!

Natürlich gibt es auch ganz pragmatische Gründe: Sie wollen (oder müs-

sen?) programmieren lernen, weil dies Teil Ihrer Schul- oder Universitäts-

ausbildung ist. Oder Siemöchten programmieren können, um damit Geld

zu verdienen. Oder es reizt Sie einfach, die IT-Welt besser verstehen zu

können. Aus meiner persönlichen Sicht hat Programmieren auch etwas

Spielerisches an sich. Programmieren kann Spaß machen – so wie das

Lösen eines Denksporträtsels.

Warum Java?

Programmiersprachen gibt es sprichwörtlich wie Sand am Meer. Warum

gerade Java? Java hat sich in den vergangenen Jahrzehnten als die erste

Programmiersprache etabliert, mit der unzählige Studenten ihre ersten

Programme verfasst haben. Dafür gibt es gute Gründe:

Java ist kostenlos.

Java zeichnet sich durch eine klare, relativ leicht zu erlernende Syntax

aus, was gerade im schulischen Bereich ein großer Vorteil ist.

Java ist plattformunabhängig: Ein einmal entwickeltes Java-Programm

kann daher gleichermaßen unter Windows, Linux, macOS oder unter

anderen Betriebssystemen ausgeführt werden.

Java steht als Open-Source-Code zur Verfügung. Damit kann Java un-

kompliziert auf neue Plattformen portiert werden. Genau das war vor

einigen Jahren der Fall, als Google Android entwickelte – das heute

dominierende Betriebssystem für Smartphones und Tablets.

Java ist im Unternehmensbereich sehr beliebt. Es gibt unzählige Ent-

wicklungswerkzeuge, die dabei helfen, exakten, sauberen und wart-

baren Code zu entwickeln – auch bei sehr großen Projekten.

Java ist sehr universell anwendbar. Sie können damit einfache Konso-

lenkommandos ebenso entwickeln wie Windows-Programme mit gra-

fischer Benutzeroberfläche, Webanwendungen für den Server-Einsatz

oder Android-Apps.

24

“buch” — 2017/12/1 — 11:49 — page 25 — #21

1

1.1 Einführung

»Die Beispiele in diesem Buch sind so langweilig!«

Wenn Sie dieses Buch durchblättern, werden Sie schnell feststellen,

dass ich Ihnen hier leider nicht zeigen kann, wie Sie selbst ein tolles,

neues Android-Spiel oder eine eigene interaktive Webseite programmie-

ren. Immerhin enthält Kapitel 17, »JavaFX«, einen knappen Einstieg in die

Programmierung grafischer Benutzeroberflächen, aber ansonsten domi-

nieren Textmodusprogramme. Warum?

Dieses Buch konzentriert sich auf die Java-Grundlagen. Diese Grund-

kenntnisse können am besten in kompakten, kleinen Programmen ver-

mittelt werden, also ohne grafische Oberfläche und ohne Einbindung

in eine Webseite. Sorry! Sobald Sie dieses Buch durchgearbeitet haben,

verfügen Sie über ein solides Java-Fundament, mit dem Sie sich dann

weiter in ein Java-Teilgebiet einarbeiten können, z. B. in die Entwicklung

von Webanwendungen.

Java-Versionen

Gerade bei Java-Einsteigern stiften die unzähligen Java-Versionen und

-Varianten oft Verwirrung. Die Grundlage für dieses Buch ist Java SE 9, also

die Standard Edition von Java in der Version 9. Zur Entwicklung eigener

Programme benötigen Sie das Java Development Kit (JDK) für diese Java-

Version. Was bedeutet dies alles?

Versionsnummern:Die Java-Version 1 wurde Anfang 1996 freigegeben,

Version 9 im September 2017. Dazwischen liegen allerdings nicht die

Versionen 2 bis 7, sondern die Versionsnummern 1.1, 1.2, 1.3, 1.4, 5, 6, 7

und 8.

Dieses merkwürdige Nummerierungssystem resultiert daraus, dass

Java-Versionen intern bis zu Version 4 in der Form 1.n gezählt werden.

Umgangssprachlich wurde Java 1.n schon bald einfach Java n genannt.

In diesem Buch beziehe ich mich auf Java 9. Große Teile des Buchs gel-

ten auch für ältere Java-Versionen, die gerade inUnternehmenoder auf

älteren Schulrechnern noch weit verbreitet sind. Insbesondere im Ver-

25

Page 4: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 26 — #22

1 Hello World!

gleich zu Version 8 bietet Java 9 nur wenige Neuerungen, die für dieses

Buch relevant sind.

JRE versus JDK: Je nachdem, ob Sie Java-Programme nur ausführen

oder aber selbst entwickeln möchten, müssen Sie auf Ihrem Rechner

das Java Runtime Environment (JRE) oder aber das Java Development Kit

(JDK) installieren. Die Trennung zwischen diesen beiden Varianten hat

denVorteil, dass für reine Java-Anwender das viel kleinere JRE ausreicht.

Das JDK inkludiert das JRE, d. h., als Java-Entwickler müssen Sie nicht

beides installieren!

Java SE versus Java EE: Ich habe einleitend erwähnt, dass Java zur Ent-

wicklung von ganz unterschiedlichen Anwendungstypen verwendet

wird. Gewissermaßen als Normalfall gelten einfache Programme mit

oder ohne grafische Benutzeroberfläche. Dafür ist die Java Standard

Edition (Java SE) gedacht. Sie ist gleichzeitig die einzige Java-Edition, die

für dieses Buch relevant ist.

Speziell für die Entwicklung von Web- und Server-Anwendungen gibt

es die Java Enterprise Edition (Java EE). Java EE ist eine Erweiterung von

Java SE um diverse Zusatzkomponenten bzw. Bibliotheken.

Oracle Java versusOpenJDK versusDalvik/ART:Oracle kaufte 2010 die

Firma Sun auf und übernahm damit auch die Kontrolle über das von

Sun entwickelte Java. Die offiziellen Java-Versionen stammen somit von

Oracle.

Da Sunaber bereits 2006denQuellcodevon Java als Open-Source-Code

freigab, gibt es weitere Java-Implementierungen. Am populärsten ist

dasOpenJDK des Iced-Tea-Projekts. Es kommt standardmäßig auf allen

Linux-Distributionen zum Einsatz, primär deswegen, weil Oracle eine

unkomplizierte Integration des offiziellen Java in Linux-Distributionen

nicht erlaubt.

Viele Software-Komponenten undApps für Android-Smartphones und

-Tablets sind in Java entwickelt. Allerdings erfolgt die Ausführung nicht

durch die originale Java Virtual Machine, sondern bei älteren Model-

len durch die von Google entwickelte Dalvik Virtual Machine und ab

Android 5 durch die Android Runtime (ART).

26

“buch” — 2017/12/1 — 11:49 — page 27 — #23

1

1.1 Einführung

JavaScript hat (fast) nichts mit Java zu tun!

JavaScript erlaubt es, Code direkt inWebseiten einzubetten und auf dem

Browser auszuführen. Fürmoderne Webanwendungen ist das sehr wich-

tig. JavaScript ist aber grundverschieden von Java: Die Syntax ist simpler,

es gibt keinen Byte-Code, keine Java Virtual Machine etc. In diesem Buch

geht es um Java, nicht um JavaScript!

Sicherheitsprobleme

In den vergangenen Jahren hat Java viel negative Presse erhalten – und

praktisch immer ging es dabei um Sicherheitsprobleme. Ist Java also eine

unsichere Programmiersprache?

So allgemeingültig kannmandas zumGlücknicht sagen. Viele Sicherheits-

lücken der letzten Jahre betrafen eine bestimmte Art von Java-Program-

men, die direkt imWebbrowser ausgeführt werden. Derartige Java-Applets

spielen heute keine Rolle mehr und werden von aktuellen Webbrowsern

standardmäßig blockiert. Davon abgesehen ist Java nicht sicherer oder

unsicherer als andere Programmiersprachen.

Windows, Linux oder macOS?

Ganz egal, ob Sie am liebsten unter Windows, Linux oder macOS arbei-

ten: Jedes dieser Betriebssysteme ist wunderbar geeignet, um Java ken-

nenzulernen! Dass die meisten Screenshots dieses Buchs unter Windows

erstellt wurden, hat nichtsmitmeinen persönlichenVorlieben zu tun. Viel-

mehr ist Windows gerade im Schulbereich noch immer das dominierende

Betriebssystem.

Beispieldateien

Auf der Verlagswebseite zu diesem Buch finden Sie die Beispiele aus

den folgenden Kapiteln in Form einer ZIP-Datei. Sie können die Beispiele

unter Windows, Linux oder macOS nutzen. Lesen Sie dazu die den Bei-

spieldateien beiliegende Readme-Datei!

27

Page 5: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 28 — #24

1 Hello World!

1.2 Java und die IntelliJ IDEA installieren

Bevor Sie Ihr erstes Java-Programm verfassen und ausführen können,

benötigen Sie zwei Dinge: das sogenannte Java Development Kit (JDK) und

einen Code-Editor. Vor allem für die Entwicklung größerer Programme ist

außerdem eine grafische Entwicklungsumgebung zweckmäßig, also ein

Integrated Development Environment, kurz IDE. Aber der Reihe nach:

JDK: Wie ich bereits erwähnt habe, gibt es zwei Java-Varianten: Um

selbst Java-Programme zu entwickeln, müssen Sie das Java Develop-

ment Kit (JDK) installieren. Es enthält unzählige Entwicklungswerk-

zeuge und Bibliotheken. Für die Beispiele in diesem Buch benötigen

Sie das JDK in der Version 9. (Für die meisten Beispiele reicht übrigens

auch das JDK 8 aus.)

Editor:Windows-Anwender können ihre ersten Java-Programme sogar

mit dem Editor Notepad verfassen, der jeder Windows-Version bei-

liegt. Komfortabel ist dies aber nicht. Besser ist es, einen Editor zu

verwenden, der Java-Code versteht, verschiedene Elemente des Codes

in unterschiedlichen Farben darstellt und Sie noch auf andere Weisen

bei der Eingabe unterstützt.

Für Windows-Anwender ist das kostenlose Programm Notepad++ der

perfekte Startpunkt. Linux-Anwendern lege ich für die ersten Versuche

Gedit, Kate oder KWrite ans Herz. Unter macOS bietet sich TextMate

an. Für Fortgeschrittene sind plattformübergreifend die EditorenAtom,

Brackets oder Visual Code empfehlenswert.

Entwicklungsumgebung: Ein Editor hilft nur bei der Code-Eingabe.

Entwicklungsumgebungenunterstützen Sie außerdembei der Struktu-

rierung Ihres Codes, bei der Fehlersuche, beim Kompilieren und beim

Beheben von Fehlern, bei der Dokumentation, bei der Versionsver-

waltung etc. Aus diesen Gründen ist eine Entwicklungsumgebung für

größere Projekte nahezu zwingend erforderlich. Für Java-Einsteiger gilt

dies aber nicht! Alle Java-IDEs bringen mit ihren unzähligen Funktio-

nen eine zusätzliche Komplexität in den Lernprozess und erschweren

diesen mehr, als sie ihn fördern.

28

“buch” — 2017/12/1 — 11:49 — page 29 — #25

1

1.3 Installation unter Windows

Die drei populärsten Java-IDEs sind Eclipse, IntelliJ IDEA und NetBeans.

Ich konzentriere mich in diesem Buch auf die IntelliJ IDEA, die aus

meiner Sicht die beste Funktionalität bietet und gleichzeitig einsteiger-

tauglich ist.

1.3 Installation unter Windows

Die aktuelle JDK-Version der Java Standard Edition finden Sie auf der fol-

genden Seite zum kostenlosen Download:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Wenn Sie mit einer 64-Bit-Version von Windows arbeiten, sollten Sie auch

die 64-Bit-Version des JDK herunterladen. Die rund 360 MByte große

EXE-Datei führen Sie nun aus und installieren so alle erforderlichen Pro-

gramme und Bibliotheken (siehe Abbildung 1.1). Sie können dabei alle Vor-

einstellungen unverändert übernehmen. Einzig die Option Java-Inhalte

im Browser aktivieren sollten Sie aus Sicherheitsgründen deaktivieren.

(Die meisten Browser blockieren Java ohnedies.)

Abbildung 1.1 JDK-Installation unter Windows

29

Page 6: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 30 — #26

1 Hello World!

Path-Variable einstellen

Als Teil des JDK werden die Programme java.exe und javac.exe installiert,

üblicherweise in das Verzeichnis C:\Program Files\Java\jdk-9\bin. Wenn

Sie manuell Java-Programme kompilieren möchten, also ohne eine Ent-

wicklungsumgebung zu verwenden, müssen Sie dieses Verzeichnis in die

Windows-Systemvariable Path einfügen.

Abbildung 1.2 Die Path-Variable unter Windows verändern

Die erforderliche Konfiguration ist leider ein wenig umständlich: In der

Windows-Systemsteuerung suchen Sie nach dem Punkt Systemumge-

30

“buch” — 2017/12/1 — 11:49 — page 31 — #27

1

1.3 Installation unter Windows

bungsvariablen bearbeiten. Dieser führt in den Dialog Systemeigen-

schaften. In dessen Dialogblatt Erweitert finden Sie den Button Umge-

bungsvariablen. Damit öffnen Sie einen weiteren Dialog, in dem Sie die

Systemvariable Path zur Bearbeitung öffnen.

Mit Neu fügen Sie der Path-Variable das Verzeichnis C:\Program Files\

Java\jdk-9\bin hinzu (siehe Abbildung 1.2). Zur Vermeidung von Tippfeh-

lern können Sie den Pfad im Windows-Explorer kopieren und im Dialog

Umgebungsvariable bearbeiten einfügen. Lassen Sie die restlichen Ein-

stellungen unverändert! Nur für den Fall, dass Sie auf Ihrem Rechner auch

schon Java 8 installiert hatten, entfernen Sie den betreffenden Eintrag.

Wenn Sie sich vergewissern möchten, dass alles funktioniert hat, starten

Sie das Programm Eingabeaufforderung (Programm cmd.exe) und führen

dort das Kommando javac -version aus. Das Ergebnis muss wie folgt aus-

sehen:

> javac -version

javac 9

Notepad++ und IntelliJ IDEA installieren

Den ausgezeichneten Editor Notepad++ können Sie von der folgenden

Webseite kostenlos herunterladen und unkompliziert installieren:

https://notepad-plus-plus.org

Die kostenlose Community-Variante der IntelliJ IDEA (Integrated Develop-

ment Environment Application) laden Sie von der folgenden Seite herunter:

https://www.jetbrains.com/idea/download

Zur Installation führen Sie die resultierende *.exe-Datei aus. Im Instal-

lationsprogramm belassen Sie alle Voreinstellungen. Wenn Sie möchten,

können Sie ein Desktop-Icon einrichten, damit Sie das Programm nicht

im Startmenü suchen müssen (Option Create Desktop shortcut • 64-

bit launcher).

Beim ersten Start müssen Sie sich zwischen einem hellen und einem

dunklen Farbschema entscheiden. Das Farbschema können Sie bei Bedarf

31

Page 7: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 32 — #28

1 Hello World!

später in den Einstellungen ändern. IntelliJ IDEA bietet Ihnen dann noch

die Möglichkeit an, zusätzliche Plugins zu installieren. Darauf sollten Sie

verzichten. Die IntelliJ IDEA enthält bereits in der Grundausstattungmehr

Funktionen, als Sie momentan benötigen.

Sobald Sie das erste Java-Projekt starten (CreateNewProject), müssen Sie

der IntelliJ IDEA einmalig mitteilen, wo sich die JDK befindet. Auf diesen

Schritt gehe ich in Abschnitt 1.8, »Hello IntelliJ IDEA«, näher ein.

1.4 Installation unter Ubuntu Linux

Jede Linux-Distribution stellt Java-Pakete zur Verfügung, die unkompli-

ziert und schnell installiert werden können. Unter Ubuntu Linux öffnen

Sie dazu ein Terminalfenster und führen dieses Kommando aus:

sudo apt install openjdk -9-jdk

Damit wird eine Open-Source-Variante von Java 9 installiert. Vergewis-

sern Sie sich in einem Terminalfenster, dass alles funktioniert hat! java

-version und javac -version zeigen an, welche Java-Version installiert

wurde (siehe Abbildung 1.3).

Abbildung 1.3 Java wurde erfolgreich installiert.

Original-Java von Oracle installieren

Im Herbst 2017 waren die Open-Source-Pakete auf der Basis von openjdk-9

leider noch nicht ganz ausgereift. Gerade für das Zusammenspiel mit

IntelliJ waren zudiesemZeitpunkt die vonOracle angebotenen Java-Pakete

vorzuziehen.

32

“buch” — 2017/12/1 — 11:49 — page 33 — #29

1

1.4 Installation unter Ubuntu Linux

Am einfachsten gelingt die Installation mit dem oracle-java9-installer

aus der webupd8-Paketquelle. DieWebseite http://www.webupd8.org ist eine

bewährte Quelle für unkomplizierte Java-Installationen für Ubuntu und

Debian. Die folgenden Kommandos zeigen beispielhaft für Ubuntu 16.04

die Installation des originalen Java 9 von Oracle:

sudo apt purge openjdk*sudo add-apt -repository ppa:webupd8team/javasudo apt update

sudo apt install oracle -java9-set-default

IntelliJ IDEA installieren

Um IntelliJ IDEA unter Linux zu installieren, laden Sie von der folgenden

Webseite das komprimierte TAR-Archiv der Community-Version herunter

und speichern es:

https://www.jetbrains.com/idea/download

Anschließend führen Sie die folgenden Kommandos aus, um die Entwick-

lungsumgebung imHeimatverzeichnis auszupacken und zu starten:

cd

tar xzf Downloads/ideaIC -nnn.tar.gz./idea -IC-nnn/bin/idea.sh

Abbildung 1.4 IntelliJ IDEA unter Linux im Dock verankern

33

Page 8: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 34 — #30

1 Hello World!

Damit Sie IntelliJ IDEA in Zukunft starten können, ohne jedes Mal ein Ter-

minalfenster öffnen und das Script idea.shmanuell ausführen zumüssen,

führen Sie in IntelliJ das Kommando Tools • Create Desktop Entry aus.

Damit steht IntelliJ nun im Startmenü zur Auswahl. Nach dem Start kön-

nen Sie es im Dock per Kontextmenü zu den Favoriten hinzufügen (siehe

Abbildung 1.4).

1.5 Installation unter macOS

Das aktuelle JDK für macOS steht hier zumDownload bereit:

http://www.oracle.com/technetwork/java/javase/downloads

Zur Installation öffnen Sie das heruntergeladene DMG-Image per Dop-

pelklick und führen dann den darin enthaltenen PKG-Installer aus. Auch

unter macOS können Sie sich in einem neu geöffneten Terminal-Fenster

mit dem Kommando javac -version davon überzeugen, dass der Java-

Compiler nun in der richtigen Version zur Verfügung steht.

IntelliJ IDEA installieren

Die kostenlose Community Edition der IntelliJ IDEA finden Sie auf der fol-

genden Seite zumDownload:

https://www.jetbrains.com/idea/download

Die heruntergeladene DMG-Datei öffnen Sie nun per Doppelklick. Danach

verschieben Sie das IntelliJ-Icon in das Verzeichnis Anwendungen. Fertig!

1.6 »Hello World« mit javac und java manuell übersetzen

Ich empfehle Ihnen, die erste Version des Hello-World-Programms nicht

mit der IntelliJ IDEA oder einer anderen Entwicklungsumgebung zu ent-

wickeln. Es trägt sehr zum Verständnis für Java bzw. für den Prozess des

Programmierens bei, wenn Sie einmal die manuellen Abläufe kennenler-

nen und sehen, mit wie wenig Overhead ein Java-Programm entwickelt

werden kann.

34

“buch” — 2017/12/1 — 11:49 — page 35 — #31

1

1.6 »Hello World« mit javac und java manuell übersetzen

Code verfassen und speichern

Der Code für das Hello-World-Programm umfasst die folgenden Zeilen,

deren Bedeutung ich Ihnen etwas weiter unten genauer erläutern werde:

class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello World!");}

}

Beispielprogramme

Alle Beispielprogramme des Buchs finden Sie hier zum Download:

www.rheinwerk-verlag.de/4397

Achten Sie darauf, dass Sie den Text exakt abschreiben, inklusive aller

Klammern und Strichpunkte. Anschließend speichern Sie die Datei unter

dem Namen HelloWorld.java in einem beliebigen Verzeichnis. Der Datei-

namemussmit .java enden, und ermuss exakt mit der Bezeichnungnach

dem Schlüsselwort class übereinstimmen. Das gilt auch für die Groß- und

Kleinschreibung! Übrigens ist es üblich, dass der Klassenname mit einem

großen Anfangsbuchstaben beginnt – so wie hier HelloWorld.

Abbildung 1.5 Der Hello-World-Code in Notepad++

Zur Code-Eingabe starten Sie einen beliebigen Editor, der Ihren Text

ohne irgendwelche Formatierung speichernkann.MicrosoftWord ist nicht

35

Page 9: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 36 — #32

1 Hello World!

geeignet! Unter Windows können Sie zur Not das ProgrammNotepad ver-

wenden. Viel besser geeignet ist Notepad++ (siehe Abbildung 1.5). Beachten

Sie, dass die farbige Hervorhebung des Codes erst funktioniert, nachdem

Sie den Code in einer Datei mit der Kennung .java gespeichert haben –

denn erst damit weiß Notepad++, dass es sich um Java-Code handelt.

Das Programm kompilieren und ausführen

Als Nächstes geht es darum, aus dieser Textdatei ein durch den Java-

Interpreter ausführbares Programm zu machen. Der von Ihnen eingege-

bene Code muss also in ein vom Computer lesbares Format umgewandelt

werden. Diesen Umwandlungsprozess nennt man Kompilieren. Verant-

wortlich dafür ist der Java-Compiler, also das Kommando javac.

Um javac auszuführen, öffnen Sie unterWindowsmit (š)cmd (¢) eine Ein-

gabeaufforderung. Alternativ können Sie auch die PowerShell verwenden.

Unter Linux oder macOS öffnen Sie ein Terminalfenster.

Mit cdwechseln Sie nun in dasVerzeichnis, in demSie die Java-Datei gespei-

chert haben. javac Name.java kompiliert den Java-Code zu einer sogenann-

ten Klassendatei Name.class.

cd code -verzeichnis

javac HelloWorld.java

Abbildung 1.6 »Hello World« unter Windows ausführen und kompilieren

Die Klassendatei enthält Byte-Code. Das ist eine binäre Darstellung Ihres

Codes, die von jedem Java-Interpreter ausgeführt werden kann – egal,

unterwelchemBetriebssystem. ZumAusführenübergeben Sie denNamen

der Klassendatei ohne die Endung .class an den Java-Interpreter java

(siehe Abbildung 1.6):

36

“buch” — 2017/12/1 — 11:49 — page 37 — #33

1

1.6 »Hello World« mit javac und java manuell übersetzen

java HelloWorldHello World!

Unser Beispielprogramm gibt lediglich eine Zeile mit dem Text Hello

World! aus, aber im weiteren Verlauf dieses Buchs präsentiere ich Ihnen

natürlich eine Menge interessantere Programme.

Unter LinuxundmacOSgehen Sie imPrinzipwie unterWindows vor: Zum

Verfassen des Codes verwenden Sie Gedit, Kate, Vi, Emacs, TextEdit oder

einen beliebigen anderen Texteditor. In einem Terminalfenster kompilie-

ren Sie dann den Code und führen ihn aus.

Kompilieren und Ausführen in einem Kommando

Linux und macOS bieten eine unkomplizierte Möglichkeit, zwei Kom-

mandos miteinander zu verknüpfen. Dazu geben Sie zwischen den bei-

den Kommandos die Zeichen && an. Dieser Operator bewirkt, dass das

zweite Kommando nur ausgeführt wird, wenn das erste erfolgreich war,

d. h., wenn der Java-Compiler keine Fehler geliefert hat.

javac HelloWorld.java && java HelloWorld

Nichts als Fehlermeldungen!

Wenn Ihnen auch nur ein winziger Fehler bei der Code-Eingabe unter-

läuft, liefert javac eine oder mehrere Fehlermeldungen. Oft ist nur

ein fehlender Strichpunkt oder eine vergessene Klammer schuld. Die

Fehlersuche gestaltet sich oft schwierig: Die englischsprachigen Fehler-

meldungen sind schwer zu interpretieren und weisen nicht immer auf

die tatsächliche Ursache hin.

Grundsätzlich ist es zweckmäßig, sich bei der Fehlersuche auf die

erste Fehlermeldung zu konzentrieren. Ist der erste Fehler behoben, ver-

schwinden oft auch alle daraus resultierenden Folgefehler. Suchen Sie

also den Fehler, beheben Sie ihn, speichern Sie die Code-Datei, und füh-

ren Sie dann javac Name.java neuerlich aus.

37

Page 10: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 38 — #34

1 Hello World!

Der Hello-World-Code

Ich bin Ihnen noch die Erklärung schuldig, was die fünf Zeilen des Hello-

World-Codes eigentlich bedeuten. Schließlich geht es nicht an, dass bereits

die ersten Code-Zeilen unbegreiflich sind, oder? Leider ist eine exakte

Beschreibung von »Hello World!« komplizierter, als Sie vielleicht denken.

Erwarten Sie nicht, dass Sie die folgenden Absätze wirklich auf Anhieb ver-

stehen. In ihnen kommen viele Begriffe vor, die ich Ihnen erst imweiteren

Verlauf des Buchs in aller Ruhe erkläre.

class HelloWorld {

Das Schlüsselwort class leitet den Code für eine Klasse ein. Eine Klasse ist

ein abgeschlossener Code-Bereich. Die Strukturierungvon Code in Klassen

bietet eineMenge Vorteile, sowohl bei der Nutzung dieser Klassen in ande-

ren Code-Teilen als auch bei der Aufteilung des Codes in überschaubare

Code-Portionen.

Auf class folgt der Name der Klasse. Klassennamen beginnen immer mit

einem Großbuchstaben. Dem Klassennamen folgt schließlich der Code,

der die Merkmale der Klasse definiert. Damit der Java-Compiler weiß, wo

dieser Code beginnt und wo er endet, steht am Anfang die Klammer { und

am Ende der Klasse die Klammer }.

public static void main(String[] args) {

Der eigentliche Code einer Klasse besteht aus sogenannten Methoden.

Methoden bündeln mehrere Zeilen Code zu einer Einheit, die eine

bestimmte Aufgabe erledigt. Im Hello-World-Programm gibt es nur eine

Methode mit dem Namen main. Diese Methode hat dafür eine herausra-

gendeBedeutung: main gilt als Startpunkt des Programms.Die Ausführung

eines Java-Programms beginnt also immer in main.

Die Methode main hat drei besondere Eigenschaften. Sie werden durch

Schlüsselwörter ausgedrückt, die vor demMethodennamen stehen:

Die Methode ist public, also öffentlich bzw. von außen zugänglich und

nicht innerhalb der Klasse versteckt.

38

“buch” — 2017/12/1 — 11:49 — page 39 — #35

1

1.6 »Hello World« mit javac und java manuell übersetzen

Sie ist static (statisch). Das bedeutet, dass der Code der Methode aus-

geführt werden kann, ohne dass vorher ein Objekt der Klasse (eine

Instanz der Klasse) erzeugt werdenmuss.

DieMethode liefert kein Ergebnis. Daraufdeutet das Schlüsselwort void

hin (wörtlich übersetzt: »nichtig, leer«).

Dem Methodennamen main folgt schließlich in runden Klammern eine

Liste von Parametern. main hat genau einen Parameter, den wir args

genannt haben. String[] bedeutet, dass an diesen Parameter mehrere Zei-

chenketten übergeben werden können (genau genommen ein Array von

Zeichenketten). Die Zeichenketten enthalten die Parameter, die beim Start

eines Java-Programms angegeben werden können.

Unser Hello-World-Programm wertet den Parameter args gar nicht aus.

Dennoch muss der Parameter samt dem Datentyp String[] angegeben

werden! Vergessen Sie das, erkennt der Java-Compiler main nicht als Start-

methode. Beim Versuch, das Java-Programm auszuführen, tritt dann die

Fehlermeldung auf, dass eine korrekt definierte main-Methode fehlt.

Der Code derMethode beginntmit der Klammer { und endetmit der dazu-

gehörenden Klammer }.

System.out.println("Hello World");

System.out.println gibt den nachfolgenden, in runden Klammen angege-

benen Parameter auf demBildschirm aus. Bei unserem Beispielprogramm

handelt es sich um eine durch Anführungszeichen gekennzeichnete Zei-

chenkette. println kann aber auch Zahlen und andere Daten ausgeben.

println ist eine in der Java-Bibliothek vordefinierte Methode. Sie können

diese Methode also nutzen, ohne sie vorher selbst definiert zu haben.

Methoden werden üblicherweise auf Objekte angewendet. Als Objekt gilt

in diesem Fall die Standardausgabe, mit der Ausgaben auf den Bildschirm

bzw. in das gerade aktive Terminal geleitet werden. Der Zugriff auf das

Objekt erfolgt hier durch System.out. Dabei bezeichnet System den Namen

der System-Klasse, die ebenfalls durch die Java-Bibliothek vorgegeben ist.

out ist wiederum eine statische Variable (ein Attribut oder auf Englisch

39

Page 11: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 40 — #36

1 Hello World!

Field) dieser Klasse, das auf das Standardausgabeobjekt verweist. Dieses

Objekt wird von Java automatisch beim Start des Programms erzeugt.

Der Vollständigkeit halber sei noch erwähnt, dass sich die System-Klasse

im Paket java.lang befindet. Weil dieses Paket besonders wichtige Klassen

bzw. Typen enthält, dürfen diese verwendet werden, ohne java.lang vor-

anzustellen. (Die Java-Bibliothek enthält noch viele weitere Pakete. Deren

Verwendung erfordert aber eine import-Anweisung oder die explizite Nen-

nung des Paketnamens.)

Die gesamte Anweisung endet wie alle Java-Anweisungen mit einem

Strichpunkt. Diesen zu vergessen zählt zu den häufigsten Fehlern, die Java-

Einsteiger unweigerlich machen.

}

}

Der Programmcode endet schließlich mit zwei geschwungenen Klam-

mern. Die erste gibt an, dass an dieser Stelle die Definition der Methode

main endet. Die zweite Klammer macht dem Compiler klar, dass nun auch

der Code der Klasse zu Ende geht.

Die reine OO-Lehre

Es gibt zwei Ansätze, den Umgang mit Java zu vermitteln bzw. zu unter-

richten. Die erste Variante ist das, was ich salopp als die reine Lehre der

Objektorientierung (OO) bezeichne. Bücher, die nach diesem Schema auf-

gebaut sind, beginnen mit einem langen Theorieteil, der die Konzepte

der objektorientierten Programmierung erläutert. Erstwenn das erledigt

ist, folgen die ersten richtigen Code-Beispiele.

Ich bin ein Anhänger der zweiten Variante: Ich setze die fünf Zeilen des

Hello-World-Programms im weiteren Verlauf des Buchs einfach als gott-

gegeben voraus und führe Sie zuerst in die (einfacheren) Grundlagen der

Programmierung ein. Um die Beispiele der folgenden Kapitel auszupro-

bieren, verändern Sie nur den Inhalt der main-Methode. Wie Klassen und

Methoden exakt funktionieren, ist vorerst unwichtig.

40

“buch” — 2017/12/1 — 11:49 — page 41 — #37

1

1.6 »Hello World« mit javac und java manuell übersetzen

Sie werden sehen, dass man eine Menge interessante Beispiele entwi-

ckeln und noch mehr lernen kann, auch ohne zu wissen, wodurch sich

Klassen von Objekten unterscheiden und wann statischen bzw. nicht-

statischen Methoden der Vorzug zu geben ist!

Da selbst einfache Java-Programme nicht ohne Objektorientierung aus-

kommen, finden Sie im folgenden Kapitel eine erste, eher allgemein

gehaltene Einführung in die objektorientierte Programmierung (siehe

Abschnitt 2.1, »Die Idee des objektorientierten Programmierens«). Alle

weiteren Details folgen dann ab Kapitel 11, »Klassen«, in dem ich Ihnen

die Syntax der objektorientierten Programmierung im Detail vorstelle

und das Schlüsselwort class richtig erkläre. Erst dann werden Sie das

scheinbar so simple Hello-World-Programm restlos verstehen.

Zulässige Codeänderungen

Ich habe Sie gebeten, das Programm möglichst exakt abzuschreiben. Sie

müssen die Syntax von Java einhalten, sonst funktioniert das Programm

nicht. Gewisse Freiheiten bleiben Ihnen aber:

Klassenname: Sie können den Klassennamen frei wählen. Anstelle von

HelloWorld funktioniert auch MeinErstesProgramm oder Xyz oder Main. Der

Klassenname darf keine Leer- oder Sonderzeichen enthalten (mit der

Ausnahme von _), und er sollte mit einem Großbuchstaben beginnen.

Wichtig: Der Dateiname muss mit dem Klassennamen übereinstim-

men! Wenn Sie Ihr Programm mit class Xyz beginnen, dann müssen

Sie die Datei unter demNamen Xyz.java speichern.

Eine übliche Schreibweise für längereNamen ist die sogenannteUpper-

Camel-Case-Notation: Dabei beginnt jedes neueWort mit einem Groß-

buchstaben – also z. B. MeineLangeKlasse.

Parametername: Es ist Ihnen auch freigestellt, wie Sie den Parame-

ter in der main-Methode nennen. main(String[] meineparameter) ist also

absolut korrekt. Wie im Klassennamen müssen Sie auf Leer- und Son-

derzeichen verzichten. Parameternamen haben üblicherweise einen

kleinen Anfangsbuchstaben.

41

Page 12: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 42 — #38

1 Hello World!

Abstände und Einrückungen: Sie dürfen den Code beliebig einrücken,

leere Zeilen zwischen den Anweisungen einfügen und an gewissen

Stellen sogar Leerraum innerhalb vonAnweisungen verwenden. Umge-

kehrt können Siemöglichst viele Anweisungen, Klammern etc. in einer

einzigen Zeile unterbringen.

Die folgenden beiden Listings zeigen zwei Varianten des Hello-World-Pro-

gramms. Beide sind syntaktisch korrekt, auch wenn der Codemerkwürdig

aussieht, vor allem in den Augen erfahrener Programmierer.

Die zwei Listings zeigen Ihnen noch ein Sprachelement von Java: // leitet

einen Kommentar ein, der bis zum Ende der Zeile reicht. Damit können

Sie Erläuterungen in den Code einbauen, die vom Java-Compiler ignoriert

werden.

// Syntaxfreiheiten in Java , Beispiel 1

class Xyz

{public static

void main(String[] abc)

{System . out . println ( "Hello World!" )

;}}

// Syntaxfreiheiten in Java , Beispiel 2class Kurz{public static void main(String[] x){

System.out.println("Hello World!");}}

Java-Interna

Losgelöst von der Syntax von Java, die in diesem Buch im Vordergrund

steht, möchte ich Ihnen an dieser Stelle drei besonders wichtige Begriffe

aus der vielschichtigen Welt der Java-Interna vorstellen. Diese Begriffe

sind zwar für das eigentliche Programmieren nicht relevant; wenn Sie sie

kennen, werden Sie aber besser verstehen, wie Java hinter den Kulissen

funktioniert.

42

“buch” — 2017/12/1 — 11:49 — page 43 — #39

1

1.6 »Hello World« mit javac und java manuell übersetzen

Byte-Code: Das Kommando javac wandelt den Quelltext Ihres Pro-

gramms in eine binäre Darstellung um, die Byte-Code genannt wird.

Diese Umwandlung bezweckt mehrere Dinge:

– Erstens stellt eine erfolgreiche Umwandlung in Byte-Code sicher,

dass Ihr Code syntaktisch korrekt ist.

– Zweitens kann die nachfolgende Ausführung des Codes dank der

optimierten Darstellung des Programms effizienter erfolgen.

– Und drittens ist der Byte-Code plattformunabhängig. Das bedeu-

tet, dass beispielsweise ein unter Windows kompiliertes Java-Pro-

gramm später auch unter Linux ausgeführt werden kann.

Java-Byte-Code wird in Dateien mit der Endung .class gespeichert.

Java Virtual Machine: Für die eigentliche Ausführung des Byte-Codes

ist das Kommando java verantwortlich. Es übergibt den Byte-Code

an die sogenannte Java Virtual Machine (JVM). Der in der JVM inte-

grierte Just-in-Time-Compiler (JIT-Compiler) wandelt den Byte-Code in

Maschinen-Code der jeweiligen Hardware-Plattform um. Die JVM mit

dem JIT-Compiler ist eine Grundkomponente des Java Runtime Envi-

ronments (JRE).

Die JVM stellt dem Java-Programm Hilfsfunktionen zur Verfügung

und kümmert sich beispielsweise darum, dass nicht mehr benötigte

Objekte durch den sogenannten Garbage Collector automatisch aus

dem Speicher entfernt werden.

Java-Bibliothek: Beim Programmieren in Java ist es nicht notwendig,

das Rad ständig neu zu erfinden. Es existiert ein riesiges Fundament

von oft benötigten Grundfunktionen, auf dem Sie aufbauen können.

Unzählige Pakete mit Klassen und Methoden der von Sun bzw. Oracle

entwickelten Java-Bibliothek warten darauf, von Ihnen entdeckt und

eingesetzt zu werden. Die Methode println im Hello-World-Programm

war dafür das erste Beispiel. Die vollständige Dokumentation der Java-

Bibliothek finden Sie hier:

https://docs.oracle.com/javase/9/docs/api

Damit Sie die Dokumentation richtig deuten können, müssen Sie aller-

dings zuerst Grundkenntnisse in Java erwerben.

43

Page 13: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 44 — #40

1 Hello World!

1.7 Die Java-Shell

Die für Einsteiger vermutlich nützlichste Neuerung in Java 9 besteht

darin, dass es nun (wie für viele andere Sprachen auch) einen Kommando-

interpreter gibt, die Java-Shell (siehe Abbildung 1.7). In der Fachsprache

heißt dieses Feature auch Read-Eval-Print-Loop (REPL). Die Java-Shell wird

durch die Ausführung von jshell in cmd.exe bzw. in einem Terminalfenster

gestartet. Anschließend können Sie einzelne Java-Kommandos eingeben,

die dann sofort ausgeführt werden. Um die Zeichenkette »Hello World!«

auszugeben, müssen Sie nur das entsprechende System.out.println-

Kommando eingeben – ohne die Definition einer Klasse und ohne main-

Methode.

> jshell

Welcome to JShell -- Version 9

For an introduction type: /help introjshell > System.out.println("Hello World!")

Hello World!

Abbildung 1.7 Die JShell erleichtert das unkomplizierte Testen von Java-

Anweisungen.

Abweichend von den Java-Syntaxregeln ist es nicht erforderlich, ein-

zelne Anweisungen mit einem Strichpunkt abzuschließen. Selbst auf

System.out.println können Sie in der Regel verzichten. Wenn eine Anwei-

sung ein Ergebnis liefert, wird dieses in jedem Fall ausgegeben.

44

“buch” — 2017/12/1 — 11:49 — page 45 — #41

1

1.7 Die Java-Shell

jshell > String s = "abcde"s ==> "abcde"

jshell > s.length()$8 ==> 5

Selbst mehrzeilige Konstrukte sind erlaubt. Das folgende Beispiel zeigt

eine Schleife, in der die Variable i die Werte 0, 1 und 2 annimmt:

jshell > for(int i=0; i<3; i++) {

... > System.out.println(i);

... > }0

12

Die JShell ist gerade für Java-Einsteiger ungemein praktisch. Sie können

damit Sprachfunktionen und Syntaxdetails ohne den Overhead eines voll-

ständigen Java-Programms ausprobieren. Die sofortige Syntaxkontrolle

für jede Zeile ist zudem eine große Hilfe.

Fortgeschrittene Funktionen

Bei der Code-Eingabe in der JShell helfen einige Tastenkürzel (siehe

Tabelle 1.1). Wenn Sie beispielsweise "abc" eingeben und dann (Alt)+(F1),

(I) drücken, schlägt die JShell vor, "abc" in einer String-Variablen zu spei-

chern (String ... = "abc"). Je nachdem,unterwelchem Betriebssystem Sie

die JShell ausführen, kann es sein, dass Sie anstelle von (Alt)+(F1) das Tas-

tenkürzel (Alt)+(¢) drückenmüssen.

Wenn Sie längere Code-Passagen eingegeben haben, ist die nachträgliche

Veränderung im Zeileneditor mühsam. Abhilfe schafft das Kommando

/edit, das alle Ihre Eingaben in einem simplen Editor präsentiert. Dort kön-

nen Sie Änderungen durchführen. Beim Verlassen des Editors mit Accept

wird der gesamte Code nochmals durch die Java-Shell ausgeführt.

/imports listet auf, welche Bibliotheken »importiert« sind, d. h., aus wel-

chen Paketen der Java-Standardbibliothek Sie unkompliziert Klassen ver-

wenden können. Die JShell unterscheidet sich von normalem Java-Code

45

Page 14: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 46 — #42

1 Hello World!

auch dadurch, dass einige grundlegende Pakete standardmäßig impor-

tiert werden, z. B. java.io.*, java.math.* und java.util.*. (Was Importe

sind, erfahren Sie in Abschnitt 2.2, »Java-Syntax«, und noch detaillierter in

Kapitel 19, »Pakete, Bibliotheken undModule«.)

Mit /save dateiname können Sie alle bisherigen Eingaben in einer Textdatei

speichern. In einer späteren JShell-Sitzung können Sie diese Eingaben mit

/open dateiname wieder laden und ausführen. Einen Überblick über noch

mehr eingebaute JShell-Kommandos erhalten Sie mit /help.

Kürzel Bedeutung

Cursortasten Blättert durch die bisherigen Eingaben.

(ÿ) Vervollständigt die Eingabe.

(ª)+(ÿ) Zeigt die Online-Hilfe zum Schlüsselwort.

(Alt)+(F1), (I) Fügt einen passenden Import ein.

(Alt)+(F1), (V) Fügt eine passende Variablendeklaration ein.

(Strg)+(D) Beendet die JShell.

Tabelle 1.1 Wichtige JShell-Tastenkürzel

1.8 Hello IntelliJ IDEA

Dies ist ein Java-Buch, kein IntelliJ-IDEA-Buch! Auch wenn sich dieser

Abschnitt primär um Kommandos, Dialoge und Fenster der IntelliJ-Ent-

wicklungsumgebung dreht, werde ichmich im weiteren Verlauf des Buchs

auf Java konzentrieren und die IntelliJ IDEA nur noch am Rande erwäh-

nen. Für alle, die IntelliJ als Entwicklungsumgebung verwenden, fasst

Anhang A, »Crashkurs IntelliJ IDEA«, die wichtigsten Begriffe und Techni-

ken zusammen.

Lassen Sie sich nicht von der Länge dieses Abschnitts abschrecken. Die

BeschreibungderGrundfunktionender IntelliJ IDEA nimmt zwar viel Platz

46

“buch” — 2017/12/1 — 11:49 — page 47 — #43

1

1.8 Hello IntelliJ IDEA

in Anspruch, aber sobald Sie sich einmal an das Programmgewöhnt haben,

können Sie das komplette Hello-World-Programm in 30 Sekunden erstel-

len und ausführen. (Nicht gelogen, ich habe es mit der Stoppuhr getestet!)

JDK einrichten

Wenn Sie im Startdialog der IntelliJ IDEA zumerstenMal Create New Pro-

ject ausführen, müssen Sie im nächsten Dialog das Project SDK für das

neue Projekt auswählen (siehe Abbildung 1.8, links). Je nach Installation

kann es sein, dass das Listenfeld bereits automatisch den richtigen Eintrag

java version 9 enthält. Oft enthält das Listenfeld aber gar keine Einträge.

Die IntelliJ IDEA weiß also nicht, wo sich die JDK auf Ihrer Festplatte oder

SSD befindet.

Abbildung 1.8 Beim Start des ersten Projekts muss das SDK eingerichtet werden.

In diesem Fall müssen Sie einmalig den Button New und dann den Lis-

teneintrag JDK anklicken und im nächsten Dialog das richtige Verzeichnis

auswählen (siehe Abbildung 1.8, rechts). Die üblichen Orte sind:

Windows: C:\Program Files\Java\jdk-9

macOS: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home

Linux: /usr/lib/jvm/java-1.9.0-openjdk-amd64 oder

/usr/lib/jvm/java-9-oracle

47

Page 15: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 48 — #44

1 Hello World!

Unter macOS können Sie das erforderliche Verzeichnis im Terminal ermit-

teln, indem Sie /usr/libexec/java_home ausführen. Vergleichbare Hilfsmit-

tel für Windows und Linux gibt es leider nicht.

Hintergründe

Die SDK-Einstellung ist notwendig, weil die IntelliJ IDEA neben Java/JDK

auch andere Sprachen mit deren Software Development Kits unterstützt.

Die Verwaltung der SDKs erfolgt mit File •Other Settings •Default Pro-ject Structure. Dieses Buch berücksichtigt aber nur Java.

Neues Projekt starten

In der IntelliJ IDEA gilt jedes Java-Programm als eigenes »Projekt«. Seine

Dateien werden in einem Projektverzeichnis gespeichert. Jedes Projekt hat

also sein eigenes Verzeichnis.

Um ein neues Projekt zu beginnen, klicken Sie im Startdialog auf Create

New Project, wählen den Projekttyp Java und das SDK java version 9.

Im nächsten Dialogblatt aktivieren Sie die Option Create project from

template. Die Option bewirkt, dass die EntwicklungsumgebungdenGroß-

teil des Hello-World-Codes bereits in die Code-Datei des neuen Projekts

einfügt. Sie sparen sich also etwas Tipparbeit.

Abbildung 1.9 Projekteinstellungen

Im dritten und letzten Dialogblatt müssen Sie noch drei Parameter ein-

stellen: den Projektnamen, den Speicherort und das Base package (siehe

Abbildung 1.9). Die ersten zwei Parameter bedürfen keiner Erklärung. Das

48

“buch” — 2017/12/1 — 11:49 — page 49 — #45

1

1.8 Hello IntelliJ IDEA

Base package gibt einen Namen an, der Ihren eigenen Klassen voran-

gestellt wird. Ich empfehle Ihnen, den Parameter für alle Projekte aus

diesem Buch einfach leer zu lassen und die folgende Info-Box vorerst zu

ignorieren!

Hintergründe

Bei einem großen Projekt mit vielen Klassen und externen Bibliotheken

ist das Base package sehr wohl zweckmäßig: Dann schafft die Einstel-

lung Klarheit, welche Klasse zu welchem Teil des Projekts gehört.

Die Angabe des Base package gilt als »guter Java-Stil«. Wenn Sie sich die-

ser Konvention unterwerfen möchten, geben Sie die Zeichenkette ohne

Leer- und Sonderzeichen (einzig _ ist erlaubt) in dieser Form an:

de.meine_domain.mein_projekt

Die ersten der durch Punkte getrennten Bestandteile entsprechen dem

Domänennamen Ihrer Webseite (oder dem Ihrer Firma oder Schule) in

umgekehrter Reihenfolge. Danach folgt der Projektname. Das Ziel dieser

Angabe ist es, dass sich Ihre Klassen aufgrund des Base-Package-Namens

weltweit von allen anderen gleichnamigen Klassen unterscheiden

lassen.

Die Angabe der Base-Package-Zeichenkette hat zwei Konsequenzen:

Zum einen werden die Code-Dateien Ihres Projekts in Unterverzeich-

nissen gespeichert (z. B. in src/de.meine-domain.mein-projekt anstatt

einfach in src), zum anderen enthält jede Code-Datei die Anweisung

package de.meine-domain.mein-projekt. Mehr Details zu Java-Paketen

und -Bibliotheken folgen in Kapitel 19.

Endlich Code

Wenn Sie beim Einrichten des neuen Projekts wie empfohlen die Option

Create project from template aktiviert haben, dann enthält das neue

Projekt bereits die Klassendatei Main.java mit allen für Hello World! erfor-

derlichen Code-Zeilen außer der System.out.println-Anweisung. Diese

49

Page 16: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 50 — #46

1 Hello World!

fügen Sie hinzu (siehe Abbildung 1.10). Anschließend kompilieren und

starten Sie das Programm durch einen Klick auf den grünen Pfeil-Button

bzw. durch das Menükommando Run •RunMain.

Abbildung 1.10 Ein typisches Setup in der IntelliJ IDEA: links die Projektübersicht,

rechts eine Code-Datei, unten die Ausgaben eines Programms.

IntelliJ(gent) oder nicht – das ist hier die Frage . . .

Zuletzt noch eine persönliche Einschätzung: Ausmeiner Sicht ist eine Ent-

wicklungsumgebung wie die IntelliJ IDEA eher ein notwendiges Übel als

die ideale Umgebung für Java-Einsteiger.

Klar, die IntelliJ IDEA bietet wie die anderen Java-Entwicklungsumgebun-

gen viele Eingabeerleichterungenundvermeidet eineMenge Fehler schon

im Vorfeld. Die IntelliJ IDEA ist aber ein sehr komplexes Programm, und

gerade Einsteiger verlieren sich leicht in den riesigen Menüs und den

unzähligen Teilfenstern, die wie von Geisterhand auftauchen und ver-

schwinden. Es besteht die Gefahr, dass Sie viel Zeit mit den Eigentüm-

50

“buch” — 2017/12/1 — 11:49 — page 51 — #47

1

1.9 Wiederholungsfragen

lichkeiten der IntelliJ IDEA vergeuden und sich nicht auf das eigentliche

Erlernen von Java konzentrieren.

Sie machen nichts verkehrt, wenn Sie Ihre ersten Experimente in der

Java-Shell durchführen. Erste Progamme verfassen Sie mit einem simplen

Editor und kompilieren diese dann manuell. Gut geeignete Editoren sind

z. B. Notepad++, Atom oder Visual Studio Code. Wenn Sie etwas Vertrauen

zu Java gefasst haben, ist es immer noch früh genug, sich mit der IntelliJ

IDEA oder einer anderen Entwicklungsumgebung anzufreunden.

1.9 Wiederholungsfragen

W1:Welchen Vorteil bietet Java im Vergleich zu C#?

W2:Wozu brauche ich die IntelliJ IDEA?

W3:Worin besteht der Unterschied zwischen JRE und JDK?

W4:Was ist der Unterschied zwischen java und javac?

W5:Wo ist die EXE-Datei meines Java-Programms?

W6:Wozu dient die Java Virtual Machine?

W7:Wozu dient die Java-Shell?

51

Page 17: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 90 — #86

Kapitel 4

Operatoren

Im Ausdruck a = b + c gelten die Zeichen = und + als Operatoren. Dieses

Kapitel stellt Ihnen alle Java-Operatoren vor – von den simplen Operato-

ren für die Grundrechenarten bis hin zu etwas diffizileren Operatoren zur

Bitarithmetik.

4.1 Überblick

Java kennt Operatoren zur Zuweisung von Variablen, zum Vergleich von

Werten, zur Berechnungmathematischer Ausdrücke etc. (siehe Tabelle 4.1).

Seit Java 8 dienen -> zur Formulierung von Lambda-Ausdrücken sowie ::

zur Angabe von Referenzen auf Methoden. Diese Operatoren stelle ich

Ihnen in Kapitel 14, »Lambda-Ausdrücke«, näher vor.

Priorität Operator Bedeutung

1� () Methodenaufruf

[] Zugriff auf Felder (Arrays)

. Zugriff auf Objekte, Methoden etc.

2� ++ -- Inkrement/Dekrement (Postfix, z. B. a++)

3� ++ -- Inkrement/Dekrement (Präfix, z. B. --b )

+ - Vorzeichen

! ~ logisches Nicht, binäres Nicht (NOT)

(typ) explizite Typumwandlung (Casting)

new Objekte erzeugen

Tabelle 4.1 Java-Operatoren

90

“buch” — 2017/12/1 — 11:49 — page 91 — #87

4

4.1 Überblick

Priorität Operator Bedeutung

4� * / % Multiplikation, Division, Restwert

5� + - Addition, Subtraktion

+ Verbindung von Zeichenketten

6� << >> Bits nach links/rechts schieben

>>> Bits ohne Vorzeichen nach rechts schieben

7� > >= Vergleich größer bzw. größer-gleich

< <= Vergleich kleiner bzw. kleiner-gleich

instanceof Typenvergleich

8� == != Vergleich gleich bzw. ungleich

9� & bitweises/logisches Und (AND)

10� ^ bitweises/logisches Exklusiv-Oder (XOR)

11� | bitweises/logisches Oder (OR)

12� && logisches Und (Short-circuit Evaluation)

13� || logisches Oder (Short-circuit Evaluation)

14� a ? b : c Auswahloperator (Ternary Operator)

15� = Zuweisung

+= -= Grundrechenarten und Zuweisung

*= /= %= Grundrechenarten und Zuweisung

<<= >>= >>>= Bit-Shift und Zuweisung

&= |= ^= Bit-Operationen und Zuweisung

Tabelle 4.1 Java-Operatoren (Forts.)

91

Page 18: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 92 — #88

4 Operatoren

Die erste Spalte der Operatorentabelle gibt die Priorität und Assoziativität

an:

Die Priorität bestimmt, in welcher Reihenfolge ein Ausdruck verar-

beitet wird. Beispielsweise wird beim Ausdruck a * b + c zuerst das

Produkt aus amal b berechnet und erst dann c addiert. Die Operatoren

* und / haben also eine höhere Priorität als + und -.

Die Assoziativität gibt an, ob gleichwertige Operatoren von links nach

rechts oder von rechts nach links verarbeitet werden sollen. Beispiels-

weise ist - (Minus) ein linksassoziativer Operator. Die Auswertung

erfolgt von links nach rechts. 17 - 5 - 3wird also in der Form (17 - 5)

- 3 verarbeitet und ergibt 9. Falsch wäre 17 - (5 - 3)= 15!

Der Zuweisungsoperator = ist dagegen rechtsassoziativ. Beim Ausdruck

a = b = 3 wird zuerst b=3 ausgeführt. Das Ergebnis dieser Zuweisung

(also 3) wird dann auch a zugewiesen, sodass schließlich die Variablen a

und b beide denWert 3 enthalten.

In den weiteren Abschnitten dieses Kapitels folgen Detailinformationen

zu einzelnen Operatoren. Beachten Sie, dass Java keine Möglichkeit bietet,

Operatoren neu zu definieren. Einige andere Programmiersprachen ken-

nen dieses Konzept unter demNamenOperator Overloading.

Tipp

Verwenden Sie im Zweifelsfall Klammern, um die Reihenfolge festzu-

legen. Das macht Ihren Code klarer und für andere Programmierer les-

barer!

4.2 Details und Sonderfälle

Natürlich müssen Sie die Operator-Tabelle aus dem vorigen Abschnitt

nicht auswendig können – zumal sie Operatoren enthält, deren richtige

Anwendung Sie erst nach dem Studium der weiteren Kapitel so richtig

verstehen werden. Vielmehr soll diese Tabelle auch für die Zukunft als

92

“buch” — 2017/12/1 — 11:49 — page 93 — #89

4

4.2 Details und Sonderfälle

zentrale Referenz dienen. Die folgenden Abschnitte erläutern den Einsatz

einiger Operatoren und weisen auf Sonderfälle hin.

Zuweisungen

Mit dem Zuweisungsoperator = speichern Sie elementare Daten bzw. Refe-

renzen auf Objekte in Variablen. Die Zuweisung kann wahlweise direkt bei

der Deklaration der Variablen oder später erfolgen.

int a = 3;

java.awt.Point p;

p = new java.awt.Point(2, 5);

Java unterstütztMehrfachzuweisungen:

a = b = 3; // weist a und b den Wert 3 zua = b = c = d; // weist a, b und c den Inhalt von d zu

Es ist auch möglich, eine Zuweisung mit einem Vergleich zu kombinieren.

Die Zuweisung muss dabei in Klammern gestellt werden! Im folgenden

Codewird eineDatei zeilenweisemit derMethode ReadLine ausgelesen. Die

gerade aktuelle Zeile wird in der Variablen line gespeichert. Wenndas Ende

der Datei erreicht ist, liefert ReadLine den Zustand null und die Schleife

wird abgebrochen.

String line;while((line = breader.ReadLine()) != null) {

... // Textzeile in line verarbeiten

}

Mathematische Operatoren

Die Anwendung der Operatoren +, -, * und / für die Grundrechenarten

bedarf keiner weiteren Erklärung. Beachten Sie, dass Java automatisch

Integer-Berechnungen durchführt, wenn alle Operanden ganze Zahlen

sind, sodass z. B. der Term 5/3 denWert 1 ergibt. Wenn die Berechnungmit

Fließkommaarithmetik durchgeführt werden soll, müssen Sie entweder

93

Page 19: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 94 — #90

4 Operatoren

eine Typumwandlungdurchführen (z. B. (double)i) oder Zahlen explizit als

Fließkommazahlen angeben (z. B. 2.0 statt 2).

Der Restwertoperator % berechnet den Rest einer Division mit einem ganz-

zahligen Ergebnis. Der Operator kann auch für Fließkommaberechnungen

verwendet werden. Im zweiten Beispiel ergibt die Division von 22.3 / 3.5

das Ergebnis 6. Der Rest wird mit 22.3 - 6 * 3.5 errechnet.

int i = 22;

System.out.println(i % 5); // liefert 2double d = 22.3;

System.out.println(d % 3.5); // liefert 1.30000

Hinweis

Bei negativen Argumenten gibt es verschiedene Möglichkeiten, den Rest

einer Division auszurechnen. Bei Java, C, C# und vielen anderen Program-

miersprachen stimmt das Vorzeichen des Ergebnisses immer mit dem

des Dividenden überein. -7 % 3 liefert somit –1. Das entspricht aber nicht

der euklidschen Modulo-Operation! Weitere Details zu diesem Thema

können Sie in der Wikipedia nachlesen:

http://en.wikipedia.org/wiki/Modulo_operation

Die Grundrechenarten können mit einer Zuweisung kombiniert werden,

was bei langen Variablennamen den Tipp- und Platzaufwandminimiert:

a+=1; // entspricht a = a + 1;

a-=2; // entspricht a = a - 2;a*=3; // entspricht a = a * 3;

a/=2; // entspricht a = a / 2;

a%=2; // entspricht a = a % 2;

Java kennt keinen Operator zum Potenzieren. a

bmüssen Sie unter Zuhilfe-

nahme derMethode Math.pow berechnen:

double d = Math.pow(2, 3); // ergibt 8.0

94

“buch” — 2017/12/1 — 11:49 — page 95 — #91

4

4.2 Details und Sonderfälle

In der Math-Klasse sind unzählige weitere mathematische Funktionen wie

sqrt, sin, cos sowie die Konstante PI enthalten.

Inkrement und Dekrement

Wie C kennt Java die Inkrement- und Dekrement-Operatoren ++ und --:

a++; // entspricht a = a + 1;

a--; // entspricht a = a - 1;

Diese Operatoren können wahlweise nach oder vor dem Variablennamen

angegeben werden (Postfix- bzw. Präfix-Notation). Im ersten Fall liefert

der Ausdruck den Wert vor der Veränderung, im zweiten Fall den Wert

nach der Veränderung. Das gilt gleichermaßen für Zuweisungen sowie für

Berechnungen.

int n = 7;

int a = n++; // a = 7, n = 8

int b = ++n; // b = 9, n = 9

Vergleiche

Zwei Zahlen können Sie mit ==, !=, <, <=, > und >= vergleichen (gleich,

ungleich, kleiner, kleiner-gleich, größer, größer-gleich). Derartige Verglei-

che benötigenwir in Kapitel 5, »Verzweigungen undSchleifen«. Vorweg ein

Beispiel:

int a=3, b=5;if(a == b) {

System.out.println("a und b sind gleich groß.");

} else {System.out.println("a und b sind unterschiedlich.");

}

Bei Objektvariablen testet ==, ob beide Variablen auf das gleiche Objekt ver-

weisen. != liefert true, wenn die Variablen auf unterschiedliche Objekte

zeigen. Der Inhalt der Objekte wird in beiden Fällen nicht berücksichtigt.

Details zumUmgangmit Klassen und Objekten folgen in Kapitel 11.

95

Page 20: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 96 — #92

4 Operatoren

Die Operatoren <, <=, > und >= stehen für allgemeine Objekte nicht zur Ver-

fügung. Wenn eine Klasse die Schnittstelle Comparable implementiert, kön-

nen Sie mit a.compareTo(b) feststellen, welches Objekt kleiner bzw. größer

ist. Was eine Schnittstelle ist undwie Sie selbst Comparable implementieren

können, lernen Sie in Kapitel 12, »Vererbung und Schnittstellen«.

if(a.compareTo(b)==0) { ... } // wenn a und b gleich

// groß sindif(a.compareTo(b) <0) { ... } // wenn a kleiner b gilt

if(a.compareTo(b) >0) { ... } // wenn a größer b gilt

Vorsicht

ZeichenkettenwerdenwieObjekte behandelt. Um zu testen, ob zwei Zei-

chenketten übereinstimmen, müssen Sie s1.equals(s2) ausführen. Ver-

meiden Sie unbedingt s1 == s2! Dieser Vergleich ist syntaktisch erlaubt,

aber fast immer falsch. Der Inhalt der Zeichenketten wird dabei nicht

berücksichtigt. Es ist durchaus möglich, dass zwei Zeichenketten (String-

Objekte) dieselben Zeichen enthalten, sich aber an unterschiedlichen

Orten im Speicher befinden.

String s1 = "abc";String s2 = "abc".toUpperCase();

System.out.println(s2 == "ABC"); // liefert false

System.out.println(s2.equals("ABC")); // liefert true

Boolesche Ausdrücke (verknüpfte Bedingungen)

Wenn Sie Bedingungen für Schleifen oder Abfragen formulieren, wollen

Sie oft mehrere Ausdrücke miteinander verknüpfen. Beispielsweise soll

eine bestimmte Reaktion Ihres Programms nur erfolgen, wenn a größer

als drei und b größer als fünf ist:

if(a>3 && b>5) { ... }

96

“buch” — 2017/12/1 — 11:49 — page 97 — #93

4

4.2 Details und Sonderfälle

Operator Bedeutung

! logisches Nicht, binäres Nicht (NOT)

& logisches Und (AND)

| logisches Oder (OR)

^ logisches Exklusiv-Oder (XOR)

&& logisches Und (Short-circuit Evaluation)

|| logisches Oder (Short-circuit Evaluation)

Tabelle 4.2 Verknüpfung von Bedingungen

Java sieht für die Verknüpfung mehrerer Bedingungen eine ganze Palette

boolescher Operatoren vor (siehe Tabelle 4.2). Sollten Sie noch niemit logi-

schen Operatoren zu tun gehabt haben, folgt hier eine kurze Erklärung:

Logisches Nicht: Entspricht einer Inversion. Aus true wird false und

umgekehrt.

Logisches Und: Bei a & bmuss sowohl a als auch b denWert true haben,

damit das Ergebnis true lautet.

Logisches Oder: Bei a | b reicht es aus, wenn a oder b, also zumindest

ein Ausdruck, denWert true hat, damit das Ergebnis true lautet.

Logisches Exklusiv-Oder: Für a ^ b gilt ein strenges Entweder-Oder:

Damit das Ergebnis true lautet, muss genau ein Ausdruck true und der

andere false sein.

Besonders interessant sind die Und- bzw. Oder-Varianten && und ||, die

eine sogenannte Short-circuit Evaluationunterstützen: Dabei wird die Aus-

wertung abgebrochen, sobald das Ergebnis feststeht:

Bei && endet die Auswertung beim ersten false-Teilergebnis. Das Ge-

samtergebnis ist dann zwingend false.

Bei || endet die Auswertung beim ersten true-Teilergebnis. In diesem

Fall ist das Gesamtergebnis zwingend true.

97

Page 21: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 98 — #94

4 Operatoren

Beispielsweise spielt der Inhalt von b im folgenden Beispiel überhaupt

keine Rolle. Da a nicht zutrifft, wird b gar nichtmehr ausgewertet.

boolean a = false;

boolean b = true;if(a && b) { ... }

Wenn a und b nicht einfach boolesche Variablen sind, sondern wenn an

dieser Stelle komplexe Ausdrücke oder zeitaufwendige Methodenaufrufe

stehen, dann spart die Short-circuit Evaluation Rechenzeit. Gleichzeitig

vermeidet sie auch die Auswertung von Teilausdrücken, die Fehler verur-

sachen können. Im folgenden Beispiel wird die Division a/b nur durchge-

führt, wenn b ungleich null ist:

int a=3, b=5;

if(b!=0 && a/b > 3) { ... }

Rechnen mit Bits

Die logischen Operatoren &, |, ^ und ~ (AND, OR, XOR und NOT) können

nicht nur für boolesche Ausdrücke verwendet werden, sondern auch für

ganze Zahlen. In diesem Fall gilt ihreWirkung jeweils bitweise. Wenn a und

b zwei ganze Zahlen sind, dann wendet Java in a & b die Und-Logik für alle

Bits von a und b an:

int a = 0b11100; // 28 = 0b11100

int b = 0b01111; // 15 = 0b01111System.out.println(a & b); // 12 = 0b01100

>> verschiebt die Bits einer Zahl um n Bits nach links (entspricht einer Divi-

sion durch 2

n

), << verschiebt entsprechend nach rechts (entspricht einer

Multiplikation mit 2

n

). >>> funktioniert wie >>, betrachtet die Zahl aber, als

wäre sie vorzeichenlos.

int a=16;int b=a << 2; // entspricht b=a*4, Ergebnis b=64

int c=a >> 1; // entspricht c=a/2, Ergebnis 8

98

“buch” — 2017/12/1 — 11:49 — page 99 — #95

4

4.3 Wiederholungsfragen

Sonstige Operatoren

Beim Ausdruck a ? b : c testet Java, ob a zutrifft (true ergibt). Ist das der

Fall, lautet das Ergebnis b, sonst c. Im Detail stelle ich Ihnen diesen Opera-

tor in Kapitel 5, »Verzweigungen und Schleifen«, vor.

int x=1, y=2, result;

result = (x<y) ? x : y; // result enthält jetzt die// kleinere der beiden Zahlen

Mit new erzeugen Sie neue Instanzen (Objekte) einer Klasse. instanceof

ermöglicht einen Test, ob das Objekt eine Instanz der angegebenen Klasse

oder Superklasse ist. Wenn javac feststellt, dass die Objektvariable sicher

kein Objekt der angegebenen Klasse enthält, kann der Code nicht kom-

piliert werden. Mehr Details zu new und instanceof folgen in Kapitel 11,

»Klassen«.

4.3 Wiederholungsfragen

W1: Sie wollen den Rest der Division 225 / 17 ermitteln. Wie gehen Sie

vor?

W2:Welchen Wert haben a, b, c und d?

int a=7, b=12 , c=20;

int d=a---b---c;

W3:Was ist die Short-circuit Evaluation? Nennen Sie ein Beispiel!

99

Page 22: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 397 — #393

B

Anhang B

Lösungen

Dieses Kapitel fasst die Lösungen zu denWiederholungsfragen und Übun-

gen zusammen. Beachten Sie, dass es sich bei Code-Lösungen immer um

Lösungsvorschläge handelt. Zu fast allen Aufgabenstellungen gibt es viele

Lösungswege.

B.1 Kapitel 1, »Hello World!«

W1: Java versus C#

Java wurde von Anfang an plattformunabhängig konzipiert. Deswegen

läuft ein einmal kompiliertes Java-Programm auf den unterschiedlichsten

Betriebssystemen.

C# basiert hingegen auf der .NET-Technologie vonMicrosoft, die nur unter

Windows uneingeschränkt unterstützt wird.

W2: Wozu IntelliJ IDEA?

Sie brauchen die IntelliJ IDEA gar nicht, insbesondere nicht für die in

diesem Buch präsentierten Beispiele. Die IntelliJ IDEA ist eine Entwick-

lungsumgebung, die das Verfassen, Testen und Dokumentieren von Java

unterstützt. Insofern macht IntelliJ Ihnen das Leben als Java-Entwickler in

vielerlei Hinsicht einfacher – und das umso mehr, je größer Ihre Projekte

werden.

Leider ist die Komplexität von IntelliJ für viele Programmiereinsteiger

abschreckend. Wenn Sie IntelliJ nicht einsetzen möchten, können Sie alle

Java-Programme aus diesem Buch in einem beliebigen Editor verfassen,

manuell mit javac kompilieren undmit java ausführen.

397

Page 23: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 398 — #394

B Lösungen

Anstelle von IntelliJ können Sie auch andere Entwicklungsumgebungen

verwenden, z. B. Eclipse oder NetBeans.

W3: JRE versus JDK

Das Java Runtime Environment (JRE) erlaubt nur das Ausführen von ferti-

gen Java-Programmen.

Um selbst Java-Programme entwickeln und kompilieren zu können, benö-

tigen Sie das Java Development Kit (JDK).

W4: »java« versus »javac«

Das Kommando java dient zur Ausführung kompilierter Java-Programme.

Mit dem Compiler javac wandeln Sie Ihren Java-Quelltext in ein binäres,

plattformunabhängiges Format um, den sogenannten Byte-Code.

W5: Wo ist die EXE-Datei?

Der Compiler javac erzeugt keine EXE-Dateien, sondern Byte-Code. Die-

ser Code muss durch den Java-Interpreter java ausgeführt werden. Diese

auf den ersten Blick umständliche Vorgehensweise hat den großen Vorteil,

dass ein einmal kompiliertes Java-Programm unter jedem von Java unter-

stützten Betriebssystem ausgeführt werden kann. EXE-Dateien wären auf

die Windows-Welt beschränkt.

W6: Java Virtual Machine

Die JVM ist für die Ausführung von Java-Byte-Code zuständig. Der Code

wird dabei zuerst mit einem JIT-Compiler (Just-In-Time-Compiler) in

Maschinen-Code für die CPU des Rechners umgewandelt.

W7: Java-Shell

Die Java-Shell (neu in Java 9) ermöglicht es, einfache Java-Anweisungen

auszuprobieren, ohne gleich ein ganzes Programm zu schreiben, das den

Anforderungen der Java-Syntax entspricht. Die Java-Shell ist damit gerade

für Einsteiger ein praktisches Hilfsmittel.

398

“buch” — 2017/12/1 — 11:49 — page 401 — #397

B

B.3 Kapitel 3, »Variablenverwaltung«

B.3 Kapitel 3, »Variablenverwaltung«

W1: Lebensdauer von Variablen

Der Inhalt von Variablen bleibt maximal so lange erhalten, wie ein Java-

Programm läuft. Viele Variablen haben sogar eine viel kürzere Lebens-

dauer. Sie können nur genutzt werden, solange ein Objekt existiert, d. h.,

solange Ihr Programmdurch eine Variable auf das Objekt verweist.

Wenn SieDaten dauerhaft speichernmöchten,müssen Sie diese inDateien

speichern oder in einer Datenbank ablegen und später von dort wieder

lesen.

W2: Datentypen für ganze Zahlen

Wenn Sie in einer Variablen ganze Zahlen zwischen 0 und 1000 speichern

möchten, würde ich als Datentyp int empfehlen. Prinzipiell käme auch

short infrage (zulässiger Wertebereich von –32.768 bis +32.767). short bie-

tet aber nur dannVorteile imVergleich zu int, wenn sehr viele gleichartige

Daten gespeichert werden sollen – z. B. in einem Array mit 100.000 Ele-

menten. In diesemFall würden Siemit short 200.000Byte Arbeitsspeicher

sparen.

W3: Fließkommadivision durch 0

Java führt eine Fließkommadivision durch 0 ohne Fehler aus und liefert

im folgenden Beispiel denWert Infinity:

double x=2, y=0;System.out.println(x/y);

W4: Variablen müssen initialisiert werden

Das folgende Programm kann nicht kompiliert werden, weil versucht

wird, die Variable z zu verwenden, bevor diese initialisiert wird. Die javac-

Fehlermeldung lautet variable z might not have been initialized.

401

Page 24: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 402 — #398

B Lösungen

int x, y, z;x = 3;

y = x + z;z = 5;

System.out.println("x=" + x + " y=" + y + " z=" + z);

W5: Explizites Casting

Das folgende Programm kann nicht kompiliert werden, weil versucht

wird, das Ergebnis einer int-Addition in einer short-Variablen zu speichern.

Dabei könnte es zu einemDatenverlust kommen.

short s = 3;

int i = 4;

s = s + i;System.out.println(s);

Um das Problem zu beheben, muss der Code so umformuliert werden:

s = (short)(s + i);

W6: Literale

Hexadezimalen Zahlen stellen Sie 0x voran, binären 0b:

int i1=0xAA00;

int i2=0b10101111;

W7: Konstanten

Java kennt zwar nicht direkt Konstanten, kann aber durch final verhin-

dern, dass der Inhalt einer Variablen für einen elementaren Datentyp

später nochmals verändert wird. Es ist üblich, solche Variablen mit Groß-

buchstaben zu definieren:

final double E = 2.71828182845904;

402

“buch” — 2017/12/1 — 11:49 — page 403 — #399

B

B.4 Kapitel 4, »Operatoren«

W8: Quadrat ausrechnen

Eine mögliche Lösung finden Sie in den Beispieldateien zu diesem Buch

im Projekt loesungen-kap03-quadrat.

B.4 Kapitel 4, »Operatoren«

W1: Restwertoperator

Den Rest der Division 225 / 17 ermitteln Sie mit dem %-Operator:

System.out.println(225 % 17); // Ergebnis 4

W2: Postfix versus Präfix

int a=7, b=12 , c=20;int d=a---b---c;

Java verarbeitet die Zuweisung an d so:

d = (a--) - (b--) - c;

Da -- hier in der Postix-Notation angewendet wird, berücksichtigt Java die

ursprünglichen Inhalte von a und b, also:

d = 7 - 12 - 20;

Nach der Berechnung des Werts für d werden auch die Variablen a und b

geändert. Somit ergibt sich: a=6, b=11, c=20 und d=-25.

W3: Short-circuit Evaluation

Die logischen Operatoren && und || verzichten auf die Auswertung des

zweiten Operanden, wenn der erste Operand bereits zum Ergebnis führt.

Wenn im folgenden Beispiel rechenfunktion(x) den Wert 0 oder eine nega-

tive Zahl liefert, dann wird rechenfunktion(y) nicht aufgerufen. Das ist

nicht notwendig, weil && nur dann true liefern kann, wenn beide Teilergeb-

nisse true sind.

403

Page 25: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 404 — #400

B Lösungen

double x=2, y=3;if(rechenfunktion(x) >0 && rechenfunktion(y) >0) {

// Code}

B.5 Kapitel 5, »Verzweigungen und Schleifen«

W1: Schaltjahrtest

Eine der vielen möglichen Lösungen sieht so aus:

// Projekt loesungen -kap05-schaltjahr -schleife

int jahr=2018;boolean schaltjahr;

if(jahr % 4 == 0 && (jahr % 100 != 0 || jahr % 400 == 0))schaltjahr=true;

else

schaltjahr=false;

Dabei wird zuerst getestet, ob die Jahreszahl durch vier ohne Rest teil-

bar ist. Ist das nicht der Fall, kann es kein Schaltjahr sein; das Ergebnis

ist bereits hier false. Andernfalls muss eine von zwei Zusatzbedingungen

erfüllt sein: Das Jahr ist nicht durch 100 teilbar, oder es ist durch 400 teil-

bar.

W2: Schleife für Schaltjahrtest

// Projekt loesungen -kap05-schaltjahr -schleife

for(jahr=1999; jahr <=2020; jahr++) {

...}

W3: Schleife, die zumindest einen Durchlauf garantiert

Die einzige Schleifenvariante in Java, die garantiert, dass der Schleifenkör-

per mindestens einmal durchlaufen wird, ist do-while. Ganz egal, wie die

Bedingung formuliert ist – zuerst wird der im Schleifenkörper formulierte

Code ausgeführt:

404

Page 26: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

Auf einen Blick

1 Hello World! ............................................................................................... 23

2 Java-Crashkurs ........................................................................................... 52

3 Variablenverwaltung ............................................................................... 65

4 Operatoren ................................................................................................. 90

5 Verzweigungen und Schleifen ............................................................. 100

6 Arrays ............................................................................................................ 122

7 Zeichenketten ............................................................................................ 132

8 Datum und Uhrzeit .................................................................................. 153

9 Methoden ................................................................................................... 172

10 Exceptions ................................................................................................... 192

11 Klassen ......................................................................................................... 204

12 Vererbung und Schnittstellen .............................................................. 239

13 Generische Klassen und Methoden ................................................... 270

14 Lambda-Ausdrücke .................................................................................. 286

15 Collections .................................................................................................. 300

16 Dateien und Verzeichnisse .................................................................... 329

17 JavaFX ........................................................................................................... 347

18 Javadoc ......................................................................................................... 367

19 Pakete, Bibliotheken und Module ....................................................... 372

A Crashkurs IntelliJ IDEA ............................................................................ 385

B Lösungen ..................................................................................................... 397

Auf einen Blick

Page 27: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 5 — #1

Inhalt

Inhalt

Vorwort .............................................................................................................. 21

1 Hello World! 23

1.1 Einführung ......................................................................................... 23

Warum Java? ...................................................................................... 24

Java-Versionen ................................................................................... 25

Sicherheitsprobleme ....................................................................... 27

Windows, Linux oder macOS? ...................................................... 27

1.2 Java und die IntelliJ IDEA installieren ........................................ 28

1.3 Installation unter Windows .......................................................... 29

Path-Variable einstellen ................................................................. 30

Notepad++ und IntelliJ IDEA installieren .................................. 31

1.4 Installation unter Ubuntu Linux .................................................. 32

Original-Java von Oracle installieren .......................................... 32

IntelliJ IDEA installieren .................................................................. 33

1.5 Installation unter macOS ............................................................... 34

IntelliJ IDEA installieren .................................................................. 34

1.6 »Hello World« mit javac und java manuell übersetzen ....... 34

Code verfassen und speichern ..................................................... 35

Das Programm kompilieren und ausführen ............................. 36

Der Hello-World-Code ..................................................................... 38

Zulässige Codeänderungen ........................................................... 41

Java-Interna ........................................................................................ 42

5

Page 28: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 6 — #2

Inhalt

1.7 Die Java-Shell ..................................................................................... 44

Fortgeschrittene Funktionen ........................................................ 45

1.8 Hello IntelliJ IDEA ............................................................................. 46

JDK einrichten ................................................................................... 47

Neues Projekt starten ..................................................................... 48

Endlich Code ...................................................................................... 49

IntelliJ(gent) oder nicht – das ist hier die Frage . . . ................. 50

1.9 Wiederholungsfragen ..................................................................... 51

2 Java-Crashkurs 52

2.1 Die Idee des objektorientierten Programmierens ................. 52

Methoden helfen, Teilaufgaben zu lösen .................................. 53

Klassen bringen Daten und Methoden zusammen ............... 53

Objekte sind konkrete Ausformungen von Klassen ............... 54

Begriffe ................................................................................................ 55

2.2 Java-Syntax ........................................................................................ 57

Ärger mit Strichpunkten ................................................................. 58

Regeln zur Benennung von Variablen, Klassen etc. ................ 59

Java-Schlüsselwörter ....................................................................... 60

Kommentare im Java-Code ........................................................... 60

Die Java-Klassenbibliothek ............................................................ 61

Weniger Tippaufwandmit »import« ......................................... 61

Klassen aus der Standardbibliothek verwenden .................... 63

2.3 Wiederholungsfragen ..................................................................... 64

3 Variablenverwaltung 65

3.1 Variablen ............................................................................................. 65

Einführungsbeispiel ......................................................................... 65

Variablen deklarieren, initialisieren und verwenden ............. 66

6

“buch” — 2017/12/1 — 11:49 — page 7 — #3

Inhalt

3.2 Elementare Datentypen ................................................................. 67

Ganze Zahlen ..................................................................................... 68

Fließkommazahlen .......................................................................... 69

Rechnenmit »double«-Zahlen ..................................................... 70

Boolesche Werte ............................................................................... 71

Zufallszahlen ..................................................................................... 71

Typumwandlung (Casting) ............................................................ 72

Modifizierer für die Variablendeklaration ................................. 73

3.3 Literale ................................................................................................. 75

Boolesche Literale ............................................................................ 75

Ganze Zahlen ..................................................................................... 75

Fließkommazahlen .......................................................................... 77

3.4 Variablen im größeren Java-Kontext ......................................... 77

Gültigkeitsebenen ............................................................................ 78

Variablen für Objekte ...................................................................... 79

Wrapper-Klassen für elementare Datentypen ........................ 81

Instanzvariablen (Fields) ................................................................ 83

3.5 Variablen einlesen und ausgeben ............................................... 83

Datenausgabe ................................................................................... 84

Dateneingabe .................................................................................... 85

Beispiel ................................................................................................ 85

3.6 Konstanten und Enums .................................................................. 87

Konstanten ......................................................................................... 87

Konstantenaufzählungen (Enums) ............................................. 88

3.7 Wiederholungsfragen und Übungen ......................................... 89

4 Operatoren 90

4.1 Überblick ............................................................................................. 90

4.2 Details und Sonderfälle .................................................................. 92

Zuweisungen ..................................................................................... 93

7

Page 29: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 8 — #4

Inhalt

Mathematische Operatoren ......................................................... 93

Inkrement und Dekrement ............................................................ 95

Vergleiche ........................................................................................... 95

Boolesche Ausdrücke (verknüpfte Bedingungen) ................... 96

Rechnenmit Bits ............................................................................... 98

Sonstige Operatoren ....................................................................... 99

4.3 Wiederholungsfragen ..................................................................... 99

5 Verzweigungen und Schleifen 100

5.1 »if«-Verzweigungen ........................................................................ 101

Lieber ein Klammernpaar zu viel als eines zu wenig! ............ 102

Klare Logik durch richtiges Einrücken ......................................... 104

Beispiel: Schaltjahrtest ................................................................... 105

5.2 »if«-Kurzschreibweise (ternärer Operator) .............................. 106

5.3 »switch«-Verzweigungen .............................................................. 107

Beispiel: Tage pro Monat ................................................................ 108

5.4 »for«-Schleifen ................................................................................. 109

Achtung, Falle! ................................................................................... 110

Variablendeklaration innerhalb der Schleife ............................ 111

Beispiele .............................................................................................. 112

»for«-Schleifen für Fließkommazahlen ..................................... 113

Verschachtelte Schleifen ................................................................ 114

5.5 »for-each«-Schleifen ....................................................................... 115

»for« versus »for-each« .................................................................. 116

5.6 »while«- und »do-while»-Schleifen ........................................... 117

»while«-Schleifen ............................................................................. 117

»do-while«-Schleifen ....................................................................... 118

5.7 »break« und »continue« ................................................................ 119

break ..................................................................................................... 119

8

“buch” — 2017/12/1 — 11:49 — page 9 — #5

Inhalt

continue .............................................................................................. 119

»break« und »continue« in verschachtelten Schleifen ......... 120

Endlosschleifen ................................................................................. 120

5.8 Wiederholungsfragen und Übungen ......................................... 121

6 Arrays 122

6.1 Syntax .................................................................................................. 122

Arrays initialisieren .......................................................................... 122

Zugriff auf Array-Elemente ............................................................ 123

Mehrdimensionale Arrays ............................................................. 124

Nichtrechteckige Arrays ................................................................. 124

Interna ................................................................................................. 125

6.2 Mit Arrays arbeiten .......................................................................... 127

Methoden ........................................................................................... 127

Arrays duplizieren ............................................................................ 128

Beispiel 1: Array initialisieren ....................................................... 128

Beispiel 2: Minimum, Maximum undMittelwert .................. 129

6.3 Wiederholungsfragen ..................................................................... 130

7 Zeichenketten 132

7.1 Der Datentyp »char« ....................................................................... 132

Die »Character«-Klasse und ihre Methoden ............................ 133

7.2 Die »String«-Klasse ......................................................................... 134

»String«-Eigenheiten ....................................................................... 135

Zeichenketten vergleichen ............................................................ 136

Zeichenketten korrekt ordnen und sortieren ........................... 137

»String«-Methoden ......................................................................... 138

Die »join«-Methode ......................................................................... 140

9

Page 30: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 10 — #6

Inhalt

7.3 Formatierung und Konvertierung ............................................... 141

Formatierung ..................................................................................... 141

Konvertierung von Zeichenketten in Zahlen ............................ 144

Lokalisierung von Ein- und Ausgabe ........................................... 145

7.4 Die »StringBuilder«-Klasse ........................................................... 147

7.5 Zeichensatzprobleme ..................................................................... 148

Quellcode ............................................................................................ 148

Textausgabe im Terminal ............................................................... 149

Zeichensatzeinstellung in Eclipse ................................................ 150

7.6 Beispiele .............................................................................................. 150

Groß- und Kleinbuchstaben zählen ............................................ 150

Pfad und Dateiname trennen ....................................................... 151

7.7 Wiederholungsfragen und Übungen ......................................... 152

8 Datum und Uhrzeit 153

8.1 Datum und Zeit seit Java 8 ............................................................ 154

»Machine Time Line« versus »Human Time Line« ................. 154

Überblick über die Klassen und Methoden .............................. 155

Datum ermitteln, anzeigen und formatieren .......................... 157

Schaltjahr-spezifische Daten ermitteln ..................................... 158

Uhrzeit ermitteln und anzeigen .................................................. 159

Daten und Zeiten einlesen (»parse«) .......................................... 159

Daten und Zeiten festlegen (»of«) .............................................. 160

Zeitspannen ermitteln und auswerten ..................................... 160

Rechnenmit Daten und Zeiten .................................................... 161

Rechenzeit messen (Instant und Duration) .............................. 162

8.2 Veraltete Datums- und Zeitklassen (Date, Calendar) ........... 163

Die »Date«-Klasse ............................................................................ 163

Formatierung mit »format« bzw. »printf« ................................ 165

10

“buch” — 2017/12/1 — 11:49 — page 11 — #7

Inhalt

Formatierung mit der »SimpleDateFormat«-Klasse .............. 165

Die »Calendar«-Klasse .................................................................... 168

Umwandlung von »Date« zu »LocalDate« ................................ 171

8.3 Wiederholungsfragen und Übungen ......................................... 171

9 Methoden 172

9.1 Einführung ......................................................................................... 173

Syntaxregeln ...................................................................................... 174

Statisch oder nichtstatisch? .......................................................... 175

9.2 Parameterliste ................................................................................... 176

Parameter verändern ...................................................................... 176

Finale Parameter ............................................................................... 179

Overloading ........................................................................................ 179

Variable Parameterzahl .................................................................. 180

9.3 Rückgabewert und »return« ......................................................... 182

9.4 Rekursion ............................................................................................ 183

Fakultät rekursiv berechnen .......................................................... 183

Der Stack ............................................................................................. 184

9.5 Beispiele .............................................................................................. 185

Array-Methoden: Minimum undMaximum ermitteln ........ 185

Wir spielen Lotto ............................................................................... 186

9.6 Wiederholungsfragen und Übungen ......................................... 189

10 Exceptions 192

10.1 Exception-Klassen ............................................................................ 193

Die »Throwable«-Klasse ................................................................. 193

Die »Error«-Klassen .......................................................................... 194

Die »RuntimeException«-Klassen ................................................ 194

11

Page 31: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 12 — #8

Inhalt

Gewöhnliche Exceptions ................................................................ 195

10.2 try-catch .............................................................................................. 195

»try-catch« für Ressourcen ............................................................ 196

Exception-Weitergabe .................................................................... 197

10.3 FehleranfälligeMethoden deklarieren (»throws«) ............... 198

Selbst absichern oder die Absicherung delegieren? .............. 199

10.4 Selbst Exceptions werfen (»throw«) .......................................... 200

10.5 Beispiel ................................................................................................ 201

10.6 Wiederholungsfragen und Übungen ......................................... 203

11 Klassen 204

11.1 Top-Level-Klassen ............................................................................. 205

Beispiel: Rechteck-Klasse ............................................................... 206

Gültigkeitsebenen (»public«, »private« und »protected«) ... 209

Klassenvariablen und statischeMethoden .............................. 210

Konstruktor ........................................................................................ 213

this ........................................................................................................ 214

Beispiel: Rechteck-Klassemit Konstruktor ................................ 215

Destruktor, »finalize« und »close« .............................................. 216

»get«- und »set«-Methoden (Getter/Setter) ............................ 217

Beispiel: Rechteck-Klassemit Getter/Setter ............................. 218

11.2 Geschachtelte Klassen .................................................................... 220

Die Syntax geschachtelter Klassen ............................................. 220

Geschachtelte Schnittstellen und Enums ................................. 222

11.3 Anonyme Klassen ............................................................................. 222

Beispiel: »FilenameFilter« .............................................................. 223

Syntax .................................................................................................. 225

Variable Capture ............................................................................... 226

11.4 Statische geschachtelte Klassen .................................................. 227

12

“buch” — 2017/12/1 — 11:49 — page 13 — #9

Inhalt

11.5 Beispiel: Schachfigur Springer ..................................................... 228

Aufgabenstellung ............................................................................. 228

Implementierung der »Springer«-Klasse .................................. 230

Die Methode »ermittleZuege« ..................................................... 231

Test ........................................................................................................ 232

11.6 Beispiel: Bücher und Kapitel ......................................................... 233

Chapter-Klasse .................................................................................. 234

Book-Klasse ........................................................................................ 234

Test-Code ............................................................................................ 236

11.7 Wiederholungsfragen und Übungen ......................................... 237

12 Vererbung und Schnittstellen 239

12.1 Vererbung ........................................................................................... 240

Methoden überschreiben .............................................................. 240

Instanz- und Klassenvariablen verstecken ................................ 242

super .................................................................................................... 243

Konstruktor ........................................................................................ 243

Finale Klassen und Methoden ...................................................... 244

Abstrakte Klassen ............................................................................. 245

Generalisierung ................................................................................ 246

Polymorphie ....................................................................................... 247

Upcasts und Downcasts ................................................................. 250

12.2 Die »Object«-Klasse ........................................................................ 250

Die Methode »clone« ...................................................................... 251

Die Methode »equals« .................................................................... 251

Die Methode »finalize« .................................................................. 252

Die Methode »getClass« ................................................................ 252

Die Methode »hashCode« ............................................................. 252

Die Methoden »notify«, »notifyAll« und »wait« ..................... 254

Die Methode »toString« ................................................................. 254

13

Page 32: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 14 — #10

Inhalt

12.3 Vererbungsbeispiel (Schachfiguren) .......................................... 254

Die abstrakte Klasse »Schachfigur« ............................................ 255

Die Klassen »Springer«, »Laeufer« und »Turm« ...................... 257

Anwendung der Klassen ................................................................ 258

12.4 Schnittstellen .................................................................................... 259

Einführungsbeispiel ......................................................................... 259

Wichtige Schnittstellen in der Java-Standardbibliothek ...... 260

»interface«-Syntax ........................................................................... 261

Funktionale Schnittstellen und Defaultmethoden ................ 262

Die »implements«-Syntax ............................................................. 263

Polymorphie bei Schnittstellen .................................................... 264

Abstrakte Klassen versus Schnittstellen .................................... 264

12.5 Schnittstellenbeispiel (geometrische Figuren) ....................... 265

Rechteck- und Kreis-Klasse ............................................................ 265

Anwendung der Klassen ................................................................ 266

12.6 Wiederholungsfragen und Übungen ......................................... 268

13 Generische Klassen und Methoden 270

13.1 Einführung ......................................................................................... 270

Hello Generics World! ..................................................................... 270

Wrapper-Klassen .............................................................................. 272

13.2 Deklaration generischer Klassen und Schnittstellen ............ 272

Typeinschränkungen ....................................................................... 273

Generische Schnittstellen und Vererbung ................................ 274

13.3 Deklaration generischer Methoden ........................................... 274

13.4 Wildcards ............................................................................................ 275

Wildcard-Variablen und -Parameter ........................................... 276

Wildcards mit Regeln ...................................................................... 277

Upper Bounded Wildcards ............................................................. 278

14

“buch” — 2017/12/1 — 11:49 — page 15 — #11

Inhalt

Lower BoundedWildcards ............................................................. 279

Arrays ................................................................................................... 279

13.5 Genercis-Beispiel (Comparable) ................................................... 280

Die »Geometrie«-Schnittstelle erweitern ................................. 281

Die »Kreis«-Klasse erweitern ........................................................ 281

Die »Rechteck«-Klasse erweitern ................................................. 282

Die »Comparable«-Objekte sortieren ......................................... 283

»Comparable« versus »Comparator« ......................................... 283

13.6 Wiederholungsfragen und Übungen ......................................... 285

14 Lambda-Ausdrücke 286

14.1 Hello Lambda-World! ...................................................................... 286

Ein Blick hinter die Kulissen ........................................................... 287

14.2 Lambda& Co. .................................................................................... 288

Die Syntax von Lambda-Ausdrücken .......................................... 288

»this« und »super« .......................................................................... 290

Referenzen auf Methoden ............................................................. 290

Beispiel für Referenzen auf Methoden ...................................... 292

Defaultmethoden ............................................................................. 294

Generische Lambda-Schnittstellen ............................................. 295

Beispiel: Datenselektion mit der »Predicate«-Schnittstelle 296

War das schon alles? ....................................................................... 298

14.3 Wiederholungsfragen ..................................................................... 298

15 Collections 300

15.1 Einführung ......................................................................................... 300

Koordinatenpunkte eines Polygons speichern (»List«) .......... 301

Lottozahlen generieren (»Set«) .................................................... 302

15

Page 33: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 16 — #12

Inhalt

Wörterbuch speichern (»Map«) ................................................... 302

Klassenüberblick ............................................................................... 303

Regeln, Tipps und Tricks .................................................................. 305

15.2 Die »Iterable«-Schnittstelle .......................................................... 307

Die »forEach«-Methode ................................................................. 308

15.3 Die »Collection«-Schnittstelle ...................................................... 309

Die »removeIf«- und »stream«-Methoden ............................... 311

15.4 Die »Set«-Schnittstelle ................................................................... 312

Die »HashSet«-Klasse ..................................................................... 312

Die »LinkedHashSet«-Klasse ......................................................... 314

Die »TreeSet«-Klasse ....................................................................... 315

15.5 Die »List«-Schnittstelle .................................................................. 317

Die »replaceAll«-Methode ............................................................. 318

Die »ArrayList«-Klasse ..................................................................... 319

Die »LinkedList«-Klasse ................................................................... 319

15.6 Die »Stream«-Schnittstelle ........................................................... 320

Stream-Beispiele ............................................................................... 321

15.7 Die »Map«-Schnittstelle ................................................................ 324

Die »HashMap«- und »LinkedHashMap«-Klassen ................. 326

Schleifen über Maps ........................................................................ 326

15.8 Wiederholungsfragen und Übungen ......................................... 328

16 Dateien und Verzeichnisse 329

16.1 Klassen- und Schnittstellenüberblick ........................................ 329

Fehlerabsicherung ............................................................................ 330

Ressourcen schließen ...................................................................... 331

16

“buch” — 2017/12/1 — 11:49 — page 17 — #13

Inhalt

16.2 Dateien und Verzeichnisse ergründen ....................................... 331

Besondere Verzeichnisse ................................................................ 331

Die »Path«-Schnittstelle ................................................................. 332

Testen, ob ein Verzeichnis bzw. eine Datei existiert .............. 334

Eigenschaften einer Datei ermitteln .......................................... 335

Liste der Dateien in einem Verzeichnis ermitteln ................... 337

16.3 Dateien und Verzeichnisse bearbeiten ...................................... 339

Beispiel ................................................................................................ 340

16.4 Textdateien lesen und schreiben ................................................ 341

Textdateien schreiben ..................................................................... 342

Textdateien auslesen ....................................................................... 343

Andere Zeichensätze als UTF-8 verwenden ............................. 345

16.5 Wiederholungsaufgaben und Übungen ................................... 346

17 JavaFX 347

17.1 Einführung ......................................................................................... 348

Ein erster Blick hinter die Kulissen .............................................. 349

Der Scene Graph ............................................................................... 350

17.2 Arbeitenmit Steuerelementen .................................................... 351

Der Scene Graph des Beispielprogramms ................................. 353

Steuerelemente und Container erzeugen ................................. 353

Ereignisse ............................................................................................ 357

17.3 Grafikprogrammierung .................................................................. 359

Einführungsbeispiel ......................................................................... 359

Den Zufall zeichnen lassen ............................................................ 362

Lissajous-Figuren zeichnen ........................................................... 363

17.4 Mehr JavaFX ....................................................................................... 366

17.5 Wiederholungsaufgaben und Übungen ................................... 366

17

Page 34: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 18 — #14

Inhalt

18 Javadoc 367

18.1 Javadoc-Syntax ................................................................................. 367

Beispiel ................................................................................................ 368

18.2 Das Javadoc-Kommando ................................................................ 371

18.3 Übung .................................................................................................. 371

19 Pakete, Bibliotheken und Module 372

19.1 import .................................................................................................. 373

Die »import«-Syntax ....................................................................... 373

Standard-Import für »java.lang« ................................................. 374

Statische Importe ............................................................................. 374

19.2 Pakete .................................................................................................. 375

19.3 Bibliotheken ...................................................................................... 377

Fertige Java-Bibliotheken nutzen ................................................ 377

19.4 Module (»Jigsaw«) ........................................................................... 379

Beispiel ................................................................................................ 380

Die Datei »module-info.java« ....................................................... 381

Kompilieren und ausführen .......................................................... 382

Module in der IntelliJ IDEA ............................................................ 383

19.5 Wiederholungsfragen ..................................................................... 384

Anhang

A Crashkurs IntelliJ IDEA 385

A.1 Benutzeroberfläche ......................................................................... 385

A.2 Projekte ............................................................................................... 391

A.3 Einstellungen ..................................................................................... 394

18

“buch” — 2017/12/1 — 11:49 — page 19 — #15

Inhalt

B Lösungen 397

B.1 Kapitel 1, »Hello World!« ............................................................... 397

B.2 Kapitel 2, »Java-Crashkurs« ........................................................... 399

B.3 Kapitel 3, »Variablenverwaltung« ............................................... 401

B.4 Kapitel 4, »Operatoren« ................................................................. 403

B.5 Kapitel 5, »Verzweigungen und Schleifen« .............................. 404

B.6 Kapitel 6, »Arrays« ............................................................................ 406

B.7 Kapitel 7, »Zeichenketten« ............................................................. 407

B.8 Kapitel 8, »Datum und Uhrzeit« .................................................. 408

B.9 Kapitel 9, »Methoden« .................................................................... 408

B.10 Kapitel 10, »Exceptions« ................................................................. 410

B.11 Kapitel 11, »Klassen« ....................................................................... 411

B.12 Kapitel 12, »Vererbung und Schnittstellen« ............................. 414

B.13 Kapitel 13, »Generische Klassen und Methoden« .................. 416

B.14 Kapitel 14, »Lambda-Ausdrücke« ................................................ 417

B.15 Kapitel 15, »Collections« ................................................................ 418

B.16 Kapitel 16, »Dateien und Verzeichnisse« .................................. 419

B.17 Kapitel 17, »JavaFX« ......................................................................... 421

B.18 Kapitel 18, »Javadoc« ...................................................................... 423

B.19 Kapitel 19, »Pakete, Bibliotheken und Module« ...................... 424

Index ................................................................................................................... 426

19

Page 35: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 426 — #422

Index

A

Abgeleitete Klasse .......................... 240

abstract-Schlüsselwort ................. 245

Abstrakte Klassen ........................... 245

versus Schnittstellen ............... 264

accept-Methode .............................. 328

add-Methode .......................... 310, 317

addAll-Methode .............................. 310

Aktuelles Datum ............................. 157

Aktuelles Verzeichnis ................... 332

Annotationen ...... 181, 240, 241, 262

Anonyme Klassen .......................... 222

Beispiel ................................ 223, 287

Syntax ........................................... 225

API (Java-Bibliothek) ........................ 43

APPEND-Konstante ....................... 342

append-Methode ............................ 147

Application-Klasse ......................... 349

ArrayList-Klasse .............................. 319

Arrays .................................................. 122

duplizieren .................................. 128

Elementzugriff ........................... 123

initialisieren ...................... 122, 128

Interna .......................................... 125

Klasse ............................................. 127

mehrdimensionale Arrays .... 124

Methoden .................................... 127

ART (Android Runtime) .................. 26

asList-Methode ................................ 321

Assoziativität ...................................... 92

Ausnahmen (Exceptions) ............ 192

AutoCloseable-Schnittstelle ....... 196

AWT ...................................................... 347

B

Base Package (IntelliJ IDEA) .......... 48

BasicFileAttributes-Schnitt-

stelle ............................................ 336

Basisklasse ........................................ 240

Beispieldateien .................................. 27

between-Methode ................ 160, 161

Bibliotheken ..................................... 377

BiConsumer-Schnittstelle ........... 328

Binäre Zahlen ..................................... 76

binarySearch-Methode ................ 127

Bitweises Rechnen ........................... 98

boolean-Datentyp ............................. 71

Boolean-Klasse ................................... 81

Boolesche Ausdrücke ...................... 96

BoolescheWerte ................................ 71

BorderPane-Klasse ......................... 353

Boxing/Unboxing ............................ 81

break .......................................... 107, 119

Breakpoint ........................................ 389

BufferedReader-Klasse ................. 343

BufferedWriter-Klasse .................. 342

Button-Klasse .................................. 349

Byte-Code ...................................... 36, 42

byte-Datentyp .................................... 68

Byte-Klasse .......................................... 81

C

Calendar-Klasse .............................. 168

Canvas-Klasse .................................. 359

case (switch) ..................................... 107

426

“buch” — 2017/12/1 — 11:49 — page 427 — #423

Index

Casting ......................................... 72, 250

bei Klassen ................................... 247

catch-Schlüsselwort ...................... 195

char-Datentyp .................................. 132

Character-Klasse ...................... 81, 133

charAt-Methode .............................. 138

Charset-Klasse ................................. 345

CheckBox-Klasse ............................ 353

ChronoUnit-Klasse ........................ 161

class-Datei ............................................ 42

Class-Klasse ............................. 252, 258

class-Schlüsselwort ....................... 205

ClassCastException ....................... 249

clone-Methode ....................... 128, 251

close-Methode ................................... 85

IO-Klassen ................................... 331

Closures .............................................. 286

Code einrücken ............................... 104

Collator-Klasse ................................. 137

Collections-Schnittstelle ............. 309

ComboBox-Klasse .......................... 357

Comparable-Schnittstelle ........... 280

Comparator-Schnittstelle ........... 283

compare-Methode ......................... 283

compareTo-Methode .................... 280

Compiler ............................................... 36

Consumer-Schnittstelle ............... 295

containsAll-Methode .................... 310

copy-Methode ................................. 339

copyOfRange-Methode ................ 127

cos-Methode ....................................... 70

Cp1252-Zeichensatz ...................... 148

CREATE-Konstaten ......................... 342

createDirectories-Methode ........ 339

createDirectory-Methode ........... 339

createFile-Methode ........................ 339

createTempDirectory-Methode 339

D

Dalvik Virtual Machine .................. 26

Date-Klasse ....................................... 163

Dateien ............................................... 329

Eigenschaften ermitteln ........ 335

Existenz testen ........................... 334

kopieren ....................................... 339

löschen .......................................... 339

suchen ........................................... 337

temporäre Dateien ................... 339

Textdateien lesen ..................... 343

Textdateien schreiben ............ 342

verschieben ................................. 339

Datentypen .......................................... 67

DateTimeFormatter-

Klasse ................................ 157, 159

Datum ....................................... 153, 157

Debugging (IntelliJ) ....................... 389

default (switch) ................................ 107

Defaultmethoden ........................... 294

Defaultpaket ..................................... 376

Dekrement-Operator ...................... 95

delete-Methode ............................... 339

deleteIfExists-Methode ................ 339

Deprecated-Annotation ............... 241

Destruktor ......................................... 216

Diamond-Operator ........................ 271

DirectoryStream-Schnittstelle 337

distinct-Methode ............................ 321

Division durch null ................... 68, 69

DosFileAttributes-Schnittstelle 336

double-Datentyp ............................... 69

Schleifen ............................. 113, 405

Double-Klasse .................................... 81

Downcast .................................... 73, 250

Duration-Klasse ..................... 160, 162

Durchschnitt (Arrays) ................... 129

427

Page 36: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 428 — #424

Index

E

Editor ..................................................... 28

Einrückung von Code ................... 104

Elementare Datentypen ................. 67

else ....................................................... 101

Elternklasse ...................................... 240

Endlosschleifen ............................... 120

abbrechen .................................... 112

endsWith-Methode ....................... 138

entrySet-Methode .......................... 327

Entwicklungsumgebung ............... 28

enum-Schlüsselwort ....................... 88

Enumerationen ................................. 88

equals-Methode ........... 127, 136, 251

HashSet-Klasse .......................... 313

Error-Klasse ...................................... 194

Event-Klasse ..................................... 357

EventHandler-Schnittstelle ........ 349

Exceptions ........................................ 192

Exemplare ............................................ 54

exists-Methode ............................... 335

exit-Methode ................................... 349

Explizites Casting ............................. 72

exports (Module) ............................ 379

extends-Schlüsselwort ................. 273

F

Fakultät

Beispiel ......................................... 405

mit Rekursion ............................ 183

ohne Rekursion ......................... 121

Fallunterscheidungen .................. 107

Fehler

absichern ..................................... 195

des Compilers ............................... 37

Exceptions ................................... 192

IOExceptions .............................. 330

Fields ...................................................... 83

Initialisierung ............................ 208

statische ....................................... 211

FIFO (First In – First Out) ............. 319

FilenameFilter-Klasse

anonyme Klasse ........................ 223

Lambda-Ausdruck .................... 289

Files-Klasse ........................................ 334

FileTime-Klasse ............................... 335

fill-Methode ...................................... 127

fillXxx-Methoden .......................... 359

filter-Methode ................................. 321

final-Modifizierer

effectively final .......................... 226

Methoden und Klassen .......... 244

Parameter .................................... 179

Variablen ......................................... 87

finalize-Methode ................... 216, 252

Fließkommazahlen .......................... 69

parse-Methode ........................... 146

float-Datentyp .................................... 69

Float-Klasse ......................................... 81

Font-Klasse ........................................ 357

for-each-Schleife ............................. 115

Arrays ............................................ 123

for-Schleifen ..................................... 109

Arrays ............................................ 123

Beispiele ....................................... 112

break und continue ................. 119

Endlosschleifen ......................... 120

Fließkommazahlen .................. 113

forEach-Methode ......... 286, 308, 328

Beispiel .......................................... 291

format-Methode .................... 157, 159

Datumund Uhrzeit ................. 165

FunctionalInterface-

Annotation ............................... 262

Funktionale Programmierung 320

428

“buch” — 2017/12/1 — 11:49 — page 429 — #425

Index

Funktionale Schnittstellen ......... 262

Lambda-Ausdrücke .................. 286

G

Ganze Zahlen ...................................... 68

Garbage Collector ............................. 43

Generalisierung .............................. 246

Generische Klassen ....................... 270

Generische Methoden .................. 274

Generische Schnittstellen ........... 270

Lambda ......................................... 295

Geschachtelte Klassen .................. 220

Geschwungene Klammern ......... 102

get-Methode ........ 217, 317, 324, 332

getClass-Methode ................. 252, 258

getDayOfMonth-Methode .......... 157

getFileName-Methode ................. 334

getGraphicsContext2D-

Methode .................................... 359

getInstance-Methode ................... 165

getLastModifiedTime-Methode 335

getMonthValue-Methode ............ 157

getName-Methode ......................... 258

getOwner-Methode ....................... 335

getParent-Methode ....................... 334

getProperty-Methode ................... 332

getSource-Methode ....................... 357

getTime-Methode .......................... 164

getValue-Methode .......................... 327

getYear-Methode ............................ 157

Grafikprogrammierung ............... 359

GraphicContext-Klasse ................ 359

GridPane-Klasse .............................. 423

Grundrechenarten ........................... 93

Gültigkeitsebenen ............................ 78

H

handle-Methode ............................. 349

hashCode-Methode ....................... 252

HashMap-Klasse ............................. 326

HashSet-Klasse ................................ 312

hasNext-Methode .......................... 308

HBox-Klasse ..................................... 353

Heimatverzeichnis ermitteln .... 332

Hello World

Code-Erklärung ............................ 38

Collections ................................... 301

Generics-Version ....................... 270

IntelliJ IDEA ................................... 46

Lambda-Version ........................ 286

manuell übersetzen ................... 34

Hexadezimale Zahlen

Ausgabe ........................................... 76

parse-Methode ........................... 144

Humane Time Line ........................ 154

I

IcedTea .................................................. 26

if-Verzweigung ................................. 101

Kurzschreibweise ...................... 106

Immutable

Parameter in Methoden ........ 178

String-Klasse ............................... 135

implements-Schlüsselwort ........ 259

Implizites Casting ............................. 72

import-Anweisung ................. 61, 373

import static ............................... 374

in-Field .................................................. 85

indexOf-Methode ................. 138, 317

Inkrement-Operator ........................ 95

Inner Classes .................................... 220

Input/Output (IO) .......................... 329

429

Page 37: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 430 — #426

Index

Installation

Linux ................................................ 32

macOS .............................................. 34

Ubuntu ............................................ 32

Windows ......................................... 29

instanceof-Operator ..................... 250

Beispiel .......................................... 267

Instant-Klasse .................................. 162

Instanzen ............................................. 54

Instanzmethoden .......................... 175

Instanzvariablen ............................... 83

Initialisierung ............................ 208

verstecken ................................... 242

int-Datentyp ....................................... 68

Integer-Klasse ..................................... 81

IntelliJ IDEA ...................................... 385

Base Package ................................. 48

Einstellungen ............................. 394

externe Bibliotheken .............. 378

Hello World ................................... 46

Installation .................................... 31

Javadoc .......................................... 371

JDK einrichten .............................. 47

Module .......................................... 383

Projekte ......................................... 391

Tastenkürzel ............................... 390

interface-Schlüsselwort ............... 259

IOException-Klasse ....................... 330

isAbsolute-Methode ...................... 334

isDigit-Methode .............................. 133

isDirectory-Methode .................... 335

isEmpty-Methode .......................... 138

isExecutable-Methode ................. 335

isHidden-Methode ......................... 335

isLeapYear-Methode ...................... 158

isLowerCase-Methode .................. 133

isReadable-Methode ..................... 335

isUpperCase-Methode .................. 133

isWhitespace-Methode ................ 133

isWriteable-Methode .................... 335

Iterable-Schnittstelle ..................... 307

iterator-Methode ............................ 308

J

JAR-Format ........................................ 377

Java

Bibliothek ................................ 43, 61

installieren .................................... 28

Java SE versus Java EE ................. 26

Java-Shell ........................................ 44

Java Virtual Machine .................. 43

Klassenbibliothek ................ 43, 61

Versionen ....................................... 25

java-Kommando ................................ 36

cp-Option ..................................... 378

java.io-Paket ..................................... 329

java.lang-Paket ................ 61, 168, 374

java.nio-Paket .................................. 329

java.nio.files-Paket ......................... 332

java.text-Paket ........................ 146, 165

java.time-Paket ................................ 154

java.util-Klasse ................................ 300

java.util-Paket ............... 127, 145, 163

java.util.function-Paket ............... 295

java.util.stream-Paket ................... 320

javac-Kommando .............................. 36

cp-Option ..................................... 378

encoding-Option ...................... 149

Version feststellen ...................... 31

Javadoc ................................................ 367

Kommando ................................. 371

JavaFX .................................................. 347

Ereignisse ..................................... 357

Grafik ............................................. 359

javafx.*-Pakete ........................... 349

JavaScript .............................................. 26

JDK .......................................................... 26

430

“buch” — 2017/12/1 — 11:49 — page 431 — #427

Index

Jigsaw-Projekt .................................. 379

JIT-Compiler ........................................ 43

jlink-Kommando ............................ 379

join-Methode ................................... 140

JRE ........................................................... 26

jshell-Kommando ............................. 44

JVM ......................................................... 43

K

keySet-Methode .............................. 326

Kindklasse ......................................... 240

Klassen ........................................ 53, 204

abstrakte Klassen ...................... 245

anonyme Klassen ..................... 222

finale Klassen ............................. 244

generische Klassen .................. 270

geschachtelte Klassen ............. 220

Klassennamen ermitteln ...... 258

konkrete Klassen ...................... 246

Konstruktor ................................ 213

lokale Klassen ............................ 220

Top-Level ...................................... 205

Vererbung .................................... 240

Klassenbibliothek ............................. 61

Klassenmethoden .......................... 175

Klassenvariablen ..................... 83, 211

verstecken ................................... 242

Kommentare ...................................... 60

Javadoc .......................................... 367

Konkrete Klassen ............................ 246

Konstanten .......................................... 87

in Klassen .................................... 230

Konstruktor ...................................... 213

Referenz auf Konstruktoren 292

Vererbung .................................... 243

Konvertierung

von Zeichenketten zu

Datum/Uhrzeit ....................... 159

von Zeichenketten zu

Zahlen ......................................... 144

L

Lambda-Ausdrücke ........................ 286

für JavaFX-Ereignisse ............... 357

in DirectoryStreams ................ 338

in Streams .................................... 322

Syntax ........................................... 288

lastIndexOf-Methode .......... 138, 317

launch-Methode ............................. 349

Left-Shift (bitweises Rechnen) ..... 98

length-Field (Arrays) ..................... 125

length-Methode (String) .............. 138

lengthOfMonth-Methode ........... 158

LIFO (Last In – First Out) .............. 319

limit-Methode ................................. 321

lines-Methode .................................. 344

LinkedHashMap-Klasse ............... 326

LinkedHashSet-Klasse .................. 314

LinkedList-Klasse ........................... 319

Linux

IntelliJ-IDEA-Installation 33, 34

Java-Installation ........................... 32

Lissajous-Figuren ........................... 363

list-Methode ..................................... 338

List-Schnittstelle ............................. 317

Literale

Fließkommazahlen .................... 77

Zahlen .............................................. 75

Zeichen (char) ............................. 132

LocalDate-Klasse ............................. 157

LocalDateTime-Klasse .................. 162

Locale-Klasse .................................... 138

Datumund Uhrzeit ........ 157, 165

Fließkommazahlen .................. 145

Zeichenketten sortieren ........ 138

LocalTime-Klasse ............................ 159

431

Page 38: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 432 — #428

Index

Lokale Klassen ................................. 220

Lokalisierung

Fließkommazahlen .................. 145

Zeichenketten sortieren ........ 138

long-Datentyp .................................... 68

Long-Klasse ......................................... 81

long-Literale ........................................ 75

Lower BoundedWildcards .......... 279

M

Machine Time Line ........................ 154

macOS

Java-Installation ........................... 34

MacRoman-Zeichensatz ........ 148

main-Methode ................................... 38

bei mehreren Klassen ............. 208

map-Methode .................................. 321

Map-Schnittstelle ........................... 324

Map.Entry-Schnittstelle ............... 327

mapToInt-Methode ....................... 322

Math-Klasse ........................................ 70

Mathematische Operatoren ......... 93

max-Methode .................................. 321

Maximum (Arrays) ........................ 129

Mehrdimensionale Arrays .......... 124

Member Classes .............................. 220

Methoden ................................... 53, 172

überschreiben (Vererbung) 240

anonymeMethoden ............... 286

Defaultmethoden ..................... 294

Exception-Weitergabe ............ 197

finale Methoden ....................... 244

generische Methoden ............. 274

Getter/Setter ............................... 217

main-Methode .................... 38, 208

Parameter .................................... 176

Rückgabewert ............................ 182

Referenzen aufMethoden .... 290

Rekursion .................................... 183

statische ....................................... 211

statische/nichtstatische ........ 175

min-Methode ................................... 321

Minimum (Arrays) ......................... 129

minusXxx-Methoden ................... 161

Modifizierer ........................................ 73

Module (Jigsaw) ............................... 379

module-info.java-Datei ................ 379

move-Methode ................................ 339

N

Nested Classes ................................. 220

newBufferedReader-Methode ... 343

newBufferedWriter-Methode .... 342

newDirectoryStream-Methode 337

newLine-Methode .......................... 342

nextDouble-Methode ...................... 71

nextGaussian-Methode .................. 71

nextInt-Methode .............................. 71

nextLine-Methode ........................... 85

nextLong-Methode .......................... 71

No operation (NOP) ......................... 58

Notepad+ .............................................. 31

notify-Methode ............................... 254

notifyAll-Methode ......................... 254

now-Methode ......................... 157, 159

NumberFormat-Klasse ................. 146

O

Object-Klasse ................................... 250

Objekte .................................................. 54

objektorientierte

Programmierung ................... 204

Objektvariablen ........................... 79

ObservableListe-Schnittstelle .... 357

of-Methode ....................................... 160

432

“buch” — 2017/12/1 — 11:49 — page 433 — #429

Index

of-Methode (Collections) ............. 301

ofInstant-Methode ........................ 162

ofPattern-Methode ........................ 157

Oktale Zahlen ..................................... 76

OpenJDK ........................................ 26, 32

Operatoren .......................................... 90

Assoziativität ................................ 92

Grundrechenarten ..................... 93

Overloading ................................... 92

Priorität ........................................... 92

OptionalDouble-Klasse ................ 322

Oracle ..................................................... 26

out-Field ............................................... 84

Overloading ...................................... 179

Override-Annotation .................... 240

P

package-Anweisung ...................... 375

Pakete .................................................. 375

Defaultpaket ............................... 376

Pane-Klasse ....................................... 349

parallelStream-Methode ............. 321

Parameter .......................................... 176

Defaultwerte ............................... 180

finale Parameter ....................... 179

Overloading ................................ 179

variable Anzahl .......................... 180

parse-Methode

Datumund Uhrzeit ........ 159, 167

Fließkommazahlen .................. 146

hexadezimale Zahlen .............. 144

parseByte-Methode ....................... 144

parseDouble-Methode ................. 144

ParseException-Klasse ................. 146

parseFloat-Methode ...................... 144

parseInt-Methode .......................... 144

parseLong-Methode ...................... 144

parseShort-Methode ..................... 144

Path-Schnittstelle ........................... 332

Path-Variable einstellen ................. 30

Paths-Klasse ..................................... 332

Period-Klasse ................................... 160

Pferd (Schachbeispiel) .................. 228

PI-Konstante ....................................... 70

plusXxx-Methoden ....................... 161

Polymorphie ..................................... 247

Beispiel ......................................... 259

Schnittstellen ................... 264, 266

PosixFileAttributes-

Schnittstelle ............................. 336

Postfix-Notation ............................... 95

Potenzieren ......................................... 70

pow-Methode ..................................... 70

Präfix-Notation ................................. 95

previous-Methode ......................... 318

print-Methode .................................... 84

printf-Methode ............................... 165

println-Methode ............................... 84

Priorität von Operatoren ............... 92

private-Schlüsselwort ................... 209

protected-Schlüsselwort ............. 209

public-Schlüsselwort .................... 209

put-Methode .................................... 324

Q

Quadratwurzel ................................... 70

R

RadioButton-Klasse ....................... 353

Random-Klasse .................................. 71

readAllLines ...................................... 344

readAttributes-Methode ............. 336

readLine-Methode ......................... 343

reduce-Methode .......... 290, 321, 323

Refactoring ....................................... 388

433

Page 39: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 434 — #430

Index

Referenzen

auf Konstruktoren ................... 292

auf Methoden ............................ 290

Reguläre Ausdrücke ...................... 141

Rekursion .......................................... 183

relativize-Methode ........................ 333

remove-Methode .................. 308, 310

removeAll-Methode ...................... 310

removeIf-Methode ......................... 311

REPL ........................................................ 44

replace-Methode ................... 139, 141

replaceAll-Methode ....................... 318

requires (Module) ........................... 379

resolve-Methode ............................. 333

retainAll-Methode ......................... 310

return-Schlüsselwort .................... 182

Rich Internet Applications ......... 347

Right-Shift (bitweises Rechnen) 98

Rundungsfehler ................................ 69

RuntimeException-Klasse .......... 194

S

SafeVarargs-Annotation .............. 181

scanDouble-Methode ...................... 85

Scanner-Klasse ................................... 85

Scene Graph (JavaFX) .................... 350

Scene-Klasse ..................................... 350

Schach

Beispiel Springer-Klasse ........ 228

Beispiel Vererbung ................... 254

Schaltjahr ................................. 105, 158

Schleifen ............................................ 100

forEach-Methode ...................... 286

Maps .............................................. 326

Sets ................................................. 316

verschachteln ............................. 114

Schnittstellen ................................... 259

Comparable ................................. 280

funktionale ................................. 262

versus abstrakte Klassen ....... 264

set-Methode ..................................... 217

Set-Schnittstelle .............................. 312

setBottom-Methode ...................... 353

setCenter-Methode ........................ 353

setOnAction-Methode ........ 349, 357

setPadding-Methode .................... 356

setScene-Methode ......................... 350

setSpacing-Methode ..................... 356

setStyle-Methode ........................... 357

setText-Methode ............................ 349

setTitle-Methode ............................ 349

setValue-Methode .......................... 327

setXxx-Methoden

(GraphicsContext) .................. 359

Short-Circuit-Evaluation ............... 96

short-Datentyp .................................. 68

Short-Klasse ........................................ 81

show-Methode ................................ 350

SimpleFormat-Klasse .................... 165

sin-Methode ........................................ 70

size-Methode .......................... 310, 335

skip-Methode ................................... 321

sort-Methode .......................... 127, 283

split-Methode ......................... 141, 321

Springer (Schachbeispiel) ........... 228

sqrt-Methode ...................................... 70

Stack .................................................... 184

StackPane-Klasse ............................ 349

Stage-Klasse ...................................... 349

Standardausgabe .............................. 84

StandardCopyOption-

Enumeration ........................... 339

Standardeingabe ............................... 85

StandardOpenOption-

Enumeration ........................... 342

start-Methode .................................. 349

startWith-Methode ........................ 138

434

“buch” — 2017/12/1 — 11:49 — page 435 — #431

Index

static-Schlüsselwort ...................... 211

Statische Importe ........................... 374

StatischeMethoden ............. 175, 211

Statische Variablen ........................ 211

stream-Methode ............................. 321

Stream-Schnittstelle ..................... 320

Dateien durchlaufen ............... 338

Minimum ermitteln ................ 290

Textdateien lesen ..................... 344

Strichpunkte ....................................... 58

String-Klasse .................................... 134

Eigenheiten ................................. 135

sortieren ....................................... 137

vergleichen .................................. 136

Zeichensatz ................................. 148

StringBuffer-Klasse ........................ 147

StringBuilder-Klasse ..................... 147

strokeXxx-Methoden ................... 359

Subklasse ........................................... 240

substring-Methode ........................ 139

super-Schlüsselwort ...................... 243

Lambda-Ausdrücke .................. 290

Superklasse ....................................... 240

Swing ................................................... 347

switch .................................................. 107

System-Klasse .................................. 332

T

Tage proMonat (Beispiel) ........... 108

Templates (IntelliJ) ......................... 390

Temporäre Dateien ........................ 339

Temporäre Verzeichnisse 332, 339

ternärer Operator ........................... 106

TextArea-Klasse .............................. 353

Textdateien

lesen ............................................... 343

schreiben ..................................... 342

this-Schlüsselwort ......................... 214

Lambda-Ausdrücke .................. 290

ThreeTen-Projekt ............................ 153

Throwable-Klasse ........................... 193

toAbsolute-Methode ..................... 334

toArray-Methode ............................ 310

toHours-Methode .......................... 160

toLowerCase-Methode ........ 133, 139

toMinutes-Methode ...................... 160

Top-Level-Klassen .......................... 205

toRealPath-Methode ..................... 334

toString-Methode ........................... 254

toUpperCase-Methode ....... 133, 139

transient-Modifier ............................ 74

trim-Methode .................................. 139

try-Schlüsselwort ........................... 195

Typumwandlung .............................. 72

U

Überlaufkontrolle ...................... 68, 69

Uhrzeit ...................................... 153, 159

UnixPath-Klasse ............................. 332

Unterklasse ....................................... 240

Upcast .......................................... 73, 250

Upper BoundedWildcards ......... 278

UserPrincipal-Schnittstelle ........ 335

UTF-8-Codierung .................. 148, 342

V

valueOf-Methode ............................ 141

values-Methode .............................. 327

varargs-Parameter ......................... 180

Variable Capture ............................. 226

Lambda-Ausdrücke .................. 290

Variablen .............................................. 65

statische ....................................... 211

VBox-Klasse ...................................... 353

435

Page 40: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

“buch” — 2017/12/1 — 11:49 — page 436 — #432

Index

Vererbung .......................................... 240

Vergleiche

Objekte ............................................ 95

Zahlen .............................................. 95

Zeichenketten ............................... 96

Verknüpfte Bedinungen ................. 96

Verschachtelte Klassen ................ 220

Verzeichnisse ................................... 329

aktuelles Verzeichnis .............. 332

alle Dateien ermitteln ............. 337

erzeugen ....................................... 339

Existenz testen ........................... 334

Heimatverzeichnis ................... 332

rekursiv durchlaufen .............. 338

temporäre

Verzeichnisse ................. 332, 339

umbenennen ............................. 339

zusammensetzen ..................... 333

Verzweigungen ................................ 100

volatile-Modifier ............................... 74

Vorzeichen ........................................... 68

W

wait-Methode ................................... 254

walk-Methode .................................. 338

while-Schleife ................................... 117

break und continue ................. 119

Endlosschleifen ......................... 120

Wildcard-Import ............................. 373

Wildcards (generische Klassen) 275

Lower BoundedWildcards .... 279

Upper BoundedWildcards .... 278

Windows

IntelliJ IDEA installieren ........... 31

Java-Installation ........................... 29

Path-Variable ................................. 30

UTF-8 in Eclipse ......................... 150

Zeichensatz ................................. 148

WindowsPath-Klasse .................... 332

withLocale-Methode ..................... 157

withMonth-Methode .................... 158

Wrapper-Klassen ............................... 81

generische Klassen .................. 272

write-Methode ....................... 342, 343

Z

Zeichenketten ........................ 132, 134

sortieren ....................................... 137

vergleichen ........................... 96, 136

Zeichensatz ....................................... 148

Textdateien ................................. 345

Zeit

aktuelle Zeit ermitteln ............ 159

messen .......................................... 162

Zeitzone .............................. 154, 162

ZoneId-Klasse .................................. 162

Zufallszahlen ...................................... 71

Zuweisungen ...................................... 93

436

Page 41: issen ies eh. - Amazon S3 › gxmedia.galileo-press...neues Android-Spiel oder eine eigene interaktive Webseite programmie-ren.Immerhin enthältKapitel17,»JavaFX«,einenknappenEinstiegindie

Michael Kofler

Java – Der Grundkurs436 Seiten, broschiert, 2. Auflage, Dezember 2017 12,90 Euro, ISBN 978-3-8362-4581-4

www.rheinwerk-verlag.de/4397

Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Gerne dürfen Sie diese Leseprobe empfehlen und weiter-geben, allerdings nur vollständig mit allen Seiten. Die vor-liegende Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.

Teilen Sie Ihre Leseerfahrung mit uns!

Dr. Michael Kofler hat Telematik an der TU Graz studiert. Er ist einer der erfolg-reichsten und vielseitigsten Computer-buchautoren im deutschen Sprachraum. Zu seinen Themengebieten zählen neben Linux auch macOS, MySQL, KVM, Visual Basic und Excel-VBA. Viele seiner Bücher wurden übersetzt. Michael Kofler arbei-tet als Software-Entwickler, Berater sowie als Lehrbeauftragter an zwei Fachhoch-schulen.

Wissen, wie’s geht.