Anhang G: Java – eine Übersicht

von Laura Lemay und Stephen Le Hunte

Java wurde von Sun Microsystems entwickelt; es handelt sich dabei um eine plattformunabhängige Programmiersprache, mit der man innerhalb von Web-Seiten einen ausführbaren Inhalt erzeugen kann. Java basiert auf C++ und ist eine vollausgestattete Programmiersprache, die als solche ernst genommen werden sollte. Wenn man sie beherrscht, kann sie sich als ebenso unbegrenzt und mächtig herausstellen wie die Vorstellungskraft des Programmierers. Tatsächlich gibt es Stimmen, die soweit gehen und behaupten, daß die Software-Industrie ernsthaft bedroht ist, da in wenigen Jahren alle Programme die Form von Applets annehmen werden, die heruntergeladen werden, wenn sie benötigt werden.

Sowohl der Netscape Navigator als auch der Microsoft Internet Explorer unterstützen ausführbaren Inhalt. Sie können Live-Audio, Animationen oder Programme in Ihre Web-Seiten aufnehmen. Die Applets sind bereits kompiliert und werden in die HTML-Seiten eingebunden. 

Hinweis Die hier gegebenen Informationen beschreiben nur die notwendigen HTML-Elemente, die es Ihnen ermöglichen, Ihren HTML-Dokumenten bereits kompilierte Java-Applets hinzuzufügen. Sie beschreiben jedoch nicht, wie Sie die Java-Applets tatsächlich schreiben. Dies geht weit über den Rahmen dieses Anhangs hinaus. Für mehr Informationen über das Schreiben von Java-Code besorgen Sie sich Java 1.1 in 21 Tagen (vom Sams-Verlag); eine Kopie des Java-Entwicklungskits erhalten sie unter: http://java.sun.com/
 
Dieser Anhang bietet eine Übersicht darüber, wie Sie Java-Applets in Ihre Seiten einbeziehen können, eine Übersicht über die Sprache Java.

<APPLET>: Ein Applet einfügen

 
Hinweis Der Internet Explorer unterstützt die Integration von Java-Applets mit dem <OBJECT>-Mechanismus zur Einfügung von Objekten.
 Um ein Applet in eine HTML-Seite aufzunehmen, müssen Sie das <APPLET>-HTML-Tag verwenden, zum Beispiel:
<APPLET CODE="Applet.class" WIDTH=200 HEIGHT=150>
</APPLET>
Dieses Beispiel weist den Viewer oder den Browser an, das Applet zu laden, dessen kompilierter Code sich in Applet.class befindet (in demselben Verzeichnis wie das aktuelle HTML-Dokument), und die Anfangsdimensionen des Applets auf eine Breite von 200 Pixeln und eine Höhe 150 Pixeln zu setzen. (Das <APPLET>-Tag unterstützt standard Bild-Attribute, wie noch später in diese Anhang erklärt wird).

Hier folgt ein etwas komplexeres Beispiel mit dem <APPLET>-Tag:

<APPLET CODEBASE="http://java.sun.com/JDK-prebeta1/applets/NervousText"
CODE="NervousText.class" width=400 height=75 align=center >
<PARAM NAME="text" VALUE="This is the Applet Viewer.">
<BLOCKQUOTE>
<HR>
Wenn Sie einen Java-fähigen Browser benutzen würden, sähen Sie tanzenden Text anstelle dieses Absatzes.
<HR>
</BLOCKQUOTE>
</APPLET>
Dieser Code weist den Viewer oder Browser an, folgendes zu tun: Der Viewer/Browser soll auch dem text-Attribut des Applets den Wert »This is the Applet Viewer« zuweisen. (Dieser Parameter legt den Text fest, den das Applet darstellt.) Wenn die Seite von einem Browser angezeigt wird, der keine Java-Applets ausführen kann, ignoriert er die <APPLET>- und <PARAM>-Tags und stellt nur den HTML-Code zwischen den <BLOCKQUOTE>- und </BLOCKQUOTE>-Tags dar.

Die vollständige Syntax für das Beispiel mit dem <APPLET>-Tag sieht wie folgt aus:

