Java als erste Programmiersprache Joachim Goll (cid:129) Cornelia Heinisch Java als erste Programmiersprache Ein professioneller Einstieg in die Objektorientierung mit Java 7. Aufl age Prof. Dr. Joachim Goll Cornelia Heinisch Esslingen, Deutschland ISBN 978-3-8348-1857-7 ISBN 978-3-8348-2270-3 (eBook) DOI 10.1007/978-3-8348-2270-3 Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografi e; detaillierte bibliografi sche Daten sind im Internet über http://dnb.d-nb.de abrufb ar. Springer Vieweg © Springer Fachmedien Wiesbaden 2000, 2001, 2002, 2005, 2007, 2011, 2014 Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung, die nicht aus- drücklich vom Urheberrechtsgesetz zugelassen ist, bedarf der vorherigen Zustimmung des Verlags. Das gilt insbesondere für Vervielfältigungen, Bearbeitungen, Übersetzungen, Mikroverfi lmungen und die Ein- speicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürft en. Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier Springer Vieweg ist eine Marke von Springer DE. Springer DE ist Teil der Fachverlagsgruppe Springer Science+Business Media. www.springer-vieweg.de Vorwort Die Sprache Java ist durch ihre Betriebssystemunabhängigkeit ideal für die Reali- sierung verteilter Systeme, die aus verschiedenartigsten Rechnern vom Handy bis zum Großrechner aufgebaut sein können. Java wird heute bereits im Informatik- Unterricht an den Gymnasien unterrichtet und ist fester Bestandteil des Studiums von Ingenieuren und Betriebswirten geworden. Java stellt im Grunde genommen eine einfache Sprache dar. Darüber hinaus werden jedoch in umfangreichen Klassenbibliotheken wertvolle und weitreichende Hilfsmittel zur Verfügung gestellt, die den Bau verteilter Systeme mit Parallelität, Oberflächen, Kommunikationsprotokollen und Datenbanken in erheblichem Maße unterstützen. Dieses Buch konzentriert sich auf die Sprache und nicht auf den Bau verteilter Sys- teme. Es wendet sich an Studierende, Umsteiger und Schüler, welche das Interesse haben, die Grundlagen von Java fundiert zu erfahren. Es erlaubt, Java ohne Vor- kenntnisse anderer Programmiersprachen zu erlernen. Daher lautet der Titel "Java als erste Programmiersprache". Wer das Buch nur lesen möchte, sollte aber bereits über die Kenntnisse einer anderen Programmiersprache verfügen. Ein Neuling sollte unbedingt die Übungsaufgaben am Ende eines Kapitels bearbeiten. Dieses Buch hat das ehrgeizige Ziel, dem Neuling die Sprachkonzepte von Java, die Grundkonzepte der objektorientierten Programmierung und die für die Sprache Java wichtigen Teile der Klassenbibliothek so präzise wie möglich und dennoch in leicht verständlicher Weise vorzustellen. Dabei werden Fortgeschrittenen-Themen als solche explizit ausgewiesen, damit ein Anfänger sich zunächst auf die Grundlagen von Java konzentrieren kann. Ausgehend von dieser Basis können darauf aufbauend die fortgeschrittenen Themen erschlossen werden. Alle Kapitel enthalten Übungsaufgaben, die zum selbstständigen Programmieren he- rausfordern. Selbstständig Modellieren und Programmieren ist das Ziel des Flugha- fen-Projekts, welches begleitend zu den Kapiteln 10 bis einschließlich 22 durchge- führt werden kann und zu einem System führt, das die Fluglotsen bei Start und Lan- dung von Flugzeugen unterstützt. Das Buch enthält die wesentlichen Neuerungen zu Java 7, u. a. das automatische Ressourcen-Management, das Ressourcen wie z. B. Streams oder Datenbankver- bindungen nach Gebrauch automatisch von der Java-Virtuellen Maschine schließen lässt. Ferner werden die in Java 7 hinzugekommenen Erweiterungen beim Exception Handling behandelt, wie z. B. das Fangen mehrerer Exceptions in einem einzigen -Block (Multi-catch Exceptions), das verbesserte Weiterwerfen von Exceptions catch oder unterdrückte Exceptions. Auch kleinere Änderungen in Java 7, wie binäre Literale oder der Diamant-Operator, sind im Buch enthalten. Einen Überblick über die in diesem Buch integrierten Java 7-Neuerungen erhalten Sie am besten durch Nachschlagen des Eintrages "Java 7" im Index. Auf viele Details von Java kann wegen des Umfangs des Buchs leider nicht einge- gangen werden. Die zentralen Themen der Sprache sind jedoch im Buch erfasst. Auf die Java Language Specification unter der Internet-Adresse http://docs.oracle.com/javase/specs/ wird verwiesen. Es soll hier nicht unerwähnt bleiben, dass die Java-Klassenbibliothek ca. 4000 Klas- sen umfasst. Hierzu treten noch zahlreiche kommerzielle bzw. offene Bibliotheken beispielsweise für einen komfortablen Zugriff auf Datenbanken oder das Einlesen und Erzeugen von -Dateien. xml Unser besonderer Dank bei dieser Auflage gilt Herrn Martin Hiller, Herrn Ansgar Hoffmann, Herrn Paul Krohmer und Herrn Markus Schuler, die jeweils an der Überarbeitung mehrerer Kapitel wesentlich mitgewirkt haben. Herrn Markus Bach, Herrn Dimitri Benin, Herrn Matthias Nemeth, Herrn Dr. Andreas Rau, Herrn Joachim Spieth und Frau Karin Weiß danken wir für die Durchsicht einzelner Kapitel sowie Herrn Erath für strategische Diskussionen. Herr Steffen Wahl und Frau Jennifer Rauscher haben das Konfigurationsmanagement in professioneller Weise durch- geführt. Esslingen, im September 2013 J. Goll / C. Heinisch Wegweiser durch das Buch Das Buch umfasst 2 Teile: Teil I: Objektorientierung und Grundkurs Java Teil II: Grundlegende Java-Bibliotheken "Lernkästchen", auf die grafisch durch eine kleine Glühlampe aufmerk- sam gemacht wird, weisen auf für das Verständnis wichtige Aspekte eines Kapitels hin. Die Zusammenfassung eines jeden Kapitels erlaubt eine rasche Wiederholung des Stoffes. "Warnkästchen" hingegen weisen den Leser zum einen auf gerne begangene Fehler hin, zum anderen warnen sie den Leser vor einer Vorsicht! Fehlinterpretation des Textes an "gefährlichen" Stellen des Buchs. Gerade ein Anfänger in einer Programmiersprache macht gerne den Fehler, sich beim Lesen an nicht ganz so wesentlichen Einzelheiten festzubeißen. Damit ein Leser des Buchs leichter erkennen kann, welche Information grundlegend für das weitere Vorankommen ist und welche Information nur ein Detailwissen darstellt – und deshalb auch noch zu einem späteren Zeitpunkt vertieft werden kann – gibt dieses Buch eine einfache Hilfestellung. Es weist Kapitel oder Kapitelteile, die beim ersten Lesen des Buchs übersprungen werden können, mit dem "Überspringe und komm zurück"-Symbol aus. Generell ist es empfehlenswert, ein oder mehrere Kapitel zu überfliegen, um sich einen Überblick zu verschaffen, und dann erst mit der Feinarbeit zu beginnen und gründlicher zu lesen. Dennoch gilt: Eine Vorgehensweise, die sich für den einen Leser als optimal erweist, muss noch lange nicht für alle Leser das Allheilmittel darstellen. Wenn Sie zu den Lesern gehören, die es gewohnt sind, von Anfang an möglichst gründlich zu lesen, um möglichst viel sofort zu verstehen, so sollten Sie zumindest darauf achten, dass Sie in den Kapiteln mit dem "Überspringe und komm zurück"-Symbol beim ersten Durchgang nicht allzu lange verweilen. Bei all den guten Ratschlägen gilt: Programmieren hat man zu allen Zeiten durch Programmierversuche erlernt. "Do it yourself" heißt der Schlüssel zum Erfolg. So wie ein Kleinkind beim Erlernen der Muttersprache einfach zu sprechen versucht, so sollten auch Sie möglichst früh versuchen, in der Programmiersprache zu sprechen – das heißt, eigene Programme zu schreiben. Gestalten Sie den Lernvorgang ab- wechslungsreich – lesen Sie einen Teil und versuchen Sie, das Erlernte beim Pro- grammieren gleich umzusetzen. Die Beispielprogramme des Buches können zum Ausprobieren auf der Internetseite des Verlags unter www.springer-vieweg.de bezo- gen werden. Die Internetseite enthält auch die Bilder der einzelnen Kapitel, die Übungsaufgaben und Lösungen sowie das Flughafenprojekt. Aber bitte versuchen Sie zuerst selbst, die Aufgaben alleine zu lösen. Die nachfolgende Tabelle soll es dem Leser erleichtern, einzuordnen, welche Kapitel zu den Grundlagen (Symbol ) zählen und auf jeden Fall verstanden werden sollten, welche Kapitel zuerst übersprungen werden können und dann bei Bedarf (Symbol ) gelesen werden sollten, sowie welche Kapitel rein fortgeschrittene Themen (Symbol ) behandeln, die unabhängig voneinander gelesen werden können. Hier die erwähnte Tabelle: Teil I: Objektorientierung und Grundkurs Java 1 Grundlagen der Programmierung 2 Objektorientierte Konzepte 3 Einführung in die Programmiersprache Java 4 Einfache Beispielprogramme 5 Lexikalische Konventionen 6 Datentypen und Variablen 7 Ausdrücke und Operatoren 8 Kontrollstrukturen 9 Blöcke und Methoden 10 Klassen und Objekte 11 Vererbung und Polymorphie 12 Pakete 13 Ausnahmebehandlung 14 Schnittstellen 15 Threads 16 Generizität 17 Geschachtelte Klassen Teil II: Grundlegende Java-Bibliotheken 18 Collections 19 Ein-/Ausgabe und Streams 20 Applets 21 Sicherheit in Java 22 Oberflächenprogrammierung mit Swing Anhang A Der ASCII-Zeichensatz B Gültigkeitsbereiche von Namen C Die Klasse System D Die Java Reflection-API E Annotationen F -Dateien jar G Starke und schwache Referenzen Die folgende Tabelle zeigt die online verfügbaren Kapitel: 23 Java Native Interface 24 Beans 25 Java-Tools Schreibweise In diesem Buch sind der Quellcode und die Ein-/Ausgabe von ganzen Beispiel- programmen sowie einzelne Anweisungen und Ein-/Ausgaben in der Schriftart geschrieben. Dasselbe gilt für Programmteile wie Variablennamen, Courier New Methodennamen etc., die im normalen Text erwähnt werden. Ziffern werden in Ein- zelfällen ebenfalls in der Schriftart geschrieben, um sie vom Text Courier New deutlich abzugrenzen. Wichtige Begriffe im normalen Text sind fett gedruckt, um sie hervorzuheben. Ihre Verbesserungsvorschläge und kritischen Hinweise, die wir gerne annehmen, erreichen uns via E-Mail: [email protected] Inhaltsverzeichnis TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA .............. 1 1 GRUNDLAGEN DER PROGRAMMIERUNG ...................................... 4 1.1 Das erste Java-Programm ....................................................................... 4 1.2 Programme und ihre Abläufe ................................................................... 6 1.3 Entwurf mit Nassi-Shneiderman-Diagrammen ...................................... 13 1.4 Zeichen .................................................................................................. 19 1.5 Variablen ................................................................................................ 21 1.6 Datentypen ............................................................................................. 23 1.7 Zusammenfassung ................................................................................ 29 1.8 Übungen ................................................................................................ 31 2 OBJEKTORIENTIERTE KONZEPTE................................................ 34 2.1 Modellierung mit Klassen und Objekten ................................................ 34 2.2 Kapselung, Abstraktion und Information Hiding..................................... 44 2.3 Individuelle und geteilte Daten von Objekten in Java ............................ 46 2.4 Abstraktion und Brechung der Komplexität ........................................... 47 2.5 Erstes Programmbeispiel mit Objekten ................................................. 51 2.6 Flughafen-Projekt................................................................................... 54 2.7 Zusammenfassung ................................................................................ 66 2.8 Übungen ................................................................................................ 67 3 EINFÜHRUNG IN DIE PROGRAMMIERSPRACHE JAVA ............... 70 3.1 Sprachkonzepte von Java ..................................................................... 70 3.2 Eigenschaften von Java ......................................................................... 72 3.3 Die Java-Plattform ................................................................................. 73 3.4 Programmerzeugung und -ausführung .................................................. 77 3.5 Das Java Development Kit .................................................................... 82 3.6 Begriffe im Java-Umfeld ........................................................................ 86 3.7 Zusammenfassung ................................................................................ 87 3.8 Übungen ................................................................................................ 88 4 EINFACHE BEISPIELPROGRAMME ............................................... 92 4.1 Lokale Variablen, Ausdrücke und Schleifen .......................................... 92 4.2 Erzeugen von Objekten ......................................................................... 97 4.3 Initialisierung von Objekten mit Konstruktoren ...................................... 98 4.4 Schreiben von Instanzmethoden ......................................................... 102