Java Standard: Einleitung
Nötiges Vorwissen
BearbeitenAls Vorwissen für dieses Buch wird vorausgesetzt, dass der Nutzer mit dem Computer und der Kommandozeile (Shell) umgehen kann. Des Weiteren werden Kenntnisse der objektorientierten Programmierung vorausgesetzt.
Nicht notwendig, aber nützlich, ist die Kenntnis einer anderen mit Java verwandten Programmiersprache, wie etwa C++.
Geschichte und Namensgebung
BearbeitenDie Programmiersprache Java wurde 1991 von James Gosling und anderen im Hause Sun Microsystems entwickelt. Der ursprüngliche Name lautete jedoch Oak für eine große Eiche außerhalb des goslingschen Büros.
Eine ausführliche Beschreibung mit Spezifikationen der Programmiersprache ist in der deutschsprachigen Wikipedia zu finden.
Versionen von Java
BearbeitenEs gibt mehrere Versionen von Java, wobei grob gesagt werden kann, dass die vorletzte Version die am häufigsten eingesetzte Version ist. Dieses Buch ist im Grundstil dafür geschrieben, dass mit dieser Version gearbeitet wird. Zur Zeit ist die Version 1.4 die am meisten eingesetzte Version.
Auf die neueren Features von Java 5.0 (Tiger) wird ebenfalls an den geeigneten Stellen eingegangen.
Version 1.0 (1996)
BearbeitenVersion 1.1 (1997)
BearbeitenWesentliche Änderung:
- Neues Event Handling
Version 1.2 (1998) / Java 2
BearbeitenWesentliche Änderung:
- Aufnahme von Swing in die J2SE
Version 1.3 (2000)
BearbeitenVersion 1.4 (2002)
BearbeitenWesentliche Änderungen:
- Unterstützung von Zusicherungen (Assertions)
- Aufnahme einer Logging API
- Aufnahme einer API für reguläre Ausdrücke
Version 5.0 (2004)
BearbeitenWesentliche Änderungen:
- Generische Datentypen
- Enumerationen
- Neue zusätzliche Syntax für for-Schleifen über Datenstrukturen
- Annotationen für Metadaten
Version 6.0 (2006)
BearbeitenSun Microsystems hat erstmalig sehr früh einen Einblick in die neue Version (Codename Mustang) gewährt. Einige Themen stehen zur Diskussion, darunter unter anderem aspekt orientierte Entwicklung [AOP], ein Thema, welches dem Entwickler sicher ebenso viel Freude machen dürfte wie die generischen Datentypen in Version 5 oder die Logging API in Version 1.4.
Warum Java?
BearbeitenHier werden Ihnen die Vor- und Nachteile von Java aufgezeigt, damit Sie sich besser entscheiden können, ob es sich für Sie lohnt, diese Programmiersprache zu erlernen.
Vorteile
BearbeitenJava ist mittlerweile für die verschiedensten Computersysteme verfügbar und hat eine weite Verbreitung gefunden. Ebenso bringt Java eine umfangreiche Klassenbibliothek mit, die für (fast) alle täglichen Programmieraufgaben eine Unterstützung enthält. Durch das Konzept der virtuellen Maschine ist ein einmal compilierter Programmcode auf jeder Plattform, für die eine Java VM vorhanden ist, lauffähig. Ein erneutes Übersetzen auf der jeweiligen Zielplattform (wie bei C/C++) ist nicht mehr notwendig. Ein weiterer Vorteil sind die sogenannten "Applets". Dies sind Java-Programme, die innerhalb eines Web-Browsers gestartet werden können und somit sehr einfach Applikationen über das Internet verfügbar machen.
Ein handfester Vorteil - nicht nur für große Projekte - ist die mittlerweile freie Verfügbarkeit von integrierten Entwicklungsumgebungen, allen voran die Eclipse-Plattform. Für viele Programmierer ist gerade die Werkzeugunterstützung ein entscheidendes Kriterium bei der Auswahl einer Programmiersprache. Hier ist Java eine der am aktivsten unterstützen Plattformen.
Java hat sich mittlerweile als Industriestandard etabliert.
Nachteile
BearbeitenJava-Programme benötigen zur Ausführung eine Laufzeit-Umgebung. Auf vielen Computern ist diese nicht vorinstalliert und muss erst separat eingerichtet werden. Gleiches gilt jedoch auch für andere beliebte Programmiersprachen, z.B. .NET oder Perl. Ebenso sind die in gängigen Browsern eingebauten Java-Applet-Laufzeit-Umgebungen häufig veraltet. Will man Java-Programme für diese Browser schreiben, so muss man sich auf eine alte Sprachversion beschränken oder auf dem Browser eine aktuelle Laufzeitumgebung nachinstallieren.
Des Weiteren ist Java nicht geeignet, um systemnahe Programme wie etwa Hardwaretreiber zu entwickeln. Das liegt im Wesentlichen daran, dass Java-Programme auf theoretisch beliebigen Rechnerarchitekturen und Betriebssystemen unverändert lauffähig sein sollen. Diese Abstraktion lässt einen direkten Zugriff auf spezifische hardwarenahe Funktionen nicht mehr zu. Andere Sprachen wie etwa C oder C++ sind für derartige Aufgaben besser geeignet.
Geschwindigkeit von Java-Programmen
BearbeitenDie vorherrschende Meinung zur Geschwindigkeit von Java-Programmen ist, dass Java-Programme langsamer als vergleichbare C- oder C++-Programme seien. Das kann man jedoch nicht pauschal so sagen, denn die Geschwindigkeit von Java-Programmen hängt von verschiedenen Faktoren ab.
Eine große Rolle spielt zunächst die Virtuelle Maschine (VM), auf der das Java-Programm abläuft. In den Anfangszeiten wurde Java-Code interpretiert. Dies führte zu Leistungseinbußen, die bei modernen Java-VMs praktisch nicht mehr gegeben sind. Die Java-VM von SUN beispielsweise "kompiliert" Java-Programme sozusagen zur Laufzeit. Im Ergebnis erhält man ein Programm, das kaum noch langsamer ist als ein vergleichbares, das in C oder C++ geschrieben wurde.
Einen grundsätzlichen Geschwindigkeitsnachteil haben Java-Programme beim "Anfahren", denn jedes Java-Programm muss zunächst für sich eine eigene VM starten. Außerdem dauert das Laden der Klassen sehr lange. Neuere Implementierungen der VM (2004) beheben letzteren Nachteil dadurch, dass Klassen von mehreren Programmen gleichzeitig benutzt werden können, so dass, nachdem die erste Java-Applikation gestartet wurde, für die nachfolgenden das Laden entfällt.
Einen weiteren Geschwindigkeitsnachteil haben Java-Programme dadurch, dass bei jedem Feldzugriff die Bereichsgrenzen überprüft werden. Moderne VMs können aber die Überprüfung weitestgehend "wegoptimieren", indem bei Schleifendurchläufen - anstatt bei jedem Feldzugriff - die Bereichsüberprüfung vor dem Schleifenrumpf platziert wird. Auf diese Art lassen sich etwa 80 Prozent der ansonsten anfallenden Bereichsüberprüfungen eliminieren.
Noch ein Nachteil entsteht Java-Code dadurch, dass viele Methoden (genauer: nicht-finale Instanzmethoden) zunächst virtuell sind. Auch hier haben jedoch Compiler die Möglichkeit, Optimierungen durchzuführen; und weil die Laufzeitumgebung von Java auf die Ausführung von virtuellen Methoden optimiert ist, sind Aufrufe von virtuellen Methoden in Java erheblich schneller als in den meisten C++-Compilern.
Nicht zuletzt spielt auch die Bibliothek eine Rolle. Die von SUN favorisierte Swing-Bibliothek, die in erster Linie für die Grafikausgabe zuständig ist, steht nicht im Ruf, besonders schnell zu sein.
Es gibt aber auch Bedingungen, unter denen Java-Programme Geschwindgkeitsvorteile gegenüber C- oder C++-Programmen haben. Beispielsweise ist die Objekterzeugungsgeschwindigkeit bei Java sehr hoch. Wenn es also darum geht, viele Objekte in kurzer Zeit zu erzeugen, können Java-Programme in der Praxis hier Vorteile ausspielen. Java hat auch weniger Aliasing-Probleme als C oder C++. Aliasing bedeutet, dass sich Speicherbereiche von formal unterschiedlichen Objekten überlappen. Da es in Java weniger Aliasing-Probleme gibt, können Java-Programme bei numerischen Aufgaben gewinnbringend eingesetzt werden. (Siehe Leistungsvergleich zwischen Java und C++.)
Ob Ihr eigenes Java-Programm in der Praxis schneller oder langsamer ist als eines, das in C++ geschrieben wurde, hängt aber noch von vielen anderen Faktoren ab. Wie schon angedeutet, können Java-Programme auf schnellen und auf langsamen VMs laufen. Und wenn Sie die Geschwindigkeit mit C++ vergleichen, dann spielt selbstverständlich auch die Implementierung des zugrundeliegenden C++-Compilers eine Rolle.
Groß ist der praktische Geschwindigkeitsunterschied heutzutage in den meisten Fällen jedenfalls nicht.
Jedes Java-Programm lässt sich aber unendlich langsam machen, wenn man nur unendlich schlecht programmiert. Der Hauptfaktor dabei sind also Sie.