<APPLET
[CODEBASE = URL]
CODE = appletFile
[ALT = alternateText]
[NAME = appletInstanceName]
WIDTH = pixels HEIGHT = pixels
[ALIGN = alignment]
[VSPACE = pixels] [HSPACE = pixels]
>
[<PARAM NAME = appletAttribute1 VALUE = value>]
[<PARAM NAME = appletAttribute2 VALUE = value>]
. . .
[alternateHTML]
</APPLET>
Die <APPLET>-Attribute werden in alphabetischer Reihenfolge präsentiert, und jedes wird kurz in den folgenden Abschnitten besprochen.

HTML 4.0 führt das <OBJECT>-Tag ein. Dieses Tag hat die Aufgabe Java-Applets, ActiveX-Controls, Plug-In-Daten und andere externe Daten zu integrieren. Dieses Tag wurde bereits eingeschränkt von Browsern in unterschiedlicher Weise unterstützt. Mit HTML 4.0 wird dieses Tag zum De-facto Standard. Das <OBJECT>-Tag wird eventuell das <APPLET>-Tag ersetzen.

ALIGN = Ausrichtung

Dieses zwingend erforderliche Attribut spezifiziert die Ausrichtung des Applet. Die möglichen Werte dieses Attributs sind die gleichen wie beim IMG-Tag: left, right, top, texttop, middle, absmiddle, baseline, bottom und absbottom
Attribut Beschreibung
ALT = alternativerText Dieses optionale Attribut spezifiziert den Text, der dargestellt werden soll, wenn der Browser zwar das <APPLET>-Tag versteht, aber keine Applets ausführen kann, die in Java geschrieben wurden. 
CODE = AppletDatei  Dieses zwingend erforderliche Attribut gibt den Namen der Datei an, die die kompilierte Applet-Subklasse des Applets enthält. Diese Datei ist relativ zur Basis-URL des Applets. Sie darf nicht absolut sein.
CODEBASE = URL Dieses optionale Attribut spezifiziert die Basis-URL des Applets – das Verzeichnis, das den Applet-Code enthält. Wenn dieses Attribut nicht bestimmt wird, wird die URL des Dokuments verwendet.
NAME = AppletInstanzName Dieses optionale Attribut spezifiziert einen Namen für die Appletinstanz, wodurch es den Applets auf derselben Seite ermöglicht wird, miteinander zu kommunizieren.
<PARAM NAME = AppletAttribut1 VALUE = Wert> Dieses Tag stellt die einzige Möglichkeit dar, wie einem Applet Parameter übergeben werden können. Applets greifen auf ihre Parameter mit der getParameter()-Methode zu.
WIDTH = Pixel HEIGHT = Pixel Dieses zwingend erforderliche Attribut gib die anfängliche Breite und Höhe des Applet-Display-Bereichs an (in Pixeln), wobei etwaige Fenster oder Dialogfelder, die vom Applet angezeigt werden, nicht mitgerechnet werden.
VSPACE = Pixel HSPACE = Pixel
Diese optionalen Attribute legen die Anzahl der Pixel über und unter dem Applet (VSPACE) und auf beiden Seiten des Applets (HSPACE) fest. Sie werden genauso behandelt wie die VSPACE- und HSPACE-Attribute des IMG-Tags.
 

Kurzüberblick

