Merkmale der Sprache Java

White Paper-Weisheit von Sun: "Java: A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded and dynamic language."

Einfachheit

Java ist eine komplette einfach gehaltene Programmiersprache. Im Vergleich zu C und C++ fehlen der Sprache Sprungbefehle (dafür gibt es break und continue). Es werden keine header files benötigt. Da Java objektorientiert ist, wurde auf struct und union verzichtet. Es gibt kein Operator-overloading und keine multiple Vererbung. Und vor allem gibt es keine Pointer; dies befreit die Sprache von zahlreichen Fehlermöglichkeiten. Die Sprache verfügt über eine automatische garbage collection, so dass man sich um das memory management nicht kümmern muss.

Objektorientierung

Java verfügt über ein in objektorientierten Sprachen übliches Klassen-Konzept, wonach eine Klasse eine Sammlung von Daten und Methoden ist; die Methoden einer Klasse können auf ihre Daten angewandt werden. Klassen sind hierarchisch aufgebaut. Die Subklassen erben die Eigenschaften ihrer Klasse.

Klassen

"verkapseln" ihre Daten und Methoden, so dass sie nach außen nicht sichtbar sind. Sie kommunizieren mit ihrer Außenwelt nur über definierte Interfaces mit definierten Methoden. Vordefinierte Java-Klassen sind in packages organisiert, v.a. für das graphische Benutzerinterface (java.awt), Input und Output (java.io) und Netzwerkfunktionen (java.net).

Netzwerkorientierung

Java ist eine verteilte Sprache (distributed). Die URL-Klasse1) z.B. erlaubt den Zugriff auf das weltweite Webseiten-System aus jedem Programm heraus. Die Sprache eignet sich auch gut zur Softwareverteilung in einem Netz.

Systemunabhängigkeit

Der Java-Compiler erzeugt Byte-Code. Dieser wird vom Java-Interpreter maschinenspezifisch übersetzt. Der Byte-Code ist architekturneutral, daher laufen Java-Programme auf (nahezu) jeder Hardware-Plattform.

Robustheit

Java war zunächst entwickelt worden für elektronische Gebrauchsgeräte und daher einfach gehalten. Die Sprache ist streng typgebunden und vermeidet daher Fehler durch Vermischung von Datentypen. Implizite Deklarationen werden nicht geduldet, man muss alles definieren, was man benutzt. Der Verzicht auf Pointers eliminiert ebenfalls viele Fehlermöglichkeiten durch memory overwriting. Die Sprache hat ein eingebautes exception handling, z.B. für den Fall eines Fehlers.

Sicherheit

Dadurch, dass Java über keine Pointer verfügt, kann kein Programmierer das memory management manipulieren. Die Deklarationen der Klassen sagen auch nichts über das memory layout. Der Byte-Code-Verifikationsprozess des Java-Runtimesystems checkt, dass der über das Netzwerk geladene Code keine Sprachrestriktion verletzt. Jede geladene Klasse wird in einen separaten Namespace gepackt, so dass kein Java-Applet Standardklassen mit seinen eigenen überschreiben kann.

Mehrprozessfähigkeit

Java unterstützt mehrere "threads of execution", die verschiedene tasks handeln können. Die Sprache verfügt über Synchronisierungsmöglichkeiten unter verschiedenen laufenden Prozessen.