Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger. 
Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Objektorientierte Beziehungsfragen
7 Ausnahmen müssen sein
8 Äußere.innere Klassen
9 Besondere Typen der Java SE
10 Generics<T>
11 Lambda-Ausdrücke und funktionale Programmierung
12 Architektur, Design und angewandte Objektorientierung
13 Komponenten, JavaBeans und Module
14 Die Klassenbibliothek
15 Einführung in die nebenläufige Programmierung
16 Einführung in Datenstrukturen und Algorithmen
17 Einführung in grafische Oberflächen
18 Einführung in Dateien und Datenströme
19 Einführung ins Datenbankmanagement mit JDBC
20 Einführung in <XML>
21 Testen mit JUnit
22 Bits und Bytes und Mathematisches
23 Die Werkzeuge des JDK
A Java SE-Paketübersicht
Stichwortverzeichnis


Download:

- Beispielprogramme, ca. 35,4 MB


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil Vorwort
 

Zum Seitenanfang

Vorwort Zur vorigen ÜberschriftZur nächsten Überschrift

»Mancher glaubt, schon darum höflich zu sein, weil er sich überhaupt noch der Worte und nicht der Fäuste bedient.«

– Friedrich Hebbel (1813–1863)

Am Anfang war das Wort. Viel später, am 23. Mai 1995, stellten auf der SunWorld in San Francisco der Chef vom damaligen Science Office von Sun Microsystems, John Gage, und Netscape-Mitbegründer Marc Andreessen die neue Programmiersprache Java und deren Integration in den Webbrowser Netscape vor. Damit begann der Siegeszug einer Sprache, die uns elegante Wege eröffnet, plattformunabhängig zu programmieren und objektorientiert unsere Gedanken auszudrücken. Die Möglichkeiten der Sprache und Bibliotheken sind an sich nichts Neues, aber so gut verpackt, dass Java angenehm und flüssig zu programmieren ist und Java heute zur populärsten Programmiersprache auf unserem Planeten zählt. Dieses Buch beschäftigt sich in 23 Kapiteln mit Java, den Klassen, der Designphilosophie, der objektorientierten Programmierung und dem Aufbau der Java-Standardbibliotheken.

 

Zum Seitenanfang

Über dieses Buch Zur vorigen ÜberschriftZur nächsten Überschrift

Die Zielgruppe

Die Kapitel dieses Buchs sind für Einsteiger in die Programmiersprache Java wie auch für Fortgeschrittene konzipiert. Kenntnisse in einer strukturierten Programmiersprache wie C, Delphi oder Visual Basic und Wissen über objektorientierte Technologien sind hilfreich, weil das Buch nicht explizit auf eine Rechnerarchitektur eingeht oder auf die Frage, was Programmieren eigentlich ist. Wer also schon in einer beliebigen Sprache programmiert hat, der liegt mit diesem Buch genau richtig! Objektorientiertes Vorwissen ist von Vorteil, aber nicht notwendig.

Was dieses Buch nicht ist

