Declaration and Access Control


Write code that declares, constructs and initializes arrays of any base type using any of the permitted forms, both for declaration and for initialization.


Arrays sind geordnete Sammlung von Werten. Diese Werte können primitive Typen, Objekte oder auch wiederum Arrays sein. Alle Werte der Arrays müssen aber vom gleichen Typ sein.
Bei der Deklaration von Arrays können die eckigen Klammern vor dem Variablen oder auch dahinter platziert werden:

   int a[];

 oder

   int[] a;

Arrays werden mit dem Schlüsselwort new erzeugt. Sie müssen aber nicht initialisiert werden:

  int[] a = new int[10];

Bei der Erzeugung müssen Sie angeben, wieviele Werte dieses Array enthalten soll. Ein einmal erzeugtes Array kann nicht vergrössert oder verkleinert werden. Im oberen Beispiel werden in diesem Array 10 Integerwerte gespeichert.
Ausserdem wird das Array mit dem Defaultwert initialisiert:

Typ vom Element Wert
byte 0
short 0
char '\u0000'
int 0
long 0L
float 0.0f
double 0.0d
boolean false
Objekt null


Die Arrays können auch bei der Erzeugung mit Werten initialisiert werden:

  int a[] = new int{10,20,30,40,50};

Hier wird ein Array mit 5 Werten erzeugt.
Die Grösse des Arrays erhält man mit length. Beispiel: a.length gibt 5 zurück. Indices der Arrays fangen mit 0 an und der Datentyp von Index ist int. Mehrdimensionale Arrays werden wie eindimensionale Arrays erzeugt, mit dem Unterschied, dass hier zwei paar eckige Klammern sind:

  int a[][];
  int[] a[];
  int[][] a;

// deklariert drei 2-dimensionale Arrays vom Typ long.
  long[][] var1, var2, var3;
nach oben

Declare classes, inner classes, methods, instance variables static, variables and automatic (method local) variables, making appropriate use of all permitted modifiers (such as public final static abstract and so forth). State the significance of each of these modifiers both singly and in combination and state the effect of package relationships on declared items qualified by these modifiers


Um die Sichtbarkeit der Klassen, Methoden oder Variablen zu bestimmen, werden die Modifizierer(Bezeichner) verwendet.
public: Die Klasse ist ausserhalb des Pakets sichtbar, in dem sie definiert wurde. Die Methoden und die Variablen sind im Rahmen ihrer Lebensdauer überall sichtbar.

private: Methoden und Variablen sind nur in ihren Klassen sichtbar. Nicht mal die Subklassen haben Zugriff auf die Methoden und Variablen.

protected: Nur die Subklassen der protected-Klassen im gleichen Paket können auf Methoden und Variablen zugreifen.

default: Wenn kein Bezeichner angegeben ist, so wird es als default deklariert.Sie sind nur innerhalb des Pakets sichtbar, in dem sie definiert wurden. Ausserhalb ist auch Subklassen dieser Klasse der Zugriff nicht erlaubt.

Sichtbarkeit public protected default private
innerhalb der selben Klasse Ja Ja Ja Ja
Von einer Klasse im selben Paket Ja Ja Ja Nein
Von einer Klasse außerhalb des Pakets Ja Nein Nein Nein
Von einer Subklasse im selben Paket Ja Ja Ja Nein
Von einer Subklasse außerhalb des Pakets Ja Ja Nein Nein

abstract: Abstrakte Klassen dürfen nicht instanziiert werden. Die abgeleiteten Subklassen müssen die abstract-Methoden der Klasse implementieren. Eine Klasse muss als abstract definiert werden, wenn sie mindestens eine abstrakte Methode beinhaltet. Ferner kann aber eine Klasse abstract definiert werden, auch wenn sie keine abstrakte Methode beinhaltet. Abstrakte Methoden haben keine geschweiften Klammern. Sie werden mit ; abgeschlossen. Sie dürfen nicht zusammen mit final benutzt werden.

final: Die Klassen, die mit final definiert wurden, dürfen nicht abgeleitet werden. final-Methoden können von den Subklassen nicht überschrieben werden. final-Variablen können nicht verändert werden. Sie sind also Konstanten. Sie dürfen nicht zusammen mit abstract benutzt werden.

