Java (Programmiersprache)
Java ist eine Programmiersprache. Sie wurde ab 1991 von James Gosling und anderen Ingenieuren des amerikanischen Computerherstellers Sun Microsystems entwickelt. Ziel war eine schlanke Sprache für Kleingeräte mit geringer Hardwarekapazität. Offiziell wurde Java erstmals am 23. Mai 1995 vorgestellt. Der Begriff leitet sich von einer Bezeichnung für eine starke Sorte Kaffee ab.
Grundkonzepte der Sprache
Der Entwurf der Sprache verfolgte vier Hauptziele:
- Objektorientierung
- Plattformunabhängigkeit (d.h. Unabhängigkeit vom Betriebssystem und von Hardware)
- Vernetzbarkeit
- Sichere Ausführung auf entfernten Computern
Objektorientierung
Die Sprache Java ist wie C++ objektorientiert aufgebaut. Komplexe Konstrukte, wie Mehrfachvererbung oder Pointerarithmetik in C++ fanden in Java keinen Einzug. Hier fand man weniger fehleranfällige Lösungen. Auch um die Speicherverwaltung braucht man sich als Entwickler in der Regel keine Gedanken zu machen, dies erledigt der sogenannte Garbage Collector.
Plattformunabhängigkeit
Java ist plattformunabhängig, d. h. Java-Programme laufen unabhängig vom Betriebssystem und der eingesetzten Hardware. Java-Programme laufen nicht nur auf einem PC, einer Workstation oder einem Server, sondern auch auf Organizern und Handies. Dies wird dadurch erreicht, dass es sich bei einem kompilierten Java-Programm nicht um direkt ausführbaren Maschinencode handelt, sondern um maschinenunabhängigen Bytecode.
Zum Ausführen von Java-Programmen wird ein Stück Software, die sogenannte Java VM benötigt. Es gibt mittlerweile aber auch Hardware-Lösungen, also Prozessoren, deren Maschinensprache selbst der Java-Bytecode ist.
Sichere Ausführung auf entfernten Computern
Eine Besonderheit von Java sind Java-Applets. Das sind meist kleine Java-Programme, die einen Java fähigen Web-Browser benötigen, um abzulaufen. Dies wird häufig durch Plug-ins gelöst. Das Applet ist dabei in der HTML-Seite eingebettet. Die Rechte eines Applets werden standardmäßig stark eingeschränkt, d. h. es erhält keinen Zugriff auf lokale Ressourcen (Applets dürfen nur in der sogenannten Sandbox "spielen"). Seit Java 2 gibt es die Möglichkeit, Applets zu signieren. Mit Hilfe dieser Signatur ist es möglich, den Autor eines Applets eindeutig zu identifizieren. Unter Berücksichtigung dieser Information kann der Benutzer dann dem Applet selektiv (wenn notwendig) mehr Rechte zugestehen.
Im Unterschied zu Java-Applets, lassen sich mit Java Web Start vollwertige Java Anwendungen über das Netz ausführen. Diese Technologie ermöglicht eine automatische Installation von Anwendungen auf dem lokalen System. Dies wird erreicht, indem eine spezielle XML Datei im Internet bereitgestellt wird. In dieser werden die einzelnen Komponenten der Anwendung beschrieben. Diese werden dann auf den Rechner des Anwenders heruntergeladen. Bei jedem Start wird erneut überprüft, ob neuere Komponenten vorliegen. So arbeitet der Anwender stets mit der aktuellsten vom Autor des Programms zur Verfügung gestellten Version. Wie bei Applets können Komponenten signiert sein. Der Anwender hat dabei ebenfalls die volle Kontrolle über die Vergabe der Rechte.
Features der Sprache
Um große Projekte strukturieren zu können und saubere Schnittstellen zu Bibliotheken zu schaffen, können die Klassen zu Paketen (Packages) zusammengefasst werden. Die Zugriffe auf Klassen und Methoden eines fremden Packages können - ähnlich wie innerhalb einer Klasse durch private und public - geregelt werden.
Weiter unterstützt die Sprache Threads (gleichzeitig ablaufende Programmteile) und Exceptions (wörtlich: Ausnahmesituationen, das sind Objekte, die bei der Unterbrechung des Programm-Ablaufes an die nächst höhere aufrufende Methode weitergereicht werden.)
Zu Java gehört eine umfangreiche Klassenbibliothek. Dem Programmierer wird damit eine einheitliche, vom zugrunde liegenden Betriebssystem unabhängige, Schnittstelle (Application programming interface, API) angeboten.
Syntax
Ein Beispielprogramm, das eine Meldung auf der Konsole ausdruckt:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Kontrollfluss-Strukturen
Schleifen
while (Boole'scher Ausdruck) {
Anweisung(en)
}
do {
Anweisung(en)
} while (Boole'scher Ausdruck);
for (Initiallisierung ; Endbedingung ; Inkrement) {
Anweisung(en)
}
Wenn-Dann-Anweisungen
if (Boole'scher Ausdruck) {
Anweisung(en)
}
if (Boole'scher Ausdruck) {
Anweisung(en)
} else {
Anweisung(en)
}
Mit else if können beliebig komplexe Wenn-Dann-Anweisungen konstruiert werden
if (Boole'scher Ausdruck) {
Anweisung(en)
} else if (Boole'scher Ausdruck) {
Anweisung(en)
} else if (Boole'scher Ausdruck) {
Anweisung(en)
} else {
Anweisung(en)
}
switch (Integerausdruck) {
case konstanter Integerausdruck:
Anweisung(en)
break;
...
default:
Anweisung(en)
break;
}
Ausnahmebehandlung
try {
Anweisung(en)
} catch (Bezeichnung des Ausnahmetyps) {
Anweisung(en)
} catch (Bezeichnung des Ausnahmetyps) {
Anweisung(en)
} finally {
Anweisung(en)
}
Sprunganweisungen
Man kann vor Schleifen ein Label setzten
meinLabel: eineSchleife (for/while/do);
Die Anweisung
break;
ohne Label beendet die innerste Schleife
Das Label kann dann benutzt werden um z.B. aus einer inneren FOR-, einer WHILE oder einer DO-Schleife direkt in eine äußere auszubrechen.
break meinLabel;
Eine continue-Anweisung beendet den aktuellen Iterationsschritt fährt mit der nächsten Schleifeniteration weiter.
continue;
Analog kann mit
continue label;
direkt in einer äußeren Schleife weitergefahren werden.
Die Anweisung
return;
beendet eine Methode.
Mit
return einWert;
kann der aufrufenden Methode ein Wert übermittelt werden
Grunddatentypen
Grunddatentypen, die auch als 'primitive' Datentypen bezeichnet werden, sind in Java ebenfalls plattformunabhängig (sie werden stets im Big Endian-Format gespeichert, wenn sie größer als 8 Bit sind):
- boolean (Werte sind true und false)
- char (16-bit Unicode-Wert)
- byte (8 bit, Zweierkomplement-Darstellung)
- short (16-Bit Ganzzahl, Zweierkomplement-Darstellung)
- int (32-Bit Ganzzahl, Zweierkomplement-Darstellung)
- long (64-Bit Ganzzahl, Zweierkomplement-Darstellung)
- float (Gleitkommazahl 32 Bit, IEEE 754 )
- double (Gleitkommazahl 64 Bit, IEEE 754
Beispiele für literale Werte:
- 'c' char
- true boolean
- false boolean
- 123 int
- 5230L long
- 12.730 double
- 12.730D double
- 12.730F float
- 12.730e3 double
Für die primitiven Typen existieren in Java entsprechende Wrapperklassen zum Instanzieren von Objekten.
Abgrenzung zu anderen Sprachen
Javascript
Java ist nicht mit der Programmiersprache JavaScript zu verwechseln, die ebenfalls in Web-Browsern verwendet wird. Sie hat eine ähnliche Syntax, kennt aber keine Vererbung. Objekte werden in JavaScript prototypenbasiert definiert. JavaScript ist, wie der Name sagt, eine reine scriptbasierte Sprache. Es existieren Implementationen vor allem in Web-Browsern, aber auch alleinstehende Ausführungsumgebungen sind vorhanden
C#
C# kann als Kampfansage von Microsoft an Java gesehen werden. Mit der Spezifikation von C# hat Microsoft versucht, den Spagat zu schaffen zwischen dem kompletten Neuanfang einer Sprache und der leichten Integration bisher bestehender Komponenten und Wissens. Die Syntax von C# ist Java sehr ähnlich, konzeptuelle Unterschiede sind auch gering. Ein wichtiger Unterschied ist, dass C# keine Primitivtypen kennt, das heißt alles ist ein Objekt. In C# kann man auch Objekte und Methoden mit Attributen auszeichnen, um sie mit Funktionalität anzureichern.
Versionen
- JDK 1.0, 1996
- JDK 1.1, 1997
- JDK 1.2, 1998 (ab diesem Zeitpunkt spricht man von der Java 2 Plattform)
- JDK 1.3, 2000
- JDK 1.4, 2002
Siehe auch
Weblinks
- Download Java
- The Java Language Specification Download - Online-Fassung
- Deutsches Javabuch (in elektronischer Form, komplett)
- Die deutsche Java-Newsgroup (mit Google)
- Java Benutzergruppe Stuttgart Wiki
- www.javasoft.com
- www.cetus-links.org
- java.sun.com
- http://java.sun.com/getjava aktuelle Java Laufzeitumgebung installieren
- Deutsches Software Entwickler Wiki Java Ressourcen
- Eclipse (Open source Entwicklungsumgebung für Java)
- NetBeans (Open source Entwicklungsumgebung für Java)
- Thinking in Java (Elektronisches Buch über Java, englisch)