.JAVA GLOSSAR S


TOC
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z


S

Sandbox
Das Sandbox-Konzept
Traditionell wurde in Java zwischen lokalem Code und solchem, der aus dem Netz geladen wird, bezüglich seiner Sicherheitsanforderungen rigoros unterschieden. Während lokalem Code (also Applikationen und von der Festplatte geladenen Applets) der Zugriff auf alle verfügbaren Ressourcen gestattet ist, dürfen Applets, die aus dem Netz geladen wurden, nur einen kleinen Teil davon verwenden. Sie halten sich gewissermaßen in einem Sandkasten auf, in dem sie nur ungefährliche Spielzeuge verwenden und keinen ernsthaften Schaden anrichten können (daher der Name »Sandbox«).

Zu den "gefährlichen Spielzeugen", die nicht verwendet werden dürfen, zählen:

· der lesende und schreibende Zugriff auf Dateien des lokalen Computers,

· das Öffnen von TCP/IP-Verbindungen zu einem anderen als dem Host, von dem das Applet geladen wurde,

· das Akzeptieren von TCP/IP-Verbindungen auf privilegierten Portnummern,

· das Lesen benutzerbezogener System-Properties wie "user.name", "user.home", "user.dir" oder "java.home",

· das Erzeugen eines Top-Level-Fensters ohne Warnhinweis,

· das Ausführen externer Programme,

· das Laden von System-Libraries,

· das Beenden der virtuellen Maschine.

Benötigte ein Applet Zugriff auf diese Ressourcen, gab es im JDK 1.0 die Möglichkeit, die zugehörigen Dateien auf der lokalen Festplatte abzulegen. Denn wenn das Applet zur Ausführung nicht aus dem Netz, sondern aus den lokalen Dateien gestartet wurde, galt es automatisch als vertrauenswürdig und hatte Zugriff auf alle ansonsten verbotenen Ressourcen.

[Serialisierung]
[Persistenz]


 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Serialisierung

Unter Serialisierung wollen wir die Fähigkeit verstehen, ein Objekt, das im Hauptspeicher der Anwendung existiert, in ein Format zu konvertieren, das es erlaubt, das Objekt in eine Datei zu schreiben oder über eine Netzwerkverbindung zu transportieren. Dabei wollen wir natürlich auch den umgekehrten Weg einschließen, also das Rekonstruieren eines in serialisierter Form vorliegenden Objekts in das interne Format der laufenden Java-Maschine. [Persistenz]

 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Servlet-API
 
Zeitgleich zur Diskussion um die Eignung Javas als Entwicklungswerkzeug für grafische Oberflächen hat sich bereits ein Wandel auf der Serverseite angedeutet. Mit dem Servlet-API und den Java Server Pages haben sich beispielsweise im Bereich der Generierung dynamischer Web-Seiten Techniken etabliert, die dem traditionellen CGI-Scripting starke Konkurrenz machen. Daneben setzen große Softwarehersteller auf mehrschichtige Client-Server-Architekturen mit Java-Unterstützung (Oracle Financials, Star Office) oder statten ihre Datenbank- oder Web-Server mit Java-Fähigkeiten aus (Oracle 8, Lotus Domino, SUN Java Web Server, Apache jserv). In vielen Unternehmen gibt es bereits verteilte Anwendungen auf der Basis von CORBA, die auf die plattformübergreifenden Fähigkeiten und die Binärkompatibilität von Java-Anwendungen setzen.

 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Signatur
Signatur einer Methode
Innerhalb einer Methode kann ein Name in verschiedenen Bedeutungen verwendet werden. Erstens kann der Name die Methode selbst sein. Zweitens kann eine lokale Variable definiert werden, um drittens den Rückgabewert der parameterlosen Version der Methode aufzunehmen. Der Compiler kann die Namen in allen drei Fällen unterscheiden, denn er arbeitet mit der Signatur der Methode. Unter der Signatur einer Methode versteht man ihren internen Namen. Dieser setzt sich aus dem nach außen sichtbaren Namen plus codierter Information über die Reihenfolge und Typen der formalen Parameter zusammen. Die Signaturen zweier gleichnamiger Methoden sind also immer dann unterscheidbar, wenn sie sich wenigstens in einem Parameter voneinander unterscheiden.

 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Standard-Sichtbarkeit