static: Diese Elemente existieren nur einmal. Ein mit static definiertes Element ist für alle Instanzen der Klasse zugreifbar, d.h. ändert eine Instanz den Wert dieses Elementes, so sehen alle anderen Instanzen den neuen Wert. Sie existieren vom Laden der Klasse bis zum Beenden des Programms. Mit static werden die klassenübergreifenden Konstanten definiert. Statische Methoden haben nur auf statische Variablen zugreifen. Sie haben kein this-Zeiger. Statische Initialisierungsblöcke werden ausgeführt, wenn die Klasse geladen wird. Sie können nicht überschrieben werden (A static method cannot be overriden to be non static in a child class). Aus nicht-statischen Methoden können durch Überschreiben keine statischen Methoden gemacht werden. Ferner können lokale Variablen nicht statisch deklariert werden.

native: Durch diesen Modifier Programmcode eingebunden werden, was in einer anderen Sprache geschrieben wurde. Sie werden mit einem Semikolon abgeschlossen und bestehen nur aus dem Methodenkopf.

transient: Diese Variablen werden beim Abspeichern des Zustandes eines Objekts nicht mit abgespeichert.

synchronized: wird angewendet bei Methoden, um sicherszustellen, dass eine Methode nie von zwei verschiedenen Threads gleichzeitig ausgeführt werden kann.

volatile: wird verwendet bei Programmen mit mehreren Threads. Alle Threads erhalten von der Variablen den korrekten Wert.

Modifizierer Klasse Methode Variable
final Ja Ja Ja
abstract Ja Ja Ja
static Nein Ja Ja
native Nein Ja Nein
transient Nein Nein Ja
volatile Nein Nein Ja
synchronized Nein Ja Nein

Innere Klassen
Es gibt vier verschiedene innere Klassen, die innerhalb einer anderen Klasse definiert werden. Sie werden auch als verschachtelte Klassen (nested classes) bezeichnet.

Statische Innere Klassen oder auch Statische Member Klassen Nicht-statische innere Klassen oder auch Memberklassen Lokale Klassen Anonyme Klassen
Entity Deklarations-kontext Zugrifs bezeichner benötigt äussere Instanz Direkter Zugriff auf äusseren Kontext static/non-static Mitglieder
Klasse auf Paketebene als Paketmitglied public oder default Nein N/A Beides
statische innere Klasse (static) statisches Klassenmitglied Alle Nein statische Mitglieder im äusseren Kontext Beides
nicht-statische innere Klasse nicht-statisches Klassenmitglied Alle Ja Alle Mitglieder im äusseren Kontext nur nicht-statische
lokale Klasse (statisch) in einem statischen Kontext Keine Nein statische Mitglieder im äusseren Kontext und lokale, finale Variablen nur nicht-statische
lokale Klassen (nicht-statisch) in einem nicht-statischen Kontext Keine Ja alle Mitglieder im äusseren Kontext und lokale, finale Variablen nur nicht-statische
anonyme Klassen (nicht-statisch) in einem nicht-statischen Kontext keine Ja alle Mitglieder im äusseren Kontext und lokale, finale Variablen nur nicht-statische
anonyme Klassen (statisch) in einem statischen Kontext keine Nein statische Mitglieder im äusseren Kontext und lokale finale Variablen nur nicht-statische
Interface auf Paketebene Paketmitglied public und default Nein N/A statische Variablen und nicht-statische Methodenprototypen


nach oben

For a given class, determine if a default constructor will be created and if so state the prototype of that constructor



nach oben

State the legal return types for any method given the declarations of all related methods in this or parent classes

Überladen (Overloading) bezeichnet man die Benutzung einer Methode mit dem gleichen Namen in der gleichen Klasse.
Überschreiben (Overriding) bezeichnet man die Benutzung einer Methode mit dem gleichen Namen in der abgeleiteten Klasse.

Um zu unterscheiden, ob es sich um Überladung oder Überschreibung handelt, untersucht man die folgenden Merkmale (Signatur einer Methode): Überladene Methoden benutzen den gleichen Namen, aber verschiedene Parameterlisten. Sie können den gleichen oder auch anderen Rückgabewert haben.
Bei der Überschreibung einer Methode müssen die Methoden den gleichen Namen, die gleichen Parameterwerte und den gleichen Rückgabewert haben. Kompilierungsfehler tritt auf, wenn sie den gleichen Namen und die gleichen Parameter haben, aber die Rückgabewerte sich unterscheiden.
Valid XHTML 1.1! Valid CSS!