Kapitel Vorwort
Mancher glaubt schon darum höflich zu sein, weil er sich
überhaupt noch der Worte und nicht der Fäuste bedient.
– Hebbel
Java ist auch eine Insel
Java wurde am 23. Mai 1995 auf der SunWorld in San Francisco als neue Programmiersprache vorgestellt. Sie gibt uns elegante Programmiermöglichkeiten; nichts Neues, aber so gut verpackt und verkauft, dass sie angenehm und flüssig zu programmieren ist. Dieses Tutorial beschäftigt sich in 27 Kapiteln mit Java, den Klassen, der Design-Philosophie und der Programmierung.
Motivation für das Buch – oder warum es noch ein Java-Buch gibt ...
Die Beschäftigung mit Java hängt eng mit einer universitären Pflichtveranstaltung zusammen – meiner Projektgruppe zur objektorientierten Dialogspezifikation um das Jahr 1997. Da ich die Teilnehmer davon überzeugen wollte, Java als Programmiersprache einzusetzen (und nicht Objective-C), arbeitete ich meinen ersten Foliensatz für den Seminarvortrag aus. Dieser wurde auch die Basis für meine Schulungsunterlagen, die ich in mehr als fünfzig Kursen immer weiter verbessert habe. Als ich dann noch die Seminararbeit schreiben musste, wurde aus den geplanten Seminarseiten schon ein kleines Buch. Es kam sogar dazu, dass die so genannte Seminararbeit schon sehr viele Seiten fasste und nachher die jetzige Einleitung mehr oder weniger zur Seminararbeit verwurstet wurde; zumal das Tutorial zwischendurch immer dicker geworden ist.
Dass es mich über die universitäre Pflicht hinaus zum Schreiben treibt, ist nur eine Lernstrategie. Wenn ich mich in neue Gebiete einarbeite, dann lese ich erst einmal quantitativ auf Masse und beginne dann, Zusammenfassungen zu schreiben. Erst beim Schreiben wird mir richtig bewusst, was ich noch nicht weiß. Das Lernen durch Schreiben hat mir auch bei einem anderen Buch sehr geholfen, das leider nicht veröffentlicht wurde. Es ist ein Assembler-Buch für den MC680x0 im Amiga. Doch die Verlage konnten mir nur sagen, dass die Zeit des Amigas vorbei ist. Die Prognosen für Java stehen schon besser, denn der Einsatz von Java in der Wirtschaft fängt gerade erst richtig an. Und ein neues Buch über mein Lieblingsgebiet Performance-Optimierung ist schon in Vorbereitung.
Und für wen ist das Tutorial?
Anfangs war es nicht mein Ziel, ein Buch für eine bestimmte Zielgruppe zu schreiben. Es ist für mich entstanden, um Java gut kennen zu lernen. Nach fünf Jahren Arbeit mit Java und Java-Schulungen (http://java-tutor.com/seminare/) haben sich jedoch die Schwerpunkte gewandelt, und das Buch (welches ich immer »Insel« nenne) ist zu einem didaktisch aufbereiteten Lehrbuch geworden, das in seinem Schwierigkeitsgrad nach hinten hin immer komplexer wird. Die unterschiedlichen Kapitel sind für Anfänger der Programmiersprache Java wie auch für Fortgeschrittene konzipiert. Einige Unterkapitel sind für erfahrene Programmierer oder Informatiker. Besonders der Neuling wird an einigen Stellen den sequenziellen Pfad verlassen müssen, da spezielle Kapitel mehr Hintergrundinformationen und Vertrautheit mit Programmiersprachen erfordern. An Voraussetzungen sind Kenntnisse in einer strukturierten Programmiersprache wie C, Delphi, Visual Basic und ein Verständnis für objektorientierte Technologien hilfreich. An einigen Stellen gibt es Verweise auf C(++), diese sind aber nicht wesentlich zum Verständnis, sondern dienen nur zum Vergleich.
Was das Tutorial nicht ist
Die Java-Technologien und die objektorientierten Techniken sind in den letzten fünf Jahren explodiert. Was zu Anfang noch überschaubar war, ist einer starken Spezialisierung gewichen, so dass es kaum mehr möglich ist, alles in einem Buch zu behandeln. Das möchte die Insel auch auf keinen Fall. Ein Buch, das sich speziell mit der grafischen Oberfläche Swing beschäftigt, ist vom Umfang genauso dick wie die jetzige Insel. Nicht anders verhält es sich mit den anderen Spezialthemen wie Objektorientierte Analyse/Design, UML, Verteilte Programmierung, Datenbankanbindung, Webdienste, dynamische Webseiten und viele andere Themen. Die Bereiche werden in diesem Buch bis zu einer allgemein verständlichen Tiefe behandelt, und die Wissensneugier muss dann ein Spezialbuch befriedigen.
Ebenfalls darf das Buch auch nicht als Programmierbuch für Einsteiger verstanden werden. Wer noch nie programmiert hat und unter dem Wort Übersetzen in erster Linie einen Dolmetscher versteht, sollte besser ein anderes Buch vorziehen oder parallel lesen.
Welche Software wir nutzen
Als ich 1997 mit Java begann, kamen die ersten Java-Versionen vom Schöpfer Sun auf den Markt. Bis dahin hat sich die Versionsspirale von 1.0 bis aktuell 1.4 gedreht. Als Grundlage dient daher das Java 2 Software Development Kit (kurz SDK) als Referenzimplementierung. Diese lässt sich über http://www.javasoft.com/products/ beziehen. Das Paket besteht im Wesentlichen aus einem Compiler, Interpreter und einer Online-Hilfe im HTML- oder Win-Help-Format. Das SDK ist für die Plattformen Windows, Linux und Solaris erhältlich. Eine grafische Entwicklungsoberfläche (IDE) ist nicht Teil des Pakets. Ich verlasse mich auch nicht auf einen Hersteller, da der Markt zu dynamisch ist und die Hersteller verschiedene Entwicklergruppen ansprechen. Die Programme lassen sich mit einem einfachen ASCII-Texteditor eingeben und auf der Kommandozeile übersetzen. Diese Form der Entwicklung ist allerdings nicht mehr zeitgemäß, so dass ein grafischer Kommandozeilen-Aufsatz die Programmerstellung vereinfacht. Ich habe mit CodeGuide (http://www.omnicore.com/) gute Erfahrungen gemacht. Eine Auswahl einiger Entwicklungswerkzeuge findet der Leser im ersten Kapitel. Für die Entwicklung von Applets ist ein Browser mit Java-Unterstützung wichtig. Zum Testen lässt sich der AppletViewer aus dem JDK verwenden.
Besonders für Java-Buch-Autoren stellt sich die Frage, welche JDK-Version und damit welche Bibliotheken beschrieben werden sollen. Ich habe das Problem so gelöst, dass immer die Möglichkeiten des neuesten JDK (zurzeit 1.4) genutzt werden. Das wirft an einigen Stellen Probleme auf, beispielsweise dann, wenn eine kommerzielle Entwicklungsumgebung genutzt werden soll oder wenn Applets entwickelt werden. Kommerzielle IDEs hinken dem JDK immer etwas hinterher, und die Webbrowser, die Applets darstellen, verstehen nicht immer die aktuellen Versionen. Hier ist der Stand von 1.1 schon gut! Dennoch ist es für mich eine Frage der Zeit, bis sich auch die Neuerungen durchsetzen, und so ist es schwer zu entscheiden, was denn nun alt ist oder nicht. Wenn ich Anmerkungen im Text anheften würde, bliebe die Frage offen, wann ich diese streichen sollte. Galt vor einem Jahr noch 1.1 als Novum, ist dies heute 1.4. Die Leser finden im Buch nur das, was aktuell möglich ist, und nur aus historischen Gründen Verweise auf frühere Lösungen. Das gilt etwa für die Ereignisbehandlung oder die inneren Klassen. Für die Didaktik ist die Versionsfrage auch unerheblich, und Softwareentwickler werden die Online-Dokumentationen konsultieren.
Online-Informationen und Aufgaben
Das Buch ist in der aktuellen Version im Internet unter der Adresse
http://www.galileocomputing.de/
erhältlich. Auf der Webseite erfährt der Leser Neuigkeiten und Änderungen.
Der Quellcode der Beispielprogramme ist in fast allen Fällen im Buch abgebildet. Ein komprimiertes Zip-Archiv mit allen Beispielen in elektronischer Form ist zusätzlich auf der Webseite erhältlich.
Wer eine Programmiersprache lernen möchte, der muss sie wie eine Fremdsprache sprechen. Begleitend gibt es eine Aufgabensammlung auf der CD und mit vielen Musterlösungen auf der Webseite
http://java-tutor.com/aufgaben/j/
Organisation der Kapitel
Das Kapitel 1, Schon wieder eine neue Sprache?, zeigt die Besonderheiten der Sprache Java auf. Einige Vergleiche zu anderen populären objektorientierten Sprachen werden gezogen. Die Absätze sind weniger technisch und zeigen auch den geschichtlichen Ablauf. Das Kapitel ist nicht didaktisch aufgebaut, so dass einige Begriffe erst in den weiteren Kapiteln vertieft werden. Ebenso wird hier dargestellt, wie das Java 2 SDK von Sun zu beziehen und zu installieren ist, damit die ersten Programme übersetzt und gestartet werden können.
Technischer wird es in Kapitel 2: Sprachbeschreibung. Dort werden Variablen, Typen und die imperativen Sprachelemente hervorgehoben. Dabei werden die Grundlagen für jedes Programm mit Anweisungen und Ausdrücken geschaffen. Hier finden auch Fallanweisungen und Schleifen ihren Platz. Das alles geht noch ohne Objektorientierung.
Objektorientiert wird es in Kapitel 3: Klassen und Objekte. Dabei kümmern wir uns erst einmal um die in der Standardbibliothek vorhandenen Klassen, eigene Klassen werden später entworfen. Die Bibliothek ist so reichhaltig, dass allein mit den vordefinierten Klassen schon viele Programme bei der Nutzung entworfen werden können. Speziell die bereitgestellten Datenstrukturen lassen sich vielfältig einsetzen.
Wichtig ist für viele Probleme auch Der Umgang mit Zeichenketten, der in Kapitel 4 vorgestellt wird. Die beiden notwendigen Klassen String und StringBuffer werden eingeführt, und auch ein Abschnitt über reguläre Ausdrücke fehlt nicht. Bei den Zeichenketten müssen Teile ausgeschnitten, erkannt und konvertiert werden. Ein StringTokenizer zerlegt Zeichenfolgen aufgrund von Trennern in Teilzeichenketten. Mit Format-Objekten können beliebige Ausgaben in ein gewünschtes Format gebracht werden. Dazu gehört auch die Ausgabe von Dezimalzahlen.
Ein weiteres Feld, dem sich ohne eigene Klasse genähert werden kann, ist Mathematisches in Kapitel 5. Dazu wird die Klasse Math vorgestellt. Sie stellt typische mathematische Funktionen 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. Für Matrizen wird eine externe Klasse vorgeschlagen.
Mit diesem Vorwissen über Objekterzeugung und Referenzen kann der nächste Schritt gemacht werden. In Kapitel 6 werden wir dann Einige Klassen schreiben. Anhand von Socken und Kleidungsstücken werden Objekteigenschaften modelliert und Benutzt- und Vererbungsbeziehungen aufgezeigt. Wichtige Konzepte wie statische Eigenschaften, Polymorphie, abstrakte Klassen und Schnittstellen (Interfaces) sowie Sichtbarkeit finden dort Platz. Da Klassen in Java auch innerhalb von anderen Klassen liegen können, wird sich ein eigenes Kapitel damit auseinander setzen.
Danach sind die Grundmauern gelegt, und die verbleibenden Kapitel dienen dem Ausbau des bereits erworbenen Wissens. Dies wird in Kapitel 7, Exceptions, weiter vertieft. Ausnahmen bilden ein wichtiges Rückgrat in Programmen, da sich Fehler nie ausschließen 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. Es wird gezeigt, wie sich eigene Ausnahmen programmieren lassen.
Zu der 2700 Klassen und Schnittstellen umfassenden Klassenbibliothek gibt Kapitel 8, Die Funktionsbibliothek, eine Übersicht und führt in wichtige Klassen ein, etwa Konvertieren von Datentypen.
Das Kapitel 9 beschäftigt sich dann mit Threads und nebenläufiger Programmierung. Dabei umfasst das Kapitel auch die Koordination mehrerer kooperierender oder konkurrierender Threads.
Der Rest des Buches vertieft ausgewählte Bereiche. Hier kann der Leser den sequenziellen Pfad verlassen und sich einzelnen Themen widmen. Das beginnt in Kapitel 10 mit Raum und Zeit. Zeitzonen und unterschiedliche Ausgabeformate für Datumswerte werden eingeführt. Darunter fallen auch Datumsberechnungen auf der Grundlage des Gregorianischen Kalenders.
Kapitel 11 beschäftigt sich mit den Algorithmen und Datenstrukturen, die die Standardbibliothek anbietet. Die wichtigsten Klassen wie Vektoren, Stapel, Bitmengen und Assoziativspeicher werden vorgestellt und dann unterschiedliche Aufgaben mit den jeweils passenden Datenstrukturen gelöst. Als Algorithmen kommen etwa vorgefertigte Sortierverfahren zum Einsatz.
In Kapitel 12, Datenströme und Dateien, wird der Fokus auf die Ein-/Ausgabe gelenkt. Zuerst wird gezeigt, wie sich Attribute von Dateien und Verzeichnissen auslesen lassen, und dann, wie sich auf eine Datei wahlfreier Zugriff realisieren lässt. Anschließend folgt der zweite Teil über Datenströme, ein wichtiges Konzept, das auch bei Datenströmen aus Netzwerken, Datenbanken oder Schnittstellen wichtig ist. Die Datenströme können dabei durch Filter geschickt werden. Davon werden einige vorgestellt, die sich zum Beispiel die Zeilennummer merken, einen Datenstrom puffern oder ihn komprimieren. Eine elegante Möglichkeit ist das Serialisieren von Objekten. Dabei wird der Zustand eines Objektes ausgelesen und so in einen Datenstrom geschrieben, dass das Objekt später wiederhergestellt werden kann. Eine eigene Speicherroutine kann so entfallen.
Ein neues Thema spannt Kapitel 13 mit XML und Java 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 14 beschäftigt sich dann mit der Grafikprogrammierung mit dem AWT. Das AWT (Abstract Window Toolkit) ist die Java-Möglichkeit, grafische Oberflächen zu gestalten. Dabei gliedert es sich in zwei große Teile: zum einen die direkte Ausgabe von Grafik-Primitiven wie Linien und zum anderen Komponenten für grafische Oberflächen. Das Kapitel behandelt die Themen Fenster, Zeichenketten und Zeichensätze, Farben, Bilder, Bildproduzenten und Konsumenten, Farbmodelle, Bildspeichermöglichkeiten, Filter.
Das anschließende Kapitel 15 deckt die zweite Aufgabe der grafischen Oberflächen ab: Komponenten, Ereignisse und Container. Bei den Komponenten werden Oberflächen-Interaktionskomponenten vorgestellt sowie die Behandlung von Ereignissen, die aus Benutzeraktionen resultieren.
In Kapitel 16 geht es mit Netzwerkprogrammierung weiter. Wir sehen, wie Daten von Webservern bezogen werden können und wie eine eigene Client-Server-Kommunikation aufgebaut wird. Bei Webservern werden wir CGI-Programme ansprechen, um an gewünschte Inhalte zu kommen. Neben der gesicherten Verbindung TCP gehen wir auch auf ungesicherte UDP-Verbindungen ein.
Mit dem Kapitel 17, Servlets und Java Server Pages, geht es dann in die Welt der dynamischen Webseiten. Java ist zurzeit auf der Serverseite sehr populär und dort besonders beim so genannten Enterprise-Computing. Mit Servlets ist es besonders einfach, dynamische Webinhalte zu formulieren, da auf die mitgeschickten Informationen vom Client sehr einfach zugegriffen werden kann. Servlets verfügen zudem über die gesamten Java-Möglichkeiten, insbesondere die Datenbankanbindung.
In Kapitel 18 zeigen wir auf, wie ein Java-Programm einfach Objekte und Methoden nutzen kann, die auf einem anderen Rechner gespeichert bzw. ausgeführt werden. Solche Programme nutzen die Verteilte(n) Anwendungen mit RMI. Dabei wird der Aufruf einer Methode über das Netzwerk übertragen, und für das aufrufende Programm sieht es so aus, als ob es ein normaler Funktionsaufruf für ein lokales Objekt ist.
Das Wissen über die grafischen Oberflächen und Netzwerke wird in Kapitel 19 über Applets verbunden. Das sind Java-Programme, die innerhalb eines Webbrowsers leben. Die Bedeutung von Applets nimmt außerhalb von Firmennetzen (Intranets) immer mehr ab, so dass das Kapitel nicht umfangreich sein muss.
Das Thema Datenbankmanagement mit JDBC ist Inhalt von Kapitel 20. An einem Beispiel wird gezeigt, wie sich eine Verbindung zu einer Datenbank aufbauen lässt, um dort SQL-Anweisungen abzusetzen, die im nächsten Schritt abgeholt werden. Als Beispieldatenbank wird Interbase von Borland vorgestellt sowie die unbeliebte JDBC-ODBC-Brücke, mit der sich Java-Programme mit jeder ODBC-Datenbank verbinden lassen.
Mit Kapitel 21 widmen wir uns einer für Java typischen Technik: Reflection. Java-Klassen liegen selbst wieder als Meta-Objekte, als Exemplare der speziellen Klasse Class vor. Diese Class-Objekte geben Auskunft über die verfügbaren und definierten Variablen, Methoden und Konstruktoren. So lassen sich beispielsweise dynamisch bestimmte Methoden aufrufen oder die Werte von dynamisch ausgewählten Objektvariablen abfragen.
Reflection ist eine Vorbereitung auf das Kapitel 22, Komponenten durch Bohnen. Die wiederverwendbaren Softwarebausteine in Java heißen Java-Beans. Das sind Komponenten, die vor ihrer Benutzung durch ein spezielles Programm visuell editiert und verknüpft werden. Die Beans definieren Eigenschaften (Properties), die über Methodenaufrufe abgefragt und eingestellt werden.
In Java kann nicht alles plattformunabhängig gelöst werden. An einer bestimmen Stelle muss plattformabhängiger Programmcode eingebaut werden. Sun definiert dazu das Java-Native Interface (JNI), um auf Nicht-Java-Code wie C(++) zuzugreifen. Wir werden das in Kapitel 23, Java Native Interface, vorstellen.
Kapitel 24 zeigt kurz Sicherheitskonzepte auf, etwa das Sandkasten-Prinzip, Sicherheitsmanager aber auch, wie von Daten eine Prüfsumme gebildet werden kann und Daten mit DES verschlüsselt werden.
In Kapitel 25, Dienstprogramme für die Java-Umgebung, geht es um die zum SDK gehörigen Programme und einige extra Tools, die für Ihre Arbeit nützlich sind. Beschrieben werden Compiler, Interpreter und die Handhabung von Jar-Archiven. Dieses Archivformat ist vergleichbar mit den bekannten Zip-Achiven und fasst mehrere Dateien zusammen. Mit den eingebetteten Dokumentationskommentaren in Java kann aus einer Quellcodedatei ganz einfach eine komplette HTML-Dokumentation der Klassen, Schnittstellen, Vererbungsbeziehungen und Eigenschaften inklusive Verlinkung erstellt werden. Unter den Programmen, die nicht zu einer Standardinstallation gehören, sind etwa Tools, die Java-Programme in C-Programme übersetzen, sie verschönern und Bytecode wieder in lesbaren Java-Quellcode umwandeln.
Am Ende des Buches widmet sich Kapitel 26 einem Style-Guide. In Teams sollen sich die Entwickler an Konventionen halten, um das entstehende Software-Produkt einfacher zu pflegen. Hier werden einige Konventionen vorgestellt, die vom Einrücken von Quellcode bis zur Namensgebung reichen.
Im Anhang findet sich das Quellenverzeichnis mit Verweisen auf interessante Bücher und Internetadressen.
Das Buch in der Lehre einsetzen
Die Insel eignet sich ideal zum Selbststudium. Das erste Kapitel dient zum Warmwerden und plaudert ein wenig über dies und das. Wer auf dem Rechner noch keine Entwicklungsumgebung installiert hat, sollte zuerst das SDK von Sun installieren. Es ist auf der CD oder unter http://java.sun.com/j2se/ abgelegt.
Zum Entwickeln von Software ist die Hilfe unerlässlich. Da sie einige Megabytes groß ist, muss sie extra ausgepackt werden. Sie ist auf der CD oder unter http://java.sun.com/docs/ erhältlich. Die Hilfe ist ein einfaches Zip-Archiv, das im Java-Verzeichnis ausgepackt werden kann.
Da das Sun-SDK nur Kommandozeilentools installiert, sollte eine grafische IDE (Integrated Development Environment) installiert werden, da dies die Entwicklung von Java-Programmen deutlich komfortabler macht. Eine IDE bietet gegenüber der rohen Kommandozeile einige Vorteile:
|
Der Prozess des Editierens, Compilierens, Laufenlassens soll schnell und einfach über einen Tastendruck oder Mausklick angestoßen werden. |
|
Die Syntax von Java sollte durch Farben hervorgehoben werden (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 sollen jetzt keine Rolle spielen. Wer neu in die Programmiersprache Java einsteigt, der wird mit CodeGuide seine Freude haben. Es wird im ersten Kapitel ebenfalls beschrieben.
Richtig los geht es in Kapitel 2, und ab dort geht es didaktisch Schritt für Schritt. Wer neu in Java unterwegs ist, wird von Kapitel 2 am meisten profitieren. Wer Kenntnisse in C hat, der kann gleich in Kapitel 3 einsteigen. Wer objektorientiert schon in C++ programmiert hat, kann Kapitel 3 überfliegen und dann einsteigen.
Mit dem Buch und einer Entwicklungsumgebung des Vertrauens lassen sich die ersten Programme entwickeln. Zum Lernen einer neuen Programmiersprache reicht das Lesen aber nicht aus. Zum Trainieren der Fingerfertigkeit dienen die Übungsaufgaben auf der CD. Da Lösungen beigelegt sind, lassen sich die eigenen Lösungen gut mit den Buchübungen vergleichen. Vielleicht bietet die Buchlösung noch eine interessante Lösungsidee oder Alternative an.
Konventionen
In diesem Buch werden folgende Konventionen verwendet: Listings und Methoden sind in nicht-proportionaler Schrift gesetzt. Bei Methodennamen folgt immer ein Klammerpaar. Die Parameter sind nicht immer aufgeführt. Neu eingeführte Begriffe sind kursiv gesetzt, und der Index verweist genau auf diese Stelle. Des Weiteren sind Dateinamen, Programme und Dateiendungen (.txt) kursiv.
Komplette Programmlistings sind wie folgt aufgebaut:
Listing 0.1
Javaprogrammname.java
class Trallala
..
Der Quellcode gehört zur Datei Javaprogrammname.java. Der Dateiname weicht nur vom Klassennamen ab, wenn sich noch weitere Klassendefinitionen innerhalb einer Datei befinden.
Methoden oder Konstruktoren werden in einer speziellen Auflistung aufgeführt, die ein leichtes Auffinden erlauben. Im Rechteck steht der voll qualifizierte Klassen- beziehungsweise Schnittstellenname. In den nachfolgenden Zeilen sind geerbte Oberklassen und implementierte Schnittstellen aufgeführt:
abstract class java.text.DateFormat
extends Format
implements Cloneable
|
Date parse( String ) throws ParseException
Parst einen Datum- oder einen Zeit-String.
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. Wird eine Schnittstelle beschrieben, sind die Methoden automatisch abstrakt, und das Schlüsselwort abstract wird nicht zusätzlich angegeben.
Ausführbare Programme auf der Kommandozeile sind durch ein allgemeines Dollar-Zeichen am Anfangzu erkennen (auch wenn andere Betriebssysteme und Kommandozeilen ein anderes Prompt anzeigen).
$ java ErstesGlueck
Danksagungen
Ich hätte gerne einem großen Softwarehaus meinen Dank ausgesprochen, doch leider gibt es keinen Grund dafür. Mit einer Textverarbeitung ist es wie mit Menschen – irgendwie hat doch jeder noch mal eine zweite Chance. Auch eine Textverarbeitung. Klappt irgendetwas nicht, nun gut, vielleicht geht es auf einem anderen Weg. Auch meiner Ex-Pommes-Bude nebenan habe ich schon viele Chancen gegeben – aber nichts. Die Pommes blieben weich und pampig. Die Konsequenz ist: Ich gehe nicht mehr hin.
Genauso ist es mit Microsoft Word oder Adobe FrameMaker. Einst war ich von FrameMaker so begeistert, doch das hielt nur einen Monat. Die Texterfassung ist umständlich, und so ging ich zu Word 7 über. Damals waren es schon etwa vierzig Seiten mit Vorlagen. Das Konvertieren ging schnell in drei Tagen über die Bühne. Als ich dann – aus Gründen, die mir heute nicht mehr bekannt sind1
zu Word 8 überging, ging das Konvertieren schon wieder los. Ich war geblendet von den Funktionen und Spielereien.
Die Ernüchterung kam zwei Monate später. Mein Dokument war auf die Größe von 100 Seiten angeschwollen, und Filialdokumente machten Sinn. Doch plötzlich fehlte eine Datei, andere waren defekt, und Word wollte einfach nicht ohne eine Fehlermeldung die Filialdokumente laden.2
Sie waren aus unerfindlichen Gründen als fehlerhaft markiert. Auch die Anweisung, alles zu kopieren und in ein neues Dokument zu packen, machte sie nicht wieder einsatzbereit. Da ist das plötzliche Weißwerden des gesamten Texts unter Word 73
noch harmlos dagegen. Als Word anschließend noch anfing, meine Absatzvorlagen heiter durcheinander zu bringen, und auch nach Ändern und Speichern immer noch die gleichen Effekte zeigte, war es so weit: Word 8 musste weg. Also wieder zurück zu Word 7? Ja! Also RTF, Absatzvorlagen wieder umdefinieren, altes Filialdokument wieder einsetzen. Die Zeit, die ich für Umformatierungen und Konvertierungen verliere, ist weg, und das Einzige, was ich gelernt habe, ist: »Sei vorsichtig bei einem MS-Produkt«! Aber, erzähl’ ich damit jemandem etwas Neues?
Nun, ich darf es eigentlich gar nicht erwähnen, aber der Verlag setzt das Buch in FrameMaker. Was sonst?4
Das Programm eignet sich zwar nicht zur Texterfassung, jedoch ist der Satz sehr gut, die Darstellung von Bild und Text überzeugend schnell und für einen möglichen späteren Druck sehr entgegenkommend. Dort lassen sich auch tausend Seiten mit Bildern und Tabellen ohne Seitenneuberechnung schnell scrollen. So sollte das immer sein. Mich beeindruckt in diesem Zusammenhang immer eine Textverarbeitung auf dem Acorn Archimedes – ich glaube, das war Impression von Computer Concepts. Sie stellt den Text beim Verschieben eines Bildes mit automatischer Neuberechnung des Textflusses pixelgenau dar. Warum habe ich das in einer PC-Textverarbeitung noch nicht gesehen? Nun denn … Von der Verlagsseite bekomme ich wieder RTF-Dateien aus FrameMaker exportiert, bearbeite sie und gebe sie dann wieder ab. Für die Texterfassung und Korrektur setze ich Word ein – mit roten Kringeln und neuer Rechtschreibung. Ein Glück, dass ich mich über die Umsetzung RTF nach Frame nicht mehr kümmern muss.
Echte Danksagungen
Ich danke besonders Dr. Michael Thies, Uli Holtel, Rolf Leibold, Henryk Plötz, Michael Schulte und Joerg Kulow für ihre Arbeit. Sie haben intensiv gelesen und aktiv mitgewirkt. Ebenso geht ein großes Dankeschön an Hans-Gerd Wiegard, der große Teile des XML-Kapitels weiterentwickelt hat. Die professionellen, aufheiternden Comics stammen von Andreas Schultze (Akws@aol.com). Ein weiteres Dankeschön geht an verschiedene treue Leser, deren Namen aufzulisten viel Platz kosten würde. Ich danke auch den vielen Buch- und Artikelautoren für ihre interessanten Werke, aus denen ich mein Wissen über Java aufbauen konnte. Ich danke meinen Eltern für ihre Liebe und Geduld und meinen Freunden/Freundinnen für ihr Vertrauen.
Abschließend möchte ich dem Galileo-Verlag meinen Dank für die Realisierung und unproblematische Zusammenarbeit aussprechen. Über die Zusammenarbeit mit meiner Lektorin Judith bin ich sehr dankbar.
Feedback
Auch wenn wir die Kapitel noch so sorgfältig durchgegangen sind, ist nicht auszuschließen, dass noch Unstimmigkeiten vorhanden sind. Wer Anmerkungen, Hinweise, Korrekturen oder Fragen zu bestimmten Punkten hat, der sollte sich nicht scheuen, mir eine E–Mail unter der Adresse JavaBuch@Java-Tutor.com zu senden. Ich bin für Anregung und Kritik stets dankbar.
Und jetzt wünsche ich viel Spaß beim Lesen und Lernen von Java!
Paderborn, im Jahre 2002
Christian U. Ullenboom
Kapitel Vorwort Version 2.0
Es sind gerade einmal ein paar Monate her, seitdem die erste Auflage des Buches auf den Markt kam. In der Zeit hatte ich die Möglichkeit, Änderungen für die zweite Version einzubringen. Das sind viele Fehlerkorrekturen besonders optischer Natur. Zudem ist das Buch noch einmal komplett korrigiert worden, was bei der großen Anzahl der blöden Rechtschreibfehler auch sinnvoll war. Der richtig harte Fehler war, dass Map die Schnittstelle Collection erweitern soll; das ist natürlich Blödsinn. Ich predige das zwar schon seit Jahren in meinen Seminaren, aber wie dieses Missverständnis in das Kapitel kam, bleibt ein Rätsel. Ebenfalls gab es einige Ungenauigkeiten und Fehler bei JSPs. Ich führe das darauf zurück, dass ich sehr altes Info-Material der JSP-Spezifikation 0.9 nutzte. Viele Links mussten ebenfalls aktualisiert werden. Meine Lehre daraus ist: Verweise nie auf Links von Studenten oder Uni-Arbeiten. Die Webseiten etablierter Unternehmen sind deutlich stabiler als die einer Privatperson. Eine weitere Änderung betrifft das Kapitel zu Servlets/JSP. Ich habe anfangs die Bedeutung von JSPs völlig falsch eingeschätzt. Das Hauptaugenmerk lag daher in der ersten Auflage auf Servlets, doch das Kapitel ist nun so aufgebaut, dass der Schwerpunkt auf JSPs liegt und Servlets eine untergeordnete Rolle spielen und nur für Binärdaten ihr Dasein fristen. Eine größere Änderung betrifft ebenfalls AWT und Swing. Swing drängt die schwergewichtigen AWT-Komponenten immer mehr in den Hintergrund (obwohl neuere GUIs wie in Eclipse wieder etwas anderes zeigen). Daher habe ich das Kapitel »Komponenten und Container« auf Swing aufgebaut, und die AWT-Komponenten sind raus.
Ein Dankeschön geht wieder an Hans-Gerd, der sich um die Erweiterung des XML-Kapitels gekümmert hat. Götz Wankelmuth nahm sich die Zeit, das Swing-Kapitel zu bearbeiten und mir ausgedruckt zuzuschicken.
Und jetzt wird es wieder Zeit, dem griechischen Philosophen Platon (427–347 v. Chr.) zu folgend, der sagte: »Der Beginn ist der wichtigste Teil der Arbeit.«
1
Versionsfanatismus?
2
Aus einem Online-Magazin vom 13. Mai 2002: »A senior Microsoft Corp. executive told a federal court last week that sharing information with competitors could damage national security and even threaten the U. S. war effort in Afghanistan. He later acknowledged that some Microsoft code was so flawed it could not be safely disclosed.«
3
Microsoft hat in den Entwicklungslaboren immense Sicherheitsprobleme. Immer wieder verschwinden Vorversionen von Programmen samt Sicherheitskopien. Dies führt dazu, dass Microsoft unfertige Programmversionen ausliefern und Versionsnummern überspringen musste. Wer über den Aufenthalt von MS Project 2.0, Works 1.0 für Windows, MS DOS 6.1, Excel 1.0, Word 3.0/4.0/5.0 für Windows, Windows NT 1.0/2.0/3.0 Aussagen machen kann, sollte sich bitte an eine Microsoft-Niederlassung wenden.
4
Ja, o.k., TeX ist auch eine Lösung.
|