Kurzeinstieg Java: Einleitung
Nötiges Vorwissen
[Bearbeiten]Wir setzen in diesem Buch voraus, dass Sie mit ihrem Computer umgehen können, Programme installieren sowie Texte mit einfachen Editoren (z. B. Notepad++, vi, emacs) schreiben können. Falls Sie es vorziehen, nicht mit einer Programmierumgebung (IDE) zu arbeiten, dann sollten Ihnen Kommandozeilen ("Shell" oder "Dosfenster" oder dergleichen) keine Probleme bereiten.
Neue Programmiersprachen lernt man leichter, wenn man schon andere Programmiersprachen kann, insbesondere solche, die so ähnlich aussehen. So braucht man sich nur auf die neue Syntax einzulassen, der Rest ergibt sich dann irgendwie. Wir erläutern Grundbegriffe wie zum Beispiel "Variablen" zwar kurz, setzen aber voraus, dass diese kurze Einführung ausreicht.
Geschichte und Namensgebung
[Bearbeiten]Die Programmiersprache Java wurde 1991 von James Gosling in einem Team im Hause Sun Microsystems entwickelt. Der ursprüngliche Name lautete Oak für eine große Eiche außerhalb des goslingschen Büros.
Seit 1998 gibt es den "Java Community Process", ein Verfahren, bei dem Firmen und Einzelpersonen mit dem Ziel, die Java-Entwicklung voranzutreiben, beteiligt sind.
2009/2010 erfolgte die Übernahme von Sun durch Oracle.
2014 wurde Java SE 8 ("Java 8") herausgebracht.
Detailiertere Informationen über den Verlauf der Java-Entwicklung finden Sie unter oracle.com.edgesuite.net/timeline/java/
Warum Java?
[Bearbeiten]An Java führt praktisch kaum ein Weg vorbei. Laut dem Tiobe-Index[1] ist Java die beliebteste Programmiersprache aller Zeiten, und dort unangefochten auf den ersten Plätzen vertreten. Java wird an Universitäten in Einstiegsvorlesungen gelehrt und damit ist es recht wahrscheinlich, dass bei allen Entwicklern Java zum kleinsten gemeinsamen Nenner gehört.
Vorteile
[Bearbeiten]Java 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 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
[Bearbeiten]Java-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.
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
[Bearbeiten]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 (heute Oracle) 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 Oracle 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++.)
Da Java innerhalb einer VM ausgeführt wird, können auch zur Laufzeit Optimierungen durchgeführt werden, die zu einem schnelleren Programm führen können als es ein C oder C++ Programm sein kann.
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.