Dieser Abschnitt bietet einen kurzen Überblick über die Programmiersprache Java. 
Hinweis Dies ist weder ein grammatikalischer noch ein technischer Überblick über die Sprache. Es ist vielmehr eine kurze Übersicht, die Sie verwenden können, wenn Sie die Grundlagen der Sprache bereits kennen. Wenn Sie eine technische Beschreibung der Sprache benötigen, besuchen Sie am besten die Java-Web-Site (http://java.sun.com) und laden sich die Spezifikation von Java herunter. Dort finden Sie auch eine vollständige BNF-Grammatik.
 Schlüsselwörter der Sprache und Symbole werden in einer nichtproportionalen Schrift dargestellt. Argumente und andere Teile, die variabel sind werden können, werden in kursiver, nicht-proportionaler Schrift dargestellt.

Optionale Komponenten werden durch eckige Klammern ([ ]) angezeigt, ausgenommen in dem Abschnitt über die Array-Syntax. Wenn verschiedene Optionen aufgeführt werden, die sich gegenseitig ausschließen, werden sie durch ein Pipe-Zeichen (¦) getrennt, so wie im folgenden:

[public¦private¦protected] Typ Varname

Reservierte Wörter

Die folgenden Wörter sind für die Verwendung durch die Java-Sprache selbst reserviert (einige von ihnen sind zwar reserviert, finden momentan aber keine Verwendung). Sie können diese Wörter nicht zur benennung von Klassen, Methoden oder Variablen verwenden. 
abstract double int static
boolean else interface super
break extends long switch
byte final native synchronized
case finally new this
catch float null throw
char for package throws
class goto private transient
const if protected try
continue implements public void
default import return volatile
do instanceof short while
 

Kommentare

Im Anschluß sehen Sie die in Java gültigen Kommentare:
/* dies ist ein mehrzeiliger Kommentar */
// dies ist ein einzeiliger Kommentar
/** Dies ist ein Javadoc-Kommentar */

Literale

 
Zahl
Typ int
Zahl [l ¦ L]
Typ long
0xhex  Hex Integer
0Xhex  Hex Integer
0octal  Oktal Integer
[Zahl].Zahl Typ double
Zahl[f¦F] Typ float
Zahl[d¦D] Typ double
[+¦-] Zahl Mit Vorzeichen
ZahleZahl Exponent
ZahlEZahl Exponent
'Zeichen'  Einzelnes Zeichen
"String" Zeichenkette
"" Leere Zeichenkette
\b Rückschritt
\t Tabulator
\n Zeilenvorschub
\f Blattvorschub
\r Carriage Return
\" Doppeltes Anführungszeichen
\' Einfaches Anführungszeichen
\\ Backslash
\uNNNN Unicode-escape (NNNN ist hex-Format)
true Boolesch
false Boolesch
 

Variablendeklaration

 
[byte¦short¦int¦long] Varname Ganzzahlen (einen Typ auswählen)
[float¦double] Varname Gleitpunktzahlen (einen Typ auswählen)
char Varname Zeichen
boolean Varname Boolesch
Klassenname Varname Klassentypen
Typ Varname1, Varname2, Varname3 Mehrere Variablen
 Die folgenden Optionen sind nur für Klassen- und Instanzvariablen verfügbar und können in einer Variablendeklaration benutzt werden: 
[static] Variablendeklaration Klassenvariable
[final] Variablendeklaration Konstanten
[public¦private¦protected] Variablendeklaration Zugriffskontrolle
 

Variablenzuweisung

 
Variable = Wert Zuweisung
Variable++ Postfix-Inkrement
++Variable Präfix-Inkrement
Variable Postfix-Dekrement
Variable Präfix-Dekrement
Variable += Wert Addieren und zuweisen
Variable -= Wert Subtrahieren und zuweisen
Variable *= Wert Multiplizieren und zuweisen
Variable /= Wert Dividieren und zuweisen
Variable %= Wert Modulo und zuweisen
Variable &= Wert AND und zuweisen
Variable ¦= Wert OR und zuweisen
Variable ^= Wert XOR und zuweisen
Variable <<= Wert Nach links verschieben und zuweisen
Variable >>= Wert Nach rechts verschieben und zuweisen
Variable <<<= Wert Mit Nullen auffüllen, nach rechts verschieben und zuweisen
 

Operatoren

 
Arg + Arg Addition
ArgArg Subtraktion
Arg * Arg Multiplikation
Arg / Arg Division
Arg % Arg Modulus
Arg < Arg Kleiner als
Arg > Arg Größer als
Arg <= Arg Kleiner als oder gleich
Arg >= Arg Größer als oder gleich
Arg == Arg Gleich
Arg != Arg Nicht gleich
Arg && Arg Logisches AND
Arg ¦¦ Arg Logisches OR
! Arg Logisches NOT
Arg & Arg AND
Arg ¦ Arg OR
Arg ^ Arg XOR
Arg << Arg Nach links verschieben
Arg >> Arg Nach rechts verschieben
Arg >>> Arg Mit Nullen auffüllen und nach rechts verschieben
~ Arg Komplement
(Typ)etwas Umwandlung
Arg instanceof Klasse Instanz von
Test ? trueOp : falseOp Ternärer (if) Operator
 

Objekte

 
new Klasse(); Neue Instanz erstellen
new Klasse(Arg,Arg,Arg...) Neue Instanz mit Parametern
new Typ(Arg,Arg,Arg...) Eine neue Instanz einer anonymen Klasse erstellen
Primary.new Typ(Arg,Arg,Arg...) Eine neue Instanz einer anonymen Klasse erstellen
Objekt.Variable Instanzvariable
Objekt.Klassenvar Klassenvariable
Klasse.Klassenvar Klassenvariable
Objekt.Methode() Instanzmethode (ohne Argumente)
Objekt.Methode(Arg,Arg,Arg...) Instanzmethode
Objekt.Klassenmethode() Klassenmethode (ohne Argumente)
Objekt.Klassenmethode(Arg,Arg,Arg...) Klassenmethode
Klasse.Klassenmethode() Klassenmethode (ohne Argumente)
Klasse.Klassenmethode(Arg,Arg,Arg...) Klassenmethode
 

Arrays

Die eckigen Klammern in diesem Abschnitt sind Teil des Arrays bzw. der Zugriffsanweisungen und keine alternativen Optionen wie in den vorherigen Abschnitten. 
Typ Varname[] Array-Variable
Typ[] Varname Array-Variable
new Typ[AnzElemente] Neues Array-Objekt
Array[Index] Elementzugriff
Array.length Array-Länge
 

Schleifen und Bedingungen

 
if (Test) Block Bedingung
if (Test) Block 
else Block
Bedingung mit else
switch (Test) { 
case Wert : Anweisungen 
case Wert : Anweisungen 
... 
default : Anweisungen 
}
switch (nur für int- oder char-Typen)
for (Initialisierung; Test; Veraenderung) Block for-Schleife
while (Test) Block while-Schleife
do Block 
while (Test)
do-Schleife
break [Label] break von Schleife oder switch
continue [Label] Kontinuierliche Schleife
Label: Benannte Schleife
 

Klassendefinitionen

 
class Klassenname Block Einfache Klassendefinition
 Die folgenden optionalen Modifier können in die Klassendefinition eingefügt werden: 
[final] class Klassenname Block Keine Subklassen erlaubt
[abstract] class Klassenname Block
Keine Instanzen erlaubt
[public] class Klassenname Block Zugriff außerhalb des Pakets
class Klassenname [extends Superklasse] Block Superklasse definieren
class Klassenname [implements Schnittstellen] Block Eine oder mehrere Schnittstellen implementieren
 

Methoden- und Konstruktor-Definitionen

Die Basismethode sieht wie folgt aus, wobei RueckgabeTyp ein Typname, ein Klassenname oder void ist. 
RueckgabeTyp MethodenName() Block  Basismethode
RueckgabeTyp MethodenName(Parameter1, Parameter2, ...) Block Methode mit Parametern
 Methodenparameter sehen so aus:

Typ ParameterName

Methodenvariationen können eines der folgenden optionalen Schlüsselwörter enthalten: 

[abstract] RueckgabeTyp MethodenName() Block Abstrakte Methode
[static] RueckgabeTyp MethodenName() Block Klassenmethode
[native] RueckgabeTyp MethodenName() Block Native Methode
[final] RueckgabeTyp MethodenName() Block final-Methode
[synchronized] RueckgabeTyp MethodenName() Block Thread-Sperre vor Ausführung
[public¦private¦protected] RueckgabeTyp MethodenName() Blockzugriffskontrolle
 Konstruktoren sehen wie folgt aus: 
Klassenname() Block Basis-Konstruktor
Klassenname(Parameter1, Parameter2, Parameter3...) Block Konstruktor mit Parametern
[public|private|protected] Klassenname() Block Zugriffskontrolle
 Im Methoden-/Konstruktor-Rumpf können folgende Referenzen und Methoden verwendet werden: 
this Verweist auf das aktuelle Objekt
super Verweist auf die Superklasse
super.Methodenname() Ruft die Methode einer Superklasse auf
this(...) Ruft den Konstruktor einer Klasse auf
super(...) Ruft den Konstruktor der Superklasse auf
return [Wert] Gibt einen Wert aus
 

Pakete, Schnittstellen und Importieren

 
import Paket.Klassenname Importiert den spezifischen Klassennamen
import Paket.* Importiert alle Klassen im Paket
package Paketname Klassen in dieser Datei gehören zu diesem Paket
interface Schnittstellenname [extends AndereSchnittstelle] Block  
[public] interface Schnittstellenname Block  
[abstract] interface Schnittstellenname Block  
 

Ausnahmen und Schutz

 
synchronized (Objekt) Block Wartet auf Sperre von Objekt
try block Geschützte Anweisungen
catch (Exception) Block Wird im Fall vom Auftreten von Exception ausgeführt
[finally Block] Wird immer ausgeführt – egal, was passiert
try Block [catch (Exception) Block] finally Block Wie im vorigen Beispiel (kann wahlweise catch oder finally, jedoch nicht beide benutzen)