[ package scoped ] | [ private ]
Elemente, die ohne einen der drei bekannten Modifier deklariert wurden, werden als package scoped oder Elemente mit Standard-Sichtbarkeit bezeichnet. Sie sind nur innerhalb des Pakets sichtbar, zu dem diese Klasse gehört. In anderen Paketen sind sie dagegen unsichtbar.

 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


static
Statische Konstruktoren, Methoden, Variablen
Variablen und Methoden mit dem Attribut static sind nicht an die Existenz eines konkreten Objekts gebunden, sondern existieren vom Laden der Klasse bis zum Beenden des Programms. Das static-Attribut beeinflusst bei Membervariablen ihre Lebensdauer und erlaubt bei Methoden den Aufruf, ohne dass der Aufrufer ein Objekt der Klasse besitzt, in der die Methode definiert wurde. Wird das Attribut static nicht verwendet, so sind Variablen innerhalb einer Klasse immer an eine konkrete Instanz gebunden. Ihre Lebensdauer beginnt mit dem Anlegen des Objekts und dem Aufruf eines Konstruktors und endet mit der Freigabe des Objekts durch den Garbage Collector. [Klassenmethoden, Klassenvariablen]

 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Statische Konstruktoren
static
Nicht nur statischen Variablen kann während der Deklaration ein Wert zugewiesen werden. Falls komplexere Initialisierungen benötigt werden, können zur Initialisierung von statischen Variablen statische Konstruktoren definiert werden. Sie ähneln gewöhnlichen Konstruktoren und dienen wie diese dazu, Variablen mit einem definierten Startwert zu belegen. Im Gegensatz zu einem gewöhnlichen Konstruktor erfolgt der Aufruf eines statischen Konstruktors aber nicht mit jedem neu angelegten Objekt, sondern nur einmal, wenn die Klasse geladen wird.

Es ist erlaubt, mehrere statische Konstruktoren innerhalb einer Klasse zu definieren. Sie werden dann nacheinander in der textuellen Reihenfolge ihrer Deklaration ausgeführt. Wechseln sich initialisierte statische Variablen und statische Konstruktoren im Quelltext ab, werden beide gleichwertig behandelt, d.h. die Ausführung erfolgt unabhängig vom Typ in textueller Reihenfolge. Eine Ausnahme bilden lediglich die statischen Variablen, denen Konstanten zugewiesen werden, deren Wert bereits zur Compile-Zeit feststeht. Ihre Initialisierung erfolgt - unabhängig von ihrer Position im Quellcode - unmittelbar nach dem Laden der Klasse.

 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Statische Methoden
Klassenmethoden, static
Neben Klassenvariablen gibt es in Java auch Klassenmethoden, d.h. Methoden, die unabhängig von einer bestimmten Instanz existieren. Sie werden auch als statische Methoden bezeichnet. Klassenmethoden werden ebenfalls mit Hilfe des static-Attributs deklariert und - analog zu Klassenvariablen - durch Voranstellen des Klassennamens aufgerufen.

 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Statische Variablen
Klassenvariablen, static
Java ist eine konsequent objektorientierte Sprache, in der es weder globale Funktionen noch globale Variablen gibt. Da es aber mitunter sinnvoll ist, Eigenschaften zu verwenden, die nicht an Instanzen einer Klasse gebunden sind, haben die Sprachdesigner das Attribut static für Methoden und Variablen eingeführt. Eine Variable, die innerhalb einer Klasse mit dem Attribut static versehen wurde, nennt man Klassenvariable (oder auch Statische Variable). Im Gegensatz zu Instanzvariablen, die immer an ein konkretes Objekt gebunden sind, existieren Klassenvariablen unabhängig von einem Objekt.

 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


String
Datentyp
Eines der wichtigsten Elemente der Klassenbibliothek ist die Klasse String, die Java-Implementierung von Zeichenketten. String bietet eine Vielzahl wichtiger Methoden zur Manipulation und zum Zugriff auf Zeichenketten, wie beispielsweise Operationen für numerische Konvertierungen, Zeichen- und Teilstringextraktion sowie für Textsuche und Stringvergleich.

