Kurzeinstieg Java: Schlüsselwörter
Die folgenden Schlüsselwörter sind in Java reserviert und dürfen nicht für Variablenbezeichner verwendet werden:
abstract
assert
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
enum
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
strictfp
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
Die Schlüsselworte const
und goto
werden nicht verwendet.
Komplexe Typen
[Bearbeiten]Java kennt auch die Definition eigener Typen. Dabei gibt es vier verschiedene Arten eigener Typen: Klassen, Schnittstellen, Aufzählungstypen und Annotationen.
Klassen: class
[Bearbeiten]Eine Klasse wird mit dem Schlüsselwort class
definiert. Klassen, die an hierarchisch oberster Stelle in einem Quelltext stehen, heißen nicht-geschachtelte Top-Level-Klassen. Klassen, die in einer anderen Klasse definiert sind, heißen geschachtelte Klassen.
Eine geschachtelte Klasse, die als static
deklariert wurde, heißt geschachtelte Top-Level-Klasse. Eine geschachtelte Klasse, die nicht als static
deklariert wurde, heißt innere Klasse.
Eine Klasse, die in einer Methode definiert wurde, heißt lokale Klasse.
Darüberhinaus besteht auch die Möglichkeit, für die einmalige Verwendung Klassen ohne Namen und ohne das Schlüsselwort class
zu deklarieren. Solche Klassen heißen anonyme Klassen.
Nicht-geschachtelte Top-Level-Klassen sind der Regel-Fall. Wenn es sich bei einer Klasse um eine nicht-geschachtelte Top-Level-Klasse handelt, darf die Klasse nur die Zugreifbarkeit public
oder package default besitzen und außerdem nicht als static
deklariert werden. Eine nicht-geschachtelte Top-Level-Klasse, die als public
deklariert ist, muss zudem genauso heißen wie die Quelltext-Datei, inklusive Berücksichtigung der Groß- und Kleinschreibung. Das gilt auch unter Betriebssystemen, die eigentlich nicht zwischen Groß- und Kleinschreibung unterscheiden, wie z.B. Microsoft Windows.
Geschachtelte Klassen dürfen jede Zugreifbarkeit tragen.
Sämtliche Klassen dürfen als entweder abstract
, final
oder keines von beidem, nicht jedoch beides zugleich deklariert werden. Eine als abstract
deklarierte Klasse heißt abstrakte Klasse, eine als final
deklarierte Klasse heißt finale Klasse.
Es ist nicht möglich, abstrakte Klassen zu instanzieren. Stattdessen muss man sich eine geeignete Subklasse suchen oder selbst schreiben.
Es ist nicht möglich, eine Subklasse einer finalen Klasse zu bilden.
Schnittstellen (Interfaces): interface
[Bearbeiten]Eine Schnittstelle ist eine vollständig abstrakte Klasse. Da eine vollständig abstrakte Klasse keine Schwierigkeiten für die Implementierung in Bezug auf Mehrfachvererbung mit sich bringen kann, gestattet Java die Mehrfachvererbung nur in Bezug auf Interfaces. Um dies konsequent zu gewährleisten, unterscheidet Java streng zwischen Klassen und Interfaces.
Ein Interface kann keine Konstruktoren und somit auch keine Instanzinitialisierer enthalten.
Methoden in Interfaces sind automatisch public
und abstract
. Sie dürfen keine andere Zugreifbarkeit als public
haben. Sie dürfen nicht final
, static
oder native
sein.
Variablen in Interfaces sind automatisch public
, static
und final
. Sie dürfen keine andere Zugreifbarkeit als public
haben.
Ansonsten gilt für Interfaces das gleiche wie für Klassen. Interfaces können also auch Typen, z.B. innere Klassen enthalten.
Annotationen (Annotations): @interface
[Bearbeiten]Eine Annotation ist eine spezielle Schnittstelle für die Hinterlegung von Informationen über Java-Programme. Annotationen sind mit der Version 5.0 in Java eingeführt worden und werden hauptsächlich zur Ergänzung der Möglichkeiten von Reflection und zur Code-Generierung verwendet.
Für Annotationen gelten vergleichbar strenge Regeln wie für Interfaces.
Aufzählungstypen (Enumerations): enum
[Bearbeiten]null
[Bearbeiten]null
ist kein Schlüsselwort im eigentlichen Sinn sondern ein Literal. Es dient dir dazu den Wert einer komplexen Datentyps zu setzen oder zu prüfen. Es handelt sich insoweit jedoch um einen Bezeichner, welchen du nicht vergeben kannst.
void
[Bearbeiten]void
wird verwendet um bei der Signatur einer Methode den Rückgabetyp leer zu deklarieren.
public void ichHabeKeineRueckgabe () {}
package
[Bearbeiten]package
deklariert die Paketzugehörigkeit eines komplexen Datentyps. Die Namensgebung eines Pakets sollte eindeutig sein und orientiert sich meist an der URI/URL des Eigentümers bzw. Erstellers. Bei einer Paket angabe handelt es sich grds. um die erste Anweisung in einem Java Quelltext.
package org.wikibooks.de;
import
[Bearbeiten]import
importiert komplexe Typen, so dass sie ohne voll qualifizierten Namen verwendet werden können. Es können durch Nutzung des Wildcard *
auch alle komplexen Typen eines Pakets importiert werden.
import javax.swing.JFrame; import java.awt.*; public class ImportBeispiel { public ImportBeispiel () { JFrame swingFenster = new JFrame (); // Verwendung mit einfachen import javax.swing.JMenuBar swingMenueZeile = new javax.swing.JMenuBar (); // Verwendung ohne import
// Verwendung mit Wildcard import Frame awtFenster = new Frame (); MenuBar awtMenueZeile = new MenuBar (); } }
Seit Java 5.0 können auch statische Member von Klassen importiert werden.