Dieses Buch darf nicht als Programmierbuch für Anfänger verstanden werden. Wer noch nie programmiert hat und mit dem Wort »Übersetzen« in erster Linie »Dolmetschen« verbindet, der sollte besser ein anderes Tutorial bevorzugen oder parallel lesen. Viele Bereiche aus dem Leben eines Industrieprogrammierers behandelt die »Insel« bis zu einer allgemein verständlichen Tiefe, doch sie ersetzt nicht die Java Language Specification (JLS: http://tutego.de/go/jls).

Die Java-Technologien sind in den letzten Jahren explodiert, sodass die anfängliche Überschaubarkeit einer starken Spezialisierung gewichen ist. Heute ist es kaum mehr möglich, alles in einem Buch zu behandeln, und das möchte ich mit der Insel auch auf keinen Fall. Ein Buch, das sich speziell mit der grafischen Oberfläche JavaFX oder Swing beschäftigt – beides Teile von Standard-Java –, ist genauso umfangreich wie die jetzige Insel. Nicht anders verhält es sich mit den anderen Spezialthemen, wie etwa objektorientierter Analyse/Design, UML, paralleler oder verteilter Programmierung, Enterprise JavaBeans, Datenbankanbindung, OR-Mapping, Web-Services, dynamischen Webseiten und vielen anderen Themen. Hier muss ein Spezialbuch die Neugier befriedigen.

Die Insel trainiert die Syntax der Programmiersprache, den Umgang mit den wichtigen Standardbibliotheken, Entwicklungstools und Entwicklungsumgebungen, objektorientierte Analyse und Design, Entwurfsmuster und Programmkonventionen. Sie hilft aber weniger, am Abend auf der Party die hübschen Mädels und coolen IT-Geeks zu beeindrucken und mit nach Hause zu nehmen. Sorry.

Mein Leben und Java, oder warum es noch ein Java-Buch gibt

Meine ursprüngliche Beschäftigung mit Java geht über 15 Jahre zurück und hängt mit einer universitären Pflichtveranstaltung zusammen. In unserer Projektgruppe befassten wir uns 1997 mit einer objektorientierten Dialogspezifikation. Ein Zustandsautomat musste programmiert werden, und die Frage nach der Programmiersprache stand an. Da ich den Seminarteilnehmern Java vorstellen wollte, arbeitete ich einen Foliensatz für den Vortrag aus. Parallel zu den Folien erwartete der Professor eine Ausarbeitung in Form einer Seminararbeit. Die Beschäftigung mit Java machte mir Spaß und war etwas ganz anderes, als ich bis dahin gewohnt war. Vor Java hatte ich rund zehn Jahre in Assembler kodiert, später dann mit den Hochsprachen Pascal und C, vorwiegend Compiler. Ich probierte aus, schrieb meine Erfahrungen auf und lernte dabei Java und die Bibliotheken kennen. Die Arbeit wuchs mit meinen Erfahrungen. Während der Projektgruppe sprach mich ein Kommilitone an, ob ich nicht Lust hätte, als Referent eine Java-Weiterbildung zu geben. Lust hatte ich – aber keine Unterlagen. So schrieb ich weiter, um für den Kurs Schulungsunterlagen zu haben. Als der Professor am Ende der Projektgruppe nach der Seminararbeit fragte, war die Vorform der Insel schon so umfangreich, dass die vorliegende Einleitung mehr oder weniger zur Seminararbeit wurde.

Das war 1997, und natürlich hätte ich mit dem Schreiben sofort aufhören können, nachdem ich die Seminararbeit abgegeben hatte. Doch bis heute macht mir Java immer noch viel Spaß, und ich freue mich auf jede neue Version. Und mit meinem Optimismus bin ich nicht allein: Die Prognosen für Java stehen ungebrochen gut, weil der Einsatz von Java mittlerweile so gefestigt ist wie der von COBOL bei Banken und Versicherungen. Daher wird immer wieder davon gesprochen, Java sei das neue COBOL.

Nach über fünfzehn Jahren sehe ich die Insel heute als ein sehr facettenreiches Java-Buch für die ambitionierten Entwickler an, die hinter die Kulissen schauen wollen. Der Detailgrad der Insel wird von keinem anderen (mir bekannten) deutsch- oder englischsprachigen Grundlagenbuch erreicht.[ 1 ](Und vermutlich gibt es weltweit kein anderes IT-Fachbuch, das so viele unanständige Wörter im Text versteckt. ) Die Erweiterung der Insel macht mir Spaß, auch wenn viele Themen kaum in einem normalen Java-Kurs angesprochen werden.

Software und Versionen

Als Grundlage für dieses Buch dient die Java Platform Standard Edition (Java SE) in der Version 8 in der Implementierung von Oracle, die Java Development Kit (Oracle JDK, kurz JDK) genannt wird. Das JDK besteht im Wesentlichen aus einem Compiler und einer Laufzeitumgebung (JVM) und ist für die Plattformen Windows, OS X, Linux und Solaris erhältlich. Ist das System keines der genannten, gibt es Laufzeitumgebungen von anderen Unternehmen bzw. vom Hersteller der Plattform: IBM bietet für IBM System i (ehemals iSeries) zum Beispiel eine eigene Laufzeitumgebung. Die Einrichtung dieser Exoten wird in diesem Buch nicht besprochen.

Eine grafische Entwicklungsoberfläche (IDE) ist kein Teil des JDK. Zwar verlasse ich mich ungern auf einen Hersteller, weil die Hersteller unterschiedliche Entwicklergruppen ansprechen, doch sollen in diesem Buch die freien Entwicklungsumgebungen Eclipse und NetBeans Verwendung finden. Die Beispielprogramme lassen sich grundsätzlich mit beliebigen anderen Entwicklungsumgebungen, wie etwa IntelliJ IDEA oder Oracle JDeveloper, verarbeiten oder mit einem einfachen ASCII-Texteditor – wie Notepad (Windows) oder vi (Unix) – eingeben und auf der Kommandozeile übersetzen. Diese Form der Entwicklung ist allerdings nicht mehr zeitgemäß, sodass ein grafischer Kommandozeilen-Aufsatz die Programmerstellung vereinfacht.

Welche Java-Version verwenden wir?

Seit Oracle (damals noch von Sun geführt) die Programmiersprache Java 1995 mit Version 1.0 vorstellte, hat sich die Versionsspirale bis Version 8 (was gleichbedeutend mit Versionsnummer 1.8 ist) gedreht. Besonders für Java-Buch-Autoren stellt sich die Frage, auf welcher Java-Version ihr Text aufbauen muss und welche Bibliotheken es beschreiben soll. Ich beschreibe immer die Möglichkeiten der neuesten Version, was zur Drucklegung die Java SE 8 war. Für die Didaktik der objektorientierten Programmierung ist die Versionsfrage glücklicherweise unerheblich.

Da viele Unternehmen noch mit älteren Versionen entwickeln, wirft die breite Nutzung von Features der Java-Version 8 unter Umständen Probleme auf, denn nicht jedes Beispielprogramm aus der Insel lässt sich per Copy & Paste fehlerfrei in das eigene Projekt übertragen. Da Java 8 fundamentale neue Möglichkeiten in der Programmiersprache bietet, kann ein älterer Java-Compiler natürlich nicht alles übersetzen. Um das Problem zu entschärfen und um nicht viele Beispiele im Buch ungültig zu machen, werden die Bibliotheksänderungen und Sprachneuerungen von Java 8 zwar ausführlich in den einzelnen Kapiteln beschrieben, aber die Beispielprogramme in anderen Kapiteln bleiben auf dem Sprachniveau von Java 7. So laufen mehrheitlich alle Programme unter den verbreiteten Versionen Java 7. Auch wenn die aktuellen Sprachänderungen zu einer Programmverkürzung führen, ist es unrealistisch, anzunehmen, dass jedes Unternehmen sofort auf Java 8 wechselt. Es ist daher nur naheliegend, das Buch für eine breite Entwicklergemeinde auszulegen, anstatt für ein paar wenige, die sofort mit der neuesten Version arbeiten können. Erst in der nächsten Auflage, die synchron mit Java 9 folgt, werden alle Beispiele überarbeitet und wenn möglich an die neuen Sprachmittel von Java 8 angepasst.

Das Buch in der Lehre einsetzen

»Die Insel« eignet sich ideal zum Selbststudium. Das erste Kapitel dient dem Warmwerden und plaudert ein wenig über dieses und jenes. Wer auf dem Rechner noch keine Entwicklungsumgebung installiert hat, der sollte zuerst das JDK von Oracle installieren. Weil das JDK nur Kommandozeilentools installiert, sollte jeder Entwickler eine grafische IDE (Integrated Development Environment) installieren, da eine IDE die Entwicklung von Java-Programmen deutlich komfortabler macht. Eine IDE bietet gegenüber der rohen Kommandozeile einige Vorteile:

  • Das Editieren, Compilieren und Laufenlassen eines Java-Programms ist schnell und einfach über einen Tastendruck oder Mausklick möglich.

  • Ein Editor sollte die Syntax von Java farbig hervorheben (Syntax-Highlighting).

  • Eine kontextsensitive Hilfe zeigt bei Methoden die Parameter an, und gleichzeitig verweist sie auf die API-Dokumentation.

  • Weitere Vorteile wie GUI-Builder, Projektmanagement und Debuggen kommen dazu, spielen im Buch aber keine Rolle.

In der Softwareentwicklung ist die Dokumentation der API-Schnittstellen unerlässlich. Sie ist von der Entwicklungsumgebung in der Regel über einen Tastendruck einsehbar oder online zu finden. Unter welcher URL sie verfügbar ist, erklärt ebenfalls Kapitel 1.

Richtig los geht es mit Kapitel 2, und von da an geht es didaktisch Schritt für Schritt weiter. Wer Kenntnisse in C hat, kann Kapitel 2 überblättern. Wer schon in C++/C# objektorientiert programmiert hat, kann Kapitel 3 überfliegen und dann einsteigen. Objektorientierter Mittelpunkt des Buchs sind Kapitel 5 und Kapitel 6: Sie vermitteln die OO-Begriffe Klasse, Methode, Assoziation, Vererbung, dynamisches Binden. Nach Kapitel 6 ist die objektorientierte Grundausbildung abgeschlossen, und nach Kapitel 11 sind die Grundlagen von Java bekannt. Es folgen Überblicke in einzelne Bereiche der Java-Standardbibliothek, die der zweite Band vertieft.

Mit diesem Buch und einer Entwicklungsumgebung des Vertrauens lassen sich die ersten Programme entwickeln. Um eine neue Programmiersprache zu erlernen, reicht das Lesen aber nicht aus. Mit den Übungsaufgaben kann jeder Leser deshalb die eigene Fingerfertigkeit trainieren. Da viele Lösungen unter www.rheinwerk-verlag.de/4112 verfügbar sind, lassen sich die eigenen Ergebnisse gut mit den Musterlösungen vergleichen. Vielleicht bietet die Buchlösung noch eine interessante Lösungsidee oder Alternative an.

Persönliche Lernstrategien

Wer das Buch im Selbststudium nutzt, wird wissen wollen, was eine erfolgreiche Lernstrategie ist. Der Schlüssel zur Erkenntnis ist, wie so oft, die Lernpsychologie, die untersucht, unter welchen Lesebedingungen ein Text optimal verstanden werden kann. Die Methode, die ich vorstellen möchte, heißt PQ4R-Methode, benannt nach den Anfangsbuchstaben der Schritte, die die Methode vorgibt:

  • Vorschau (Preview): Zunächst sollten Sie sich einen ersten Überblick über das Kapitel verschaffen, etwa durch Blättern im Inhaltsverzeichnis und in den Seiten der einzelnen Kapitel. Schauen Sie sich die Abbildungen und Tabellen etwas länger an, da sie schon den Inhalt verraten und Lust auf den Text vermitteln.

  • Fragen (Question): Jedes Kapitel versucht, einen thematischen Block zu vermitteln. Vor dem Lesen sollten Sie sich überlegen, welche Fragen das Kapitel beantworten soll.

  • Lesen (Read): Jetzt geht’s los, der Text wird durchgelesen. Wenn es nicht gerade ein geliehenes Büchereibuch ist, sollten Sie Passagen, die Ihnen wichtig erscheinen, mit vielen Farben hervorheben und mit Randbemerkungen versehen. Das Gleiche gilt für neue Begriffe. Die zuvor gestellten Fragen sollte jeder beantworten können. Sollten neue Fragen auftauchen – im Gedächtnis abspeichern!

  • Nachdenken (Reflect): Egal, ob motiviert oder nicht – das ist ein interessantes Ergebnis einer anderen Studie –, lernen kann jeder immer. Der Erfolg hängt nur davon ab, wie tief das Wissen verarbeitet wird (elaborierte Verarbeitung). Dazu müssen die Themen mit anderen Themen verknüpft werden. Überlegen Sie, wie die Aussagen mit den anderen Teilen zusammenpassen. Dies ist auch ein guter Zeitpunkt für praktische Übungen. Für die angegebenen Beispiele im Buch sollten Sie sich eigene Beispiele überlegen. Wenn der Autor eine if-Abfrage am Beispiel des Alters beschreibt, wäre eine eigene Idee etwa eine if-Abfrage zur Hüpfballgröße.

  • Wiedergeben (Recite): Die zuvor gestellten Fragen sollten sich nun beantworten lassen, und zwar ohne den Text. Für mich ist das Schreiben eine gute Möglichkeit, über mein Wissen zu reflektieren, doch sollte dies jeder auf seine Weise tun. Allemal ist es lustig, sich während des Duschens über alle Schlüsselwörter und ihre Bedeutung, den Zusammenhang zwischen abstrakten Klassen und Schnittstellen usw. klar zu werden. Ein Tipp: Lautes Erklären hilft bei vielen Arten der Problemlösung – quatschen Sie einfach mal den Toaster zu. Noch schöner ist es, mit jemandem zusammen zu lernen und sich gegenseitig die Verfahren zu erklären. Eine interessante Visualisierungstechnik ist die Mind-Map. Sie dient dazu, den Inhalt zu gliedern.

  • Rückblick (Review): Nun gehen Sie das Kapitel noch einmal durch und schauen, ob Sie alles ohne weitere Fragen verstanden haben. Manche »schnellen« Erklärungen haben sich vielleicht als falsch herausgestellt. Vielleicht klärt der Text auch nicht alles. Dann ist ein an mich gerichteter Hinweis (ullenboom@gmail.com) angebracht.

Die PQ4R-Methode erleichtert den Wissenserwerb. Allerdings ist es so wie mit allen gelernten Dingen: Wer Wissen nicht regelmäßig auffrischt, vergisst es. Der PQ4R-Methode sollte daher für einen langfristigen Erfolg ein zusätzliches »R« verpasst werden: »R« für »repeat« oder »refresh«. In der Regel überliest man etwas am Anfang oder schenkt Details kaum Bedeutung. Erst später, wenn mehr Hintergrundwissen vorhanden ist, kann auch Grundlegendes im neuen Licht erscheinen und sich gut zum Gesamtbild fügen. Leser sollten sich daher immer wieder die Insel vornehmen und querblättern.

Persönliche Bemerkung

Schreiben ist eine Lernstrategie für mich. Wenn ich mich in neue Gebiete einarbeite, lese ich erst einmal auf Masse und beginne dann, Zusammenfassungen zu schreiben. Erst beim Schreiben wird mir richtig bewusst, was ich noch nicht weiß. Dieses Lernprinzip hat auch zu meinem ersten Buch über Amiga-Maschinensprachprogrammierung geführt. Doch das MC680x0-Buch kam nicht auf den Markt, denn die Verlage teilten mir mit, dass die Zeit der Homecomputer vorbei sei.[ 2 ](Damit verlor ich eine Wette gegen Georg und Thomas – sie durften bei einer großen Imbisskette so viel essen, wie sie wollten. Ich hatte später meinen Spaß, als wir mit dem Auto nach Hause fuhren und dreimal zur Magenleerung anhalten mussten. Jetzt ist das Buch online unter http://retrobude.de/dokumente/amiga-assembler-buch/. ) Mit Java war das anders, denn hier war ich zur richtigen Zeit am richtigen Ort.

Fokus auf das Wesentliche

Einige Abschnitte sind für erfahrene Programmierer oder Informatiker geschrieben. Besonders der Neuling wird an einigen Stellen den sequenziellen Pfad verlassen müssen, da spezielle Kapitel mehr Hintergrundinformationen und Vertrautheit mit Programmiersprachen erfordern. Verweise auf C(++), C# oder andere Programmiersprachen dienen aber nicht wesentlich dem Verständnis, sondern nur dem Vergleich.

*-Abschnitte

Einsteiger in Java können noch nicht zwischen dem absolut notwendigen Wissen und einer interessanten Randnotiz unterscheiden. Die Insel gewichtet aus diesem Grund das Wissen auf zwei Arten. Zunächst gibt es vom Text abgesetzte Boxen, die zum Teil spezielle und fortgeschrittene Informationen bereitstellen. Des Weiteren enden einige Überschriften auf ein *, was bedeutet, dass dieser Abschnitt übersprungen werden kann, ohne dass dem Leser etwas Wesentliches für die späteren Kapitel fehlt.

Organisation der Kapitel

Kapitel 1, »Java ist auch eine Sprache«, zeigt die Besonderheiten der Sprache Java auf. Einige Vergleiche mit anderen populären objektorientierten Sprachen werden gezogen. Die Absätze sind nicht besonders technisch und beschreiben auch den historischen Ablauf der Entwicklung von Java. Das Kapitel ist nicht didaktisch aufgebaut, sodass einige Begriffe erst in den weiteren Kapiteln vertieft werden; Einsteiger sollten es querlesen. Ebenso wird hier dargestellt, wie das Java JDK von Oracle zu beziehen und zu installieren ist, damit die ersten Programme übersetzt und gestartet werden können.

Richtig los geht es in Kapitel 2, »Imperative Sprachkonzepte«. Es hebt Variablen, Typen und die imperativen Sprachelemente hervor und schafft mit Anweisungen und Ausdrücken die Grundlagen für jedes Programm. Hier finden auch Fallanweisungen, die diversen Schleifentypen und Methoden ihren Platz. Das alles geht noch ohne große Objektorientierung.

Objektorientiert wird es dann in Kapitel 3, »Klassen und Objekte«. Dabei kümmern wir uns erst einmal um die in der Standardbibliothek vorhandenen Klassen und entwickeln eigene Klassen später, denn im Mittelpunkt stehen die grundlegenden Konzepte, wie das Schlüsselwort new, Referenzen, null-Referenz, Referenzvergleiche. Die Bibliothek ist so reichhaltig, dass allein mit den vordefinierten Klassen und diesem Basiswissen schon viele Programme entwickelt werden können. Speziell die bereitgestellten Datenstrukturen lassen sich vielfältig einsetzen.

Wichtig ist für viele Probleme auch der in Kapitel 4 vorgestellte »Umgang mit Zeichenketten«. Die beiden notwendigen Klassen Character für einzelne Zeichen und String, StringBuffer/StringBuilder für Zeichenfolgen werden eingeführt, und auch ein kleiner Abschnitt über reguläre Ausdrücke fehlt nicht. Bei den Zeichenketten müssen Teile ausgeschnitten, erkannt und konvertiert werden. Ein split(…) vom String und der Scanner zerlegen Zeichenfolgen anhand von Trennern in Teilzeichenketten. Format-Objekte bringen beliebige Ausgaben in ein gewünschtes Format. Dazu gehört auch die Ausgabe von Dezimalzahlen.

Mit diesem Vorwissen über Objekterzeugung und Referenzen kann der nächste Schritt erfolgen: In Kapitel 5 werden wir »Eigene Klassen schreiben«. Anhand von Spielen und Räumen modellieren wir Objekteigenschaften. Wichtige Konzepte – wie Konstruktoren, statische Eigenschaften, Aufzählungen – finden dort ihren Platz.

Objektbeziehungen, also Assoziationen zwischen Objekten, auch genannt Benutzt-Beziehungen sowie Vererbungsbeziehungen, zeigt Kapitel 6, »Objektorientierte Beziehungsfragen«, auf. Das Kapitel führt in die »echte« objektorientierte Programmierung ein und erhellt dynamisches Binden, abstrakte Klassen und Schnittstellen (Interfaces) sowie Sichtbarkeit. Da Klassen in Java auch innerhalb anderer Klassen liegen können (innere Klassen), setzt sich ein eigenes Unterkapitel damit auseinander.

Exceptions, die wir in Kapitel 7, »Ausnahmen müssen sein«, behandeln, bilden ein wichtiges Rückgrat in Programmen, da sich Fehler kaum vermeiden lassen. Da ist es besser, die Behandlung aktiv zu unterstützen und den Programmierer zu zwingen, sich um Fehler zu kümmern und diese zu behandeln.

Kapitel 8, »Äußere.innere Klassen«, beschreibt, wie sich Klassen ineinander verschachteln lassen. Das verbessert die Kapselung, denn auch Implementierungen können dann sehr lokal sein.

Kapitel 9, »Besondere Typen der Java SE«, geht auf die Klassen ein, die für die Java-Bibliothek zentral sind, etwa Vergleichsklassen, Wrapper-Klassen oder die Klasse Object, die die Oberklasse aller Java-Klassen ist.

Mit Generics lassen sich Klassen, Schnittstellen und Methoden mit einer Art Typ-Platzhalter deklarieren, wobei der konkrete Typ erst später festgelegt wird. Kapitel 10, »Generics<T>«, gibt einen Einblick in die Technik.

Lambda-Ausdrücke gibt es seit Java 8; sie vereinfachen insbesondere das funktionale Programmieren. Wir widmen den Spracheigenschaften das Kapitel 11, »Lambda-Ausdrücke und funktionale Programmierung«, genau wie vielen Standardtypen, die bei funktionaler Programmierung auftauchen.

Danach sind die Fundamente gelegt, und die verbleibenden Kapitel dienen dazu, das bereits erworbene Wissen auszubauen. Kapitel 12, »Architektur, Design und angewandte Objektorientierung«, zeigt Anwendungen guter objektorientierter Programmierung und stellt Entwurfsmuster (Design-Patterns) vor. An unterschiedlichen Beispielen demonstriert das Kapitel, wie Schnittstellen und Klassenhierarchien gewinnbringend in Java eingesetzt werden. Es ist der Schlüssel dazu, nicht nur im Kleinen zu denken, sondern auch große Applikationen zu schreiben.

Kapitel 13, »Komponenten, JavaBeans und Module«, beantwortet die Frage, wie in Java einzelne Komponenten oder Systeme von Komponenten flexibel für andere Anwendungen eingesetzt werden können. In Java 9 wird ein Modulsystem kommen, und dann wird das Kapitel weiter ausgebaut.

Nach den ersten 13 Kapiteln haben die Leser die Sprache Java nahezu komplett kennengelernt. Da Java aber nicht nur eine Sprache ist, sondern auch ein Satz von Standardbibliotheken, konzentriert sich die zweite Hälfte des Buchs auf die grundlegenden APIs. Jeweils am Ende eines Kapitels findet sich ein Abschnitt »Zum Weiterlesen« mit Verweisen auf interessante Internetadressen – in der Java-Sprache finally genannt. Hier kann der Leser den sequenziellen Pfad verlassen und sich einzelnen Themen widmen, da die Themen in der Regel nicht direkt voneinander abhängen.

Die Java-Bibliothek besteht aus mehr als 4.200 Klassen, Schnittstellen, Aufzählungen, Ausnahmen und Annotationen. Kapitel 14, »Java SE-Paketübersicht«, (und auch der Anhang A) gibt eine Übersicht über die wichtigsten Pakete und greift einige Klassen aus der Bibliothek heraus, etwa zum Laden von Klassen. Hier sind auch Klassen zur Konfiguration von Anwendungen oder Möglichkeiten zum Ausführen externer Programme zu finden.

Die Kapitel 15 bis 19 geben einen Überblick über spezielle APIs. Die Bibliotheken sind sehr umfangreich, und das aufbauende Expertenbuch »Java SE 8 Standard-Bibliothek. Das Handbuch für Java-Entwickler« vertieft die APIs weiter. Kapitel 15 gibt eine »Einführung in die nebenläufige Programmierung«. Kapitel 16, »Einführung in Datenstrukturen und Algorithmen«, zeigt praxisnah geläufige Datenstrukturen wie Listen, Mengen und Assoziativspeicher. Einen Kessel Buntes bietet Kapitel 17, »Einführung in grafische Oberflächen«, wo es um die Swing-Bibliothek geht. Im Kern steht eine bildgeführte Anleitung, wie sich mit einer Entwicklungsumgebung einfach grafische Oberflächen entwickeln lassen. Darüber, wie aus Dateien gelesen und geschrieben wird, gibt Kapitel 18, »Einführung in Dateien und Datenströme«, einen Überblick. Wer zum Abspeichern von Daten eine relationale Datenbank nutzen möchte, der findet in Kapitel 19, »Einführung ins Datenbankmanagement mit JDBC«, Hilfestellungen. Alle genannten Kapitel geben aufgrund der Fülle nur einen Einblick, und ihre Themen werden im zweiten Band noch tiefer aufgefächert. Ein neues Thema spannt Kapitel 20 mit einer »Einführung in <XML>« auf. Java als plattformunabhängige Programmiersprache und XML als dokumentenunabhängige Beschreibungssprache sind ein ideales Paar, und die Kombination dieser beiden Technologien ist der Renner der letzten Jahre. Das Kapitel beginnt auf der höchsten Abstraktionsebene, beschreibt, wie XML-Daten auf Objekte übertragen werden, und geht dann weiter zur elementaren Verarbeitung der XML-Dokumente, wie sie zum Beispiel als Objektbaum aufgebaut und modifiziert werden.

Ein automatischer Test von Anwendungen hilft, Fehler in Code aufzuspüren, insbesondere wenn später dumme Codeänderungen gemacht wurden und sich das Programm nicht mehr konform mit der Spezifikation verhält. Kapitel 21, »Testen mit JUnit«, stellt die Idee der Testfälle vor und wie diese einfach und automatisch ausführbar werden. Zudem setzt das Kapitel den Schwerpunkt auf das Design von testbaren Anwendungen.

Kapitel 22 stellt »Bits und Bytes und Mathematisches« vor. Die Klasse Math hält typische mathematische Methoden bereit, um etwa trigonometrische Berechnungen durchzuführen. Mit einer weiteren Klasse können Zufallszahlen erzeugt werden. Auch behandelt das Kapitel den Umgang mit beliebig langen Ganz- oder Fließkommazahlen.

Abschließend liefert Kapitel 23, »Die Werkzeuge des JDK«, eine Kurzübersicht der Kommandozeilenwerkzeuge javac zum Übersetzen von Java-Programmen und java zum Starten der JVM und Ausführen der Java-Programme.

Der Anhang A, »Java SE-Paketübersicht«, erklärt alle Java-Pakete kurz mit einem Satz und zudem alle Typen im absolut essenziellen Paket java.lang.

Konventionen

In diesem Buch werden folgende Konventionen verwendet:

  • Neu eingeführte Begriffe sind kursiv gesetzt, und der Index verweist genau auf diese Stelle. Des Weiteren sind Dateinamen, HTTP-Adressen, Namen ausführbarer Programme, Programmoptionen und Dateiendungen (.txt) kursiv. Einige Links führen nicht direkt zur Ressource, sondern werden über http://tutego.de/go zur tatsächlichen Quelle umgeleitet, was nachträgliche URL-Änderungen erleichtert.

  • Begriffe der Benutzeroberfläche stehen in Kapitälchen.

  • Listings, Methoden und sonstige Programmelemente sind in nichtproportionaler Schrift gesetzt. An einigen Stellen wurde hinter eine Listingzeile ein abgeknickter Pfeil (inline) als Sonderzeichen gesetzt, das den Zeilenumbruch markiert. Der Code aus der nächsten Zeile gehört also noch zur vorigen.

  • Bei Methodennamen und Konstruktoren folgt immer ein Klammerpaar, um Methoden/Konstruktoren von Attributen abgrenzen zu können. So ist bei der Schreibweise System.out und System.gc() klar, dass Ersteres ein Attribut ist und Letzteres eine Methode.

  • Hat eine Methode/ein Konstruktor einen Parameter, so steht der Typ in Klammern. Beispiele: Math.abs(double a), Point(int x, int y). Oft wird auch der Parametername ausgelassen. Beispiel: »System.exit(int) beendet das Programm mit einem Rückgabewert.« Die Java-API-Dokumentation macht das genauso. Hat eine Methode/ein Konstruktor eine Parameterliste, ist diese aber im Text gerade nicht relevant, wird sie mit »« abgekürzt. Beispiel: »Die Methode System.out.print(…) konvertiert die übergebenen Argumente in Strin gs und gibt sie aus.« Ein leeres Klammerpaar bedeutet demnach, dass eine Methode/ein Konstruktor wirklich keine Parameterliste hat. Um die Angabe kurz und dennoch präzise zu machen, gibt es im Text teilweise Angaben wie getProperty(String key[, String def]), was eine Abkürzung für getProperty(String key) und getProperty(String key, String def) ist.

  • Um eine Gruppe von Methoden anzugeben, symbolisiert die Kennung XXX einen Platzhalter. So steht zum Beispiel printXXX(…) für die Methoden println(…), print(…) und printf(…). Aus dem Kontext geht hervor, welche Methoden gemeint sind.

  • Lange Paketnamen werden teilweise abgekürzt, sodass com.tutego.insel.game etwa zu c.t.i.g wird.

  • Um im Programmcode Compilerfehler oder Laufzeitfehler anzuzeigen, steht in der Zeile ein inline. So ist auf den ersten Blick abzulesen, dass die Zeile nicht compiliert wird oder zur Laufzeit aufgrund eines Programmierfehlers eine Ausnahme auslöst. Beispiel:

    int p = new java.awt.Point(); // inline Compilerfehler: Type mismatch
  • Bei Compilerfehlern – wie im vorangehenden Punkt – kommen die Fehlermeldungen in der Regel von Eclipse. Sie sind dort anders benannt als in NetBeans bzw. dem Kommandozeilencompiler javac. Aber natürlich führen beide Compiler zu ähnlichen Fehlermeldungen.

  • Raider heißt jetzt Twix, und Sun ging Anfang 2010 an Oracle. Auch wenn es für langjährige Entwickler hart ist: Der Name »Sun« verschwindet, und der geliebte Datenbankhersteller tritt an seine Stelle. Sun taucht immer nur dann auf, wenn es um eine Technologie geht, die von Sun initiiert wurde und in der Zeit auf den Markt kam, in der Sun sie verantwortete.

Programmlistings

Komplette Programmlistings sind wie folgt aufgebaut:

Listing 1Listing Person.java

class Person {

}

Der abgebildete Quellcode befindet sich in der Datei Person.java. Befindet sich der Typ (Klasse, Aufzählung, Schnittstelle, Annotation) in einem Paket, steht die Pfadangabe beim Dateinamen:

Listing 2Listing com/tutego/insel/Person.java

package com.tutego.insel.Person;

class Person { }

Um Platz zu sparen, stellt das Buch oftmals Quellcode-Ausschnitte dar. Der komplette Quellcode ist im Internet verfügbar (http://www.rheinwerk-verlag.de/4112). Hinter dem Typ folgen in dem Fall Kennungen des abgedruckten Teils. Ist nur die Typdeklaration einer Datei ohne package- oder import-Deklaration aufgelistet, so steht hinter dem Dateinamen der Typ, etwa so:

Listing 3Listing Person.java, Person

Listing 4Listing Person.java, House

Im folgenden Fall wird nur die main(…)-Methode abgebildet:

Listing 5Listing Person.java, main()

Wird ein Ausschnitt einer Datei Person.java abgebildet, steht »Ausschnitt« oder »Teil 1«, »Teil 2« ... dabei:

Listing 6Listing Person.java, Ausschnitt

Listing 7Listing Person.java, main(), Teil 1

Gibt es Beispielprogramme für bestimmte Klassen, so enden die Klassennamen dieser Programme im Allgemeinen auf -Demo. Für die Java-Klasse DateFormat heißt somit ein Beispielprogramm, das die Funktionalität der Klasse DateFormat vorführt, DateFormatDemo.

API-Dokumentation im Buch

Attribute, Konstruktoren und Methoden finden sich in einer speziellen Auflistung, die es ermöglicht, sie leicht im Buch zu finden und die Insel als Referenzwerk zu nutzen.

abstract class java.text.DateFormat

extends Format

implements Cloneable, Serializable
  • Date parse(String source) throws ParseException

    Parst einen Datum- oder einen Zeit-String.

Im Rechteck steht der vollqualifizierte Klassen- oder Schnittstellenname (etwa die Klasse DateFormat im Paket java.text) bzw. der Name vom Annotations- oder Aufzählungstyp. In den nachfolgenden Zeilen sind die Oberklasse (DateFormat erbt von Format) und die implementierten Schnittstellen (DateFormat implementiert Cloneable und Serializable) aufgeführt. Da jede Klasse, die keine explizite Oberklasse hat, automatisch von Object erbt, ist diese nicht extra angegeben. Die Sichtbarkeit ist, wenn nicht anders angegeben, public, da dies für Bibliotheksmethoden üblich ist. Wird eine Schnittstelle beschrieben, sind die Methoden automatisch abstrakt und öffentlich, und die Schlüsselwörter abstract und public werden nicht zusätzlich angegeben. In der anschließenden Aufzählung folgen Konstruktoren, Methoden und Attribute. Wenn nicht anders angegeben, ist die Sichtbarkeit public. Sind mit throws Fehler angegeben, dann handelt es sich nicht um RuntimeExceptions, sondern nur um geprüfte Ausnahmen. Veraltete (deprecated) Methoden sind nicht aufgeführt, lediglich, wenn es überhaupt keine Alternative gibt.

Ausführbare Programme

Ausführbare Programme auf der Kommandozeile sind durch ein allgemeines Dollarzeichen am Anfang zu erkennen (auch wenn andere Betriebssysteme und Kommandozeilen ein anderes Prompt anzeigen). Die vom Anwender einzugebenden Zeichen sind fett gesetzt, die Ausgabe nicht:

$ java FirstLuck

Hart arbeiten hat noch nie jemanden getötet. Aber warum das Risiko auf sich nehmen?
Über die richtige Programmierer-»Sprache«

Die Programmierersprache in diesem Buch ist Englisch, um ein Vorbild für »echte« Programme zu sein. Bezeichner wie Klassennamen, Methodennamen und auch eigene API-Dokumentationen sind auf Englisch, um eine Homogenität mit der englischsprachigen Java-Bibliothek zu schaffen. Zeichenketten und Konsolenausgaben sowie die Zeichenketten in Ausnahmen (Exceptions) sind in der Regel auf Deutsch, da es in realistischen Programmen kaum hart einkodierte Meldungen gibt – spezielle Dateien halten unterschiedliche Landessprachen vor. Zeilenkommentare sind als interne Dokumentation ebenfalls auf Deutsch vorhanden.

Online-Informationen und Aufgaben

Ausführliche Informationen zu diesem Buch liefert das Internet unter den Adressen http://tutego.de/javabuch und http://www.rheinwerk-verlag.de/4112. Die Webseiten informieren umfassend über das Buch und über die kommenden Versionen, etwa Erscheinungsdatum oder Bestellnummer. Der Quellcode der Beispielprogramme ist entweder komplett oder mit den bedeutenden Ausschnitten im Buch abgebildet. Ein ZIP-Archiv mit allen Beispielen ist auf der Buch-Webseite erhältlich. Alle Programmteile sind frei von Rechten und können ungefragt in eigene Programme übernommen und modifiziert werden.

Wer eine Programmiersprache erlernen möchte, muss sie wie eine Fremdsprache sprechen. Begleitend gibt es eine Aufgabensammlung unter http://tutego.de/javabuch/aufgaben. Viele Musterlösungen sind dabei. Die Seite wird in regelmäßigen Abständen mit neuen Aufgaben und Lösungen aktualisiert.

Passend zur Online-Version verschließt sich das Buch nicht den Kollaborationsmöglichkeiten des Webs 2.0. Neue Kapitel und Abschnitte des Buchs werden immer im Java-Insel-Blog http://tutego.de/blog/javainsel veröffentlicht. So kann jeder Leser – mehrere Monate bevor die Texte überhaupt zum Lektorat und schlussendlich ins Buch wandern – seine Meinung äußern und Kritik üben. Es gibt weltweit nur wenige Autoren, die so konsequent alle Texte ihres Buches vorveröffentlichen und bereit sind, sie in aller Öffentlichkeit zu diskutieren. Der Vorteil für die Leser zahlt sich aus: In den über zehn Insel-Jahren liegt die Anzahl fachlicher Fehler bei fast null.

Der Blog zum Buch und mit tagesaktuellen Java-News

Abbildung 1Der Blog zum Buch und mit tagesaktuellen Java-News

Neben den reinen Buchaktualisierungen publiziert der Blog auch tagesaktuelle Nachrichten über die Java-Welt und Java-Tools. Google zählt den Insel-Blog weltweit zu den Top-Java-Blogs und platziert ihn seit Jahren auf Platz 1.

Facebook-Nutzer können ein Fan der Insel werden (http://www.facebook.com/pages/Javainsel/157203814292515), und Twitter-Nutzer können den Nachrichtenstrom unter http://twitter.com/javabuch abonnieren.

Weiterbildung durch tutego

Unternehmen, die zur effektiven Weiterbildung ihrer Mitarbeiter IT-Schulungen wünschen, können einen Blick auf http://tutego.de/seminare werfen. tutego bietet über hundert IT-Seminare zu Java-Themen, C(++), C#/.NET, Softwaredesign, Datenbanken (Oracle, MySQL), XML (XSLT, Schema), Netzwerken, Internet, Office etc. Zu den Java-Themen zählen unter anderem:

  • Java-Einführung, Java für Fortgeschrittene, Java für Umsteiger, Eclipse

  • nebenläufiges Programmieren mit Threads

  • JavaServer Faces (JSF), JavaServer Pages (JSP), Servlets und weitere Web-Technologien

  • Java EE, EJB, OR-Mapping mit JPA, Hibernate

  • grafische Oberflächen mit Swing und JFC, JavaFX, Eclipse RPC, SWT

  • Java und XML, JAXB

  • Android

  • Build-Management mit Maven, Hudson/Jenkins, Ant

  • .NET, C#, iOS-Programmierung, HTML5/CSS3-Frameworks

Danksagungen

Ich war vielleicht 14, als mir meine Eltern mit dem C64 den Weg in die Welt der Computer öffneten. Ein Medium zum Speichern der Programme und Daten fehlte mir, und so blieb mir nichts anderes übrig, als nach dem Neustart alles wieder neu einzugeben – auf diesem Weg lernte ich das Programmieren. An meine Eltern einen großen Dank für den Computer, für die Liebe und das Vertrauen.

Dank gebührt Sun Microsystems, die 1991 mit der Entwicklung an Java begannen. Ohne Sun gäbe es kein Java, und ohne Java gäbe es auch nicht dieses Buch. Dank gehört auch der Oracle Company als Käufer von Sun, denn vielleicht wäre ohne die Übernahme Java bald am Ende gewesen.

Die professionellen, aufheiternden Comics stammen von Andreas Schultze (akws@aol.com). Ich danke auch den vielen Buch- und Artikelautoren für ihre interessanten Werke, aus denen ich mein Wissen über Java schöpfen konnte. Ein weiteres Dankeschön geht an verschiedene treue Leser, deren Namen aufzulisten viel Platz kosten würde; ihnen ist die Webseite http://tutego.de/javabuch/korrekteure.html gewidmet.

Java lebt – vielleicht sollte ich sogar »überlebt« sagen … – durch viele freie gute Tools und eine aktive Open-Source-Community. Ein Dank geht an alle Entwickler, die großartige Java-Tools wie Eclipse, NetBeans, Ant, Maven, GlassFish, Tomcat, JBoss und Hunderte andere Bibliotheken schreiben und warten: Ohne sie wäre Java heute nicht da, wo es ist.

Abschließend möchte ich dem Rheinwerk Verlag meinen Dank für die Realisierung und die unproblematische Zusammenarbeit aussprechen. Für die Zusammenarbeit mit meiner Lektorin Judith bin ich sehr dankbar.

Feedback

Auch wenn wir die Kapitel noch so sorgfältig durchgegangen sind, sind bei 1.300 Seiten Unstimmigkeiten wahrscheinlich, so wie auch jede Software rein statistisch Fehler aufweist. Wer Anmerkungen, Hinweise, Korrekturen oder Fragen zu bestimmten Punkten oder zur allgemeinen Didaktik hat, der sollte sich nicht scheuen, mir eine E-Mail unter der Adresse ullenboom@gmail.com zu senden. Ich bin für Anregung, Lob und Tadel stets empfänglich.

In der E-Book-Version können wir Fehler schnell korrigieren, denn es gibt zum Teil bedauerliche Konvertierungsprobleme vom Buch ins HTML-Format, und einige Male blieb das Hochzeichen (^) auf der Strecke, sodass statt »2^16« im Text ein »216« die Leser verwunderte.

Und jetzt wünsche ich Ihnen viel Spaß beim Lesen und Lernen von Java!

Dortmund im Jahr 2016, Jahr 6 nach Oracles Übernahme[ 3 ](Das war am 17. Januar 2010 zum Preis von 7,4 Milliarden USD. )

Christian Ullenboom

 

Zum Seitenanfang

Vorwort zur 12. Auflage Zur vorigen ÜberschriftZur nächsten Überschrift

In dieser kleinen Neuauflage sind viele kleine Rechtschreibfehler korrigiert worden. Ein ziemlich harter Fehler ist korrigiert worden, denn die Begriffe »kovariant« und »invariant« waren an einer Stelle vertauscht; korrekt muss es heißen: »Arrays sind kovariant und Generics sind nicht kovariant, sondern invariant.« Bei den Begrifflichkeiten ist »Typumwandlung« zu »Typanpassung« geworden, das entspricht besser dem englischen Original. Und import ist keine Anweisung, sondern eine Deklaration. Meine Lektorin hat vorgeschlagen, »Radix« als weibliches Wort zu verwenden, also heißt es fortan »die Radix« statt »der Radix«. Kapitel 12 wurde aufgespalten, sodass die kommende Modularisierung in Java 9 gleich einen Platz findet in dem aktuellen Kapitel 13, zusammen mit Klassenladern und JAR-Dateien.

 

Zum Seitenanfang

Vorwort zur 11. Auflage Zur vorigen ÜberschriftZur nächsten Überschrift

Die Sprachänderungen von Java 8 sind so fundamental, wie wir sie schon lange nicht gesehen haben – am ehesten sind sie mit Java 5 und dem Einzug von Generics und Annotationen vergleichbar. Hinzugekommene Abschnitte ergeben sich aus den neuen Eigenschaften von Java 8; zu den Besonderheiten zählen Lambda-Ausdrücke und eine damit einhergehende Rundumerneuerung der Java Collections API.

Die Beispiele, die nicht direkt Java 8 betreffen, sind auf die Syntax von Java 7 gebracht. Das betrifft in erster Linie den Diamond-Operator für eine kürzere Generics-Schreibweise und try mit Ressourcen. Ebenfalls nutzen die Beispielprogramme Klassen der Java-Bibliothek Version 7, dass etwa Bezüge zur Klasse File auf Path umgeschrieben wurden.

Auch mit den neuen Änderungen bleibt die Dicke des Buchs in etwa gleich, dafür mussten einige Abschnitte, wie Details zur String-Verarbeitung, in das fortgeschrittene Java-Buch wandern. Das recht umfangreiche Kapitel über den Entwurf eigener Klassen wurde in zwei Kapitel aufgespalten. Die Insel bleibt ein dickes Buch mit viel Inhalt und kann im Notfall auch gegen Einbrecher eingesetzt werden und natürlich immer noch als Buchstütze herhalten.

Nach dem Vorwort ist es jetzt jedoch an Zeit, das Leben zwischen den geschweiften Klammern zu genießen und dem griechischen Philosophen Platon zu folgen, der sagte: »Der Beginn ist der wichtigste Teil der Arbeit.«

 


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück

 

 


Copyright © Rheinwerk Verlag GmbH 2017

Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de