Java 7 - Das Übungsbuch - Beck-Shop

Werbung
mitp Professional
Java 7 - Das Übungsbuch - Bd. II
Über 180 Aufgaben mit vollständigen Lösungen
von
Elisabeth Jung
1. Auflage
Java 7 - Das Übungsbuch - Bd. II – Jung
schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG
Thematische Gliederung:
Objektorientierte Programmierung
mitp/bhv 2012
Verlag C.H. Beck im Internet:
www.beck.de
ISBN 978 3 8266 9203 1
Inhaltsverzeichnis: Java 7 - Das Übungsbuch - Bd. II – Jung
Einleitung
Java 7 Das Übungsbuch Band II ist die Fortführung von Java 7 Das Übungsbuch Band I,
das im Oktober 2011 beim mitp-Verlag erschienen ist. Der erste Band enthält Kapitel
zur objektorientierten Programmierung, zur grafischen Darstellung mit dem Abstract Windowing Toolkit (AWT) und Swing, zu inneren Klassen, Generizität, Ausnahmebehandlung, Reflection und zu den Neuerungen dazu durch Java 6 und Java
7. Mit dem zweiten Band kommen weitere Kapitel mit einer ebenso detaillierten
Behandlung von Themen wie Dateien und Streams, Threads, Applets, Multimedia
und Netzwerkprogrammierung und den jeweiligen Neuerungen durch Java 6 und
Java 7 hinzu. Der Schwerpunkt dieses Buches liegt auf einfachen Beispielen, die
keine umfangreichen Algorithmen mit der Java-Programmiersprache umsetzen, da
immer wieder die Erfahrung gemacht wird, dass diese beim Lernen einer Programmiersprache keine große Hilfe sind.
Java 7 Das Übungsbuch Band II bietet sowohl vom Inhalt als auch von der Art und
Weise, wie weitere Themen zu der Java-Programmiersprache behandelt werden,
eine wichtige Ergänzung zu Band I. Mit dieser Auflage wird das 2. Kapitel komplett
neu überarbeitet, um die Neuerungen aus Java 5, 6 und 7 gemäß den Entwicklungen
und Abläufen von Multithreading-Applikationen auf Multi-Prozessor- und Multikern-Rechnern in Programmen anzupassen. Gleichzeitig wurden die Kapitel 1 und
7 um die neuen NIO.2-Themen von Java 7 ergänzt: das neue File-System-API und
die Erweiterungen der asynchronen I/O.
Als Begleitliteratur zum Lernen der Programmiersprache Java wendet es sich nicht
nur an Lehrer, Schüler und Studenten, sondern ist auch zum Selbststudium geeignet. Gerade für Anfänger, denen oft Beispiele von Java-Programmen fehlen, die die
teilweise komplizierten Ausdrücke im Programmaufbau klarer werden lassen und
eine Hilfestellung beim Schreiben von eigenen Programmen bieten, ist dieses
Übungsbuch (in Kombination mit einem Lehrbuch) geeignet. Auch in Projektarbeiten kann auf die ausgearbeiteten Details zurückgegriffen werden, wenn tief liegende
Fehler schwer zu finden sind.
Der Schwerpunkt liegt auch in Band II auf verständlich formulierten Erläuterungen
zu den wichtigsten Begriffen der Programmiersprache und den zugrunde liegenden Konzepten. Anhand derer soll der Leser in die Lage versetzt werden, die wesentlichen Merkmale vertiefend zu erlernen. Dazu werden die Beispiele in jedem Kapitel
von ganz einfachen Anfangsbeispielen bis hin zu komplexeren Aufgaben erweitert.
21
Einleitung
Alle Übungen werden vom ersten Ansatz bis zum Ergebnis vollständig durchgeführt. Die Programm-Codes der Lösungsvorschläge werden mit Kommentaren
umfassend erklärt.
Großer Wert wird auf die Reihenfolge gelegt, in der die Begriffe definiert und in Beispielen benutzt werden, auch wenn, wie so oft in Java und in vielen anderen Programmiersprachen, die Begriffe so eng miteinander verknüpft sind, dass eine
optimale Reihenfolge in ihrer Behandlung nicht immer einfach zu finden ist. Lässt
sich eine Abweichung von der vorher gewählten Reihenfolge nicht vermeiden, wird
darauf hingewiesen.
Wie auch im ersten Band wird den Java-Standard-Klassen mit ihren Feld- und
Methoden-Definitionen besonders große Aufmerksamkeit geschenkt. Oft ist es
nicht sinnvoll, eigene Methoden oder Klassen zu implementieren, da diese dem
Programmierer bereits von der Java-Standard-API zur Verfügung gestellt werden. In solchen Fällen werden diese Methoden und Klassen detailliert beschrieben. Das Buch soll außerdem den Umgang mit der Online-Dokumentation von
Java vertiefen.
Beide Bände des Java-7-Übungsbuches heben die wichtigsten Änderungen von Java
5, 6 und 7 zu den jeweiligen Themen hervor. Es wird viel mit den mit Java 5 eingeführten und im ersten Band in einem eigenen Kapitel behandelten generischen
Klassen und Interfaces gearbeitet und immer wieder auf Beispiele mit parametrisierten Typen von Daten zurückgegriffen.
Vorkenntnisse
Für die Arbeit mit diesem Buch werden Grundlagen im Bereich der Programmierung und im Umgang mit dem Betriebssystem vorausgesetzt. Es ist ein Übungsbuch, das zusätzlich zu allen Lehrbüchern von Java benutzt werden kann und durch
das Lösen der Aufgaben dem Leser die Möglichkeit gibt, den darin enthaltenen Stoff
zu vertiefen. Auf einfache, verständliche und zu jeder Thematik aussagekräftige Beispiele wird besonders großer Wert gelegt. So können alle beschriebenen Themen
tiefgehend und präzise eingeübt und die dabei erzielten Ergebnisse anhand der
Lösungsvorschläge überprüft werden.
Die Lektüre des ersten Bandes Java 7 Das Übungsbuch ist nicht zwingend erforderlich, da alle Kapitel von Band II sowohl vollständig unabhängig von diesem als auch
unabhängig voneinander bearbeitet werden können. Die in Band I enthaltenen
Definitionen und Erläuterungen von Begriffen als auch die Aufgaben selbst können
aber in vielen Fällen eine wichtige Hilfe sein.
In Band I werden die wichtigsten Grundlagen der Programmiersprache Java und
der GUI-Programmierung mit Java behandelt. In Band II finden Sie viele nützliche
Ergänzungen dazu.
22
Aufbau des Buches
Aufbau des Buches
In der Einführung zu jedem einzelnen Kapitel wird der Stoff, der in den Übungsaufgaben dieses Kapitels verwendet wird, kurz beschrieben. Danach folgen die Aufgabenstellungen der Übungen und am Ende des Kapitels Lösungsvorschläge. Alle
Kapitel enthalten Wiederholungsaufgaben, in denen die bis dahin definierten
Begriffe noch einmal eingesetzt werden müssen.
Der Schwierigkeitsgrad der Aufgaben wird wie auch in Band 1 im Aufgabenkopf
durch 1 bis 3 Sternchen gekennzeichnet:
1 Sternchen für besonders einfache Aufgaben, die auch von Anfängern
leicht bewältigt werden können;
2 Sternchen für etwas kompliziertere Aufgaben, die einen durchschnittlichen Aufwand benötigen;
3 Sternchen für Aufgaben, die sich an geübte Programmierer richten und
einen wesentlich höheren Aufwand oder die Kenntnis spezieller Details
erfordern.
In Kapitel 1 werden die wichtigsten Stream-Klassen von Java in Beispielklassen eingebaut und der Umgang mit File- und URL-Objekten beschrieben, die Dateien bzw.
Ressourcen aus dem Internet oder auf dem lokalen Rechner repräsentieren. Es wird
auf die Unterschiede zwischen den Datentypen, ihrer Ablage in Dateien oder im
Speicher sowie auf ihren Zugriff eingegangen. Byte-Streams und CharacterStreams werden parallel vorgestellt. Dabei wird von Anfang an auf die dazu definierten Klassen sowie auf die Gemeinsamkeiten und Unterschiede beim Erzeugen
und beim Zugriff auf diese Streams hingewiesen.
Es werden die mit Java 5 eingeführten Klassen Scanner und Formatter, die eine
wichtige Rolle bei der Ein- und Ausgabe von Daten spielen, eingesetzt sowie die mit
dieser Version neu implementierten Methoden genutzt.
Das Kapitel beschreibt zusätzlich, wie Objekt-Serialisierungen vorzunehmen sind
und wie die Vergabe einer Versionsnummer für Java-Klassen durchgeführt werden
kann.
Das mit Java 7 neu implementierte Path-Interface sowie die neue Files-Klasse, die
das File-System-API ergänzen, werden parallel zur File-Klasse in neuen Aufgaben
angewandt.
Mit Java 1.4 wurde mit dem NIO (»new input/output«) ein neues I/O-API eingeführt, das auf Channels basiert. Dieses wurde in Java 7 mit dem NIO.2 erweitert.
Der neue Datentyp AsynchronousFileChannel unterstützt mit asynchronen I/OOperationen die Nebenläufigkeit und Skalierbarkeit von Programmen auf MultiProzessor- und Multicore-Architekturen und wird in Beispielen parallel zur streamorientierten Vorgehensweise genutzt.
23
Einleitung
Im Kapitel 2 erfolgt nach einer allgemeinen Beschreibung von Java-Threads eine
Gegenüberstellung von alten und neuen Synchronisationsmechanismen für Threadabläufe mit impliziten und expliziten Locks. Es wird gezeigt, wie eine direkte Anwendung des synchronized-Schlüsselworts durch eine Benutzung der neuen Klassen
und Interfaces aus den mit Java 5 eingeführten Concurrency Utilities vermieden werden kann. Eine besondere Aufmerksamkeit wird auch den Threads von grafischen
Benutzeroberflächen zuteil, insbesondere durch die Benutzung der mit Java 6 eingeführten SwingWorker-Klasse.
Heutzutage, wo das Einsparen von Rechenzeit generell kein Problem mehr darstellt
und auf Multi-Prozessor- und Multicore-Systemen die Nebenläufigkeit von Threadabläufen »in echt« realisierbar ist, sollte ein exklusives Sperren von kritischen Bereichen eher vermieden werden und auf die neueren Modelle von Synchronisation
zurückgegriffen werden. Darum wird in vielen Aufgaben auf die Bedeutung von
»immutable«-Klassen und die des volatile-Schlüsselworts als Synchronisationsform eingegangen. Dabei werden die wichtige Rolle, die das JMM in der Erstellung
von threadsicheren Klassen spielt, und die Erkenntnisse, dass eine unerwünschte
Publikation (Veröffentlichung) eines Objekts zu schwer auffindbaren Fehlern führen kann sowie dass das Starten und Beenden eines Threads auch Sichtbarkeitsgarantien mit sich bringt, ebenfalls nicht außer Acht gelassen.
Das mit Java 7 neu eingeführte Fork/Join-Framework wurde darauf ausgerichtet,
die Vorteile von Multi-Prozessor- und Multikernel-Systemen besonders effizient zu
nutzen. Wir zeigen, wie umfangreiche Berechnungen sich in Teilaufgaben untergliedern lassen, um von mehreren Tasks parallel ausgeführt zu werden.
In Kapitel 3 werden Applet- und JApplet-Komponenten mit ihren Parallelitäten
und Unterschieden zu den in Band I behandelten Frame- und JFrame-Komponenten eingeführt und es wird deren Ausführung innerhalb von HTML-Seiten sowohl
mit dem Applet-Viewer als auch in einem Webbrowser geübt.
In Kapitel 4 wird auf die von Java bereitgestellten Multimedia-Fähigkeiten für diese
Komponenten eingegangen. Die Benutzung von Bild- und Sound-Dateien wird in
Fenster- und Applet-Klassen mit vielen Bemerkungen zum Ablauf dargestellt. Dazu
werden die Rolle, die der MediaTracker und der ImageObserver beim Laden von
Bilddateien spielen, und die Unterschiede beim Einsatz beschrieben und mit Beispielen demonstriert.
In Kapitel 5 wird der Einsatz von Threads für Animationen mit vielen einfachen und
auch etwas umfangreicheren Klassendefinitionen sowohl für Applet- als auch für
Fenster-Komponenten gezeigt und die Synchronisation von Threads und die damit
verbundenen »Objekt-« und »Klassen-Sperren« wie auch die Kommunikation zwischen Threads vertieft.
Das Kapitel 6 erläutert die Kommunikation zwischen mehreren Applets sowie
zwischen einem Applet und dem Webbrowser. Da Applets in erster Linie für den
Einsatz im Internet konzipiert wurden, unterliegen sie standardisierten Sicher-
24
Benötigte Software
heitsbestimmungen bezüglich Zugriffsrechten, die von einem Sicherheitsmanager
überwacht und von Programmen beachtet werden müssen.
Wenn im Internet eine Webseite über einen Browser angefordert wird, verbirgt sich
dahinter eine Netzwerkkommunikation. Java liefert eine Vielzahl von eingebauten
Netzwerkfähigkeiten, die das Entwickeln von Servern und Clients, die über unterschiedliche Protokolle kommunizieren können, möglich machen. Diese werden in
Kapitel 7 anhand vielseitiger Beispiele demonstriert.
Der Leser wird schon in früheren Kapiteln beim Ausführen von Applets in einem
Webbrowser mit einer Client-Server-Kommunikation im Netzwerk konfrontiert,
ohne dass dabei direkt darauf hingewiesen wird. In Kapitel 7 werden Server und
Clients für die Kommunikation über TCP- und UDP-Transportprotokolle programmiert, URL-Verbindungen näher erläutert und webbasierte Client-Server-Architekturen, die über das http-Protokoll abgewickelt werden, beispielhaft dargestellt.
Dabei werden auch die Möglichkeiten für die Realisierung von parallelen Servern
sowie die neuen Features von Java 6 und 7 zum Thema Netzwerkprogrammierung
beachtet.
Auch das Kapitel 7 wurde um die wichtigsten Neuerungen des NIO.2 für eine
zuverlässige Client-Server-Kommunikation ergänzt. Das neue Interface NetworkChannel aus dem Paket java.nio.channels gibt die Methoden vor, die von
Socket-Klassen für eine auf Channels basierende Kommunikation implementiert
werden müssen. Dieses wird sowohl von den synchronen Channel-Klassen
ServerSocketChannel, SocketChannel und DatagrammSocket aus Java 1.4 als
auch von den neuen asynchronen Channel-Klassen AsynchronousSocketChannel
und AsynchronousServerSocketChannel von Java 7 implementiert, die in neuen
Beispielklassen, auf die schon vorhandene Aufgaben umgestellt werden, zum Einsatz kommen.
Benötigte Software
Für die Durchführung der Übungen können Sie das Java Development Kit (JDK) der
Java Standard Edition (SE) Version 5.x, 6.x oder 7.x verwenden. Für die Übungen, in
denen die Versionen 6.x und 7.x benötigt werden, wird dies in den entsprechenden
Aufgabenstellungen angegeben.
Das aktuelle JDK der Java SE können Sie sich kostenlos von der Java-Homepage von
Sun unter der Adresse http://java.sun.com/javase/downloads/index.jsp
herunterladen. Das JDK umfasst sowohl die Software zur Programmerstellung als
auch das Java Runtime Environment (JRE) für die Programmausführung.
Grafische Entwicklungsoberflächen wie zum Beispiel Eclipse sind weder Voraussetzung noch Bestandteil dieses Buches. Die vorgestellten Programme lassen sich
grundsätzlich mit einem einfachen Texteditor wie beispielsweise Notepad++ oder
Wordpad eingeben und über die Kommandozeile durch den Aufruf des Programmes javac übersetzen. Das Starten von Applikationen kann durch das Programm
25
Einleitung
java erfolgen und Applets können sowohl mit dem Programm appletviewer als
auch in einem Webbrowser durch Angabe der dazugehörigen HTML-Datei ausgeführt werden. Die vollständigen Programmaufrufe sind bei jeder Aufgabe angegeben.
Selbstverständlich können die Programm- und Klassendateien zum Testen oder
Ergänzen auch in eine Entwicklungsumgebung eingebettet werden.
Webseite zum Buch
Die Webseite zum Buch unter http://www.mitp.de/9203 beinhaltet den plattformunabhängigen Quellcode der Lösungsvorschläge und die für Windows 7
kompilierte ausführbare Version als Download-Archiv. Dort finden Sie alle JavaQuellcodes, übersetzten Klassen sowie Bild- und Sounddateien in einer Verzeichnisstruktur, die mit der im Buch beschriebenen übereinstimmt.
Ich wünsche Ihnen weiterhin viel Spaß und Erfolg beim Programmieren mit Java.
Elisabeth Jung
Autorin
Elisabeth Jung ist freie Autorin und wohnhaft in Frankfurt am Main.
Nach dem Studium der Mathematik an der Universität Temeschburg (Timisoara) in
Rumänien hat die Autorin Grundlagen der Informatik und Fortran unterrichtet. Im
Jahr 1982 hat sie bereits eine Aufgabensammlung für Fortran an der gleichen Universität veröffentlicht.
Zwischen den Jahren 1984 und 2001 hat Elisabeth Jung bei der Firma Siemens in
Frankfurt in einer Vielzahl von Projektarbeiten umfangreiche Erfahrungen gesammelt in den Bereichen Programmiersprachen (Assembler, Fortran, Pascal, C, C++,
Java), Datenbanken (Text-Retrieval, relationale Systeme, Client-Server-Architekturen) und der Entwicklung und dem Test von Hardware-naher Systemsoftware.
Seit 2001 beschäftigt sie sich mit ihren bevorzugten Themen, der Mathematik und
den objektorientierten Programmiersprachen, insbesondere Java. Ihr Buch ist aus
der Erfahrung im Unterricht und dem Erlernen von Programmiersprachen entstanden, bei dem insbesondere das eigene Programmieren und die praktische
Anwendung des Gelernten eine große Rolle spielt.
26
Herunterladen