Die Klasse String ist zwar wie eine gewöhnliche Klasse in der Laufzeitbibliothek von Java vorhanden. Der Compiler hat aber Kenntnisse über den inneren Aufbau von Strings und generiert bei Stringoperationen Code, der auf Methoden der Klassen String und StringBuffer zugreift.

Wie in allen anderen Programmiersprachen gibt es auch in Java Zeichenketten. Ähnlich wie in C und C++ kennt der Compiler nur einige ihrer elementaren Eigenschaften und überlässt der Laufzeitbibliothek einen Großteil der Implementierung.

In Java werden Zeichenketten durch die Klasse String repräsentiert. Sie bietet Methoden zum Erzeugen von Zeichenketten, zur Extraktion von Teilstrings, zum Vergleich mit anderen Strings und zur Erzeugung von Strings aus primitiven Typen. Der Compiler erkennt und interpretiert String-Literale und ist in der Lage, String-Objekte zu erzeugen und zu verketten.

Eine Zeichenkette hat in Java prinzipiell dieselbe Bedeutung wie in anderen Sprachen. Als Reihung von Elementen des Typs char ist sie die wichtigste Datenstruktur für alle Aufgaben, die etwas mit der Ein- und Ausgabe oder der Verarbeitung von Zeichen zu tun haben. Da der char-Typ in Java durch ein Unicode-Zeichen repräsentiert wird, besteht auch ein String aus einer Kette von Unicode-Zeichen. Abgesehen davon, dass er dadurch doppelt soviel Speicher belegt wie ein ASCII-String, braucht man sich darüber aber nicht allzu viele Gedanken zu machen. Wegen der Kompatibilität zwischen Unicode-Standard und ASCII-Zeichensatz sind die Unterschiede bei der normalen Verwendung von Strings ohne Belang.

Anders als in C braucht der Java-Programmierer keine Kenntnisse über den internen Aufbau von Strings zu haben. Insbesondere ist nicht davon auszugehen, dass ein String durch ein nullterminiertes Array von char-Elementen dargestellt wird. Natürlich heißt dies nicht, dass die interne Struktur von Strings vollkommen anonym ist, denn sowohl Compiler als auch Laufzeitsystem müssen sie kennen. Für den Programmierer, der lediglich Java-Programme schreiben will, ist sie aber bedeutungslos.


 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Stub
 
Bei der Kommunikation mit RMI hat der Client den Eindruck, Methoden von Objekten aufzurufen, die auf dem Server liegen. In Wirklichkeit liegen die Dinge natürlich etwas komplizierter, denn der Client hat von der RMI-Registry lediglich ein Stub-Objekt erhalten, und das Remote-Objekt hat den Server nicht wirklich verlassen. Ein Stub ist eine Klasse, die - wie das implementierende Remote-Objekt - das Remote-Interface implementiert und daher für den Client als Platzhalter für den Zugriff auf das Remote-Objekt dient.

Der Stub kommuniziert über eine TCP-Verbindung mit dem als Skeleton bezeichneten Gegenstück auf der Server-Seite. Das Skeleton kennt das tatsächliche Applikationsobjekt, leitet die Anfragen des Stubs an dieses weiter und gibt den Rückgabewert an ihn zurück. Stub und Skeleton werden während der Entwicklung mit Hilfe eines Tools generiert und verbergen die komplizierten Details der Kommunikation zwischen Server und Client.


 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


super
Superklassenkonstruktor
Falls als erste Anweisung innerhalb eines Konstruktors ein Aufruf der Methode super steht, wird dies als Aufruf des Superklassenkonstruktors interpretiert. super wird wie eine normale Methode verwendet und kann mit oder ohne Parameter aufgerufen werden. Der Aufruf muss natürlich zu einem in der Superklasse definierten Konstruktor passen.

Falls als erste Anweisung im Konstruktor kein Aufruf von super steht, setzt der Compiler an dieser Stelle einen impliziten Aufruf super(); ein und ruft damit den parameterlosen Konstruktor der Vaterklasse auf. Falls ein solcher Konstruktor in der Vaterklasse nicht definiert wurde, gibt es einen Compiler-Fehler. Das ist genau dann der Fall, wenn in der Superklassendeklaration lediglich parametrisierte Konstruktoren angegeben wurden und daher ein parameterloser default-Konstruktor nicht automatisch erzeugt wurde.

Alternativ zu diesen beiden Varianten, einen Superklassenkonstruktor aufzurufen, ist es auch erlaubt, mit Hilfe der this-Methode einen anderen Konstruktor der eigenen Klasse aufzurufen. Um die oben erwähnten Zusagen einzuhalten, muss dieser allerdings selbst direkt oder indirekt schließlich einen Superklassenkonstruktor aufrufen.


 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


switch
 
Die Ausdrücke in Java entsprechen weitgehend denen von C und C++. Java besitzt eine if-Anweisung, eine while-, do- und for-Schleife und ein switch-Statement. Es gibt die von C bekannten break- und continue-Anweisungen in normaler und mit einem Label versehenen Form. Letztere ermöglicht es, mehr als eine Schleifengrenze zu überspringen. Java besitzt allerdings kein allgemeines goto-Statement. Variablendeklarationen werden wie in C++ als Anweisungen angesehen und können an beliebiger Stelle innerhalb des Code-Parts eines Programms auftauchen.

Verzweigungen in Java dienen wie in allen Programmiersprachen dazu, bestimmte Programmteile nur beim Eintreten vorgegebener Bedingungen, die erst zur Laufzeit bekannt werden, auszuführen. An Verzweigungen bietet Java die if- und if-else-Anweisung sowie die switch-Anweisung.

Die switch-Anweisung ist eine Mehrfachverzweigung. Zunächst wird der Ausdruck ausdruck, der vom Typ byte, short, char oder int sein muß, ausgewertet. In Abhängigkeit vom Ergebnis wird dann die Sprungmarke angesprungen, deren Konstante mit dem Ergebnis des Ausdrucks übereinstimmt. Die Konstante und der Ausdruck müssen dabei zuweisungskompatibel sein.

Das optionale default-Label wird dann angesprungen, wenn keine passende Sprungmarke gefunden wird. Ist kein default-Label vorhanden und wird auch keine passende Sprungmarke gefunden, so wird keine der Anweisungen innerhalb der switch-Anweisung ausgeführt. Jede Konstante eines case-Labels darf nur einmal auftauchen. Das default-Label darf maximal einmal verwendet werden.

Nachdem ein case- oder default-Label angesprungen wurde, werden alle dahinterstehenden Anweisungen ausgeführt. Im Gegensatz zu Sprachen wie PASCAL erfolgt auch dann keine Unterbrechung, wenn das nächste Label erreicht wird. Wenn dies erwünscht ist, muss der Kontrollfluß wie in C und C++ mit Hilfe einer break-Anweisung unterbrochen werden. Jedes break innerhalb einer switch-Anweisung führt dazu, dass zum Ende der switch-Anweisung verzweigt wird.

Wie aus den bisherigen Ausführungen deutlich wurde, ist die Semantik der switch-Anweisung in Java der in C und C++ sehr ähnlich. Ein wichtiger Unterschied besteht darin, dass in Java alle Anweisungen, die unmittelbar innerhalb des switch liegen, case- oder default-Labels sein müssen. Der Trick, in switch-Anweisungen Schleifen zu packen, die sich über mehrere Labels erstrecken, funktioniert in Java nicht.


 Zum Seitenanfang ...  TO TOP   TO TOP  Zum Seitenanfang ... 


Swing
 
Das Swing Toolset stellt eine Reihe zusätzlicher Dialogelemente zur Verfügung und ermöglicht die Konstruktion sehr komplexer grafischer Oberflächen. Mit seinem Pluggable Look-and-Feel bietet es die Möglichkeit, das Look-and-Feel eines Programmes zur Laufzeit umzuschalten und den Bedürfnissen des jeweiligen Benutzers und den Fähigkeiten der Systemumgebung anzupassen.

Neben dem AWT gibt es eine zweite Bibliothek für die Gestaltung grafischer Benutzeroberflächen. Sie heißt Swing, ist seit dem JDK 1.1 als Add-On verfügbar und seit der Version 1.1 fester Bestandteil des Java Development Kit. Da Swing-Anwendungen in ihren Möglichkeiten weit über das hinausgehen, was das AWT bietet, werden heute die meisten GUI-Programme mit Swing geschrieben.



Quelle: Java - Glossary zusammengestellt aus „Go To Java 2“, Zweite Auflage, Addison Wesley, Version 2.0 © 2000 Guido Krüger