Language Fundamentals


Identify correctly constructed package declarations, import statements, class declarations (of all forms including inner classes) interface declarations, method declarations (including the main method that is used to start execution of a class), variable declarations, and identifiers.

Ein Java-Code besteht aus einer Sammlung von Kompilierungseinheiten. Diese Kompilierungseinheiten sind eine package-Deklaration, import-Anweisung und Klassen oder Interface-Definition. In einer Datei müssen diese Einheiten in folgender Reihenfolge stehen: Keine dieser Einheiten sind Pflichtangaben. Eine Java-Datei muss nicht unbedingt Code enthalten. Hierbei kann man auch den Dateinamen freiwählen. Wenn aber mindestens eine dieser Einheiten vorhanden sind, so muss die Reihenfolge befolgt werden.
Package-Deklaration
Ein package wird wie folgt deklariert:
package packagename;
Packages können subpackages enthalten. Es ist so wie eine Verzeichnisstruktur aufgebaut. Wenn kein package-Name angegeben ist, so gehören die Klassen zur default-package. Es gibt bei der Angabe des package-Namens auch Konvetionen. Wenn der Domain-Name sagol.de ist, so fängt der package-Name mit de.sagol an. Dahinter kann man dann einen speziellen package-Namen angeben. In unserem Beispiel würde es dann so aussehen:
package de.sagol.meinpackage;
Es kann immer nur package deklariert werden. Vor der package-Deklaration können Kommentarzeilen vorhanden sein.

import-Anweisung:
Wenn man bestimmte Klassen in einem Code verwenden möchte, kann man diese Klassen importieren. Dazu benutzt man import-Anweisungen. Die Schreibweise sieht wie folgt aus:
import packagename.klassenname;
Hierbei wird diese Klasse zum Kompilieren geladen. Die folgende Schreibweise sorgt dafür, dass alle Klassen und Interfaces in einem package geladen werden:
import packagename.*;
Die Klassen und Interfaces in den Unterpaketen werden damit aber nicht geladen.

Klassendefinition:
Eine Klassendefinition sieht wie folgt aus:
    Modifizierer class Klassenname extends Superklassenname implements Interfaces {
        Klassendefinition
    }
Die beiden Anweisungen extends und implements sind keine Pflichtangaben. Mit der Anweisung implements kann man auch mehrere Interfaces implementieren, die mit Kommas getrennt werden.
Modifizierer können in irgendeiner Reihenfolge stehen. Die erlaubten Modifizierer sind:
Der Modifizierer public kann in einer Datei nur einmal als Klassenmodifizierer benutzt werden. Wenn eine Klasse mit dem Modifizierer definiert wurde, so muss der Dateiname mit diesem Klassennamen identisch sein.
Der Modifizierer strictfp wurde in Java2 eingeführt. Dieser Modifizierer kann benutzt werden bei Klassen, Interfaces und Methoden. Er wird angewendet bei Fliesskommaoperationen, ist aber nicht Bestandteil der Java-Zertifikation.
Es ist nicht erlaubt, eine Klasse abstract und final zu deklarieren.
In den geschweiften Klammern können dann die folgenden Deklarationen stehen:
Initialisierer:
Initialisierer ist ein Block von Code, eingeschlossen in geschweiften Klammern, was nicht in einer Klassenmethode steht. Wenn eine Instanz einer Klasse gebildet wird, so werden zuerst alle Initialisierer ausgeführt, noch bevor der Konstruktor ausgeführt wird. Die Konstruktoren können somit die Variablen, die in den Initialisierern vorhanden sind, auf diese Variablen zugreifen.

statische Initialisierer:
Statische Initialisierer sind genauso aufgebaut wie die normalen Initialisierer, mit dem Unterschied, dass vor dem Namen das Schlüsselwort static steht. Die statischen Initialisierer werden ausgeführt, wenn die Klasse geladen wird. Die statischen Initialisierer haben Zugriff auf alle statischen Daten und Methoden einer Klasse.

Interfacedeklaration:
Eine Interfacedeklaration hat die folgende Form:
    [public] [strictfp] interface interfacename [extends superinterfaces] {
        interface-Definition;
    } 
Hier noch mal zur Übersicht:
Abstract-Klassen und Interface
abstract-Klasse Interface
muss nicht intanziiert werden muss instanziiert werden
kann static und final-Daten enthalten Variablen sind static und final
abstract-Klassen können nicht-abstract-Methoden haben, aber wenn mindestens eine Methode abstract ist, so muss die Klasse als abstract deklariert werden. Alle Methoden sind abstract. Deshalb müssen alle Methoden impliziert werden
Abstract Methoden müssen nicht die Schlüsselwörter private, final, static, native, synchronized haben Die Methoden in Interfaces müssen nicht die Schlüsselwörter protected, private, final, static, native, synchronized haben
Methoden sind nicht unbedingt public Methoden sind public, auch wenn sie nicht als public deklariert sind
kann nur von einer Superklasse vererbt werden kann mehrere Interfaces implementieren
kann Konstruktor haben dürfen keine Konstruktoren haben

Methodendefinition
Eine Methode ist wie folgt aufgebaut:
    [Modifizierer] Rückgabewert methodenname (Parameterliste) [throws exceptionliste]{
        Methodenrumpf;
    }

Die main()-Methode
Damit eine Klasse von der Java Virtual Machine gestartet werden kann, muss sie die main()-Methode haben. Sie ist sozusagen die Einstiegsmethode einer Klasse.
Die Javasprachen-Spezifikation besagt, eine main()-Methode muss public, static und void haben. Sie muss ein Array von String als Parameter aufnehmen. public bedeutet, die Methode ist zugreifbar von überall. static bedeutet, man auf sie Zugreifen ohne, dass sie instanziiert wird. void bedeutet, sie hat kein Rückgabewert.
Der Name des Arrays kann freigewählt werden. Im allgemeinen wird aber dieses Argument args[] oder argv[] benannt.
Mögliche Formen der main-Methode Variablendeklaration
Eine Variable wird wie folgt deklariert:
[Modifizierer] variablenname [=Initialisierungswert;]
Modifizierer sind optional. Die folgenden Modifizierer für eine Variable sind erlaubt: Die Modifizierer können in irgendeiner Reihenfolge stehen.
nach oben

State the correspondence between index values in the argument array passed to a main method and command line arguments.

Die main()-Methode ist der Einstiegspunkt von einer Anwendung. Wenn Sie eine Javaanwendung starten, wird zuerst eine Java Virtual Machine kreiiert. Die JVM lädt die Klasse, die Sie auf der Kommandozeile eingegeben haben, die wiederum ruft die main()-Methode auf. Der allgemeine Aufruf auf der Kommandozeile sieht wie folgt aus:
java Anwendungsklassenname Argument1 ... Argumentn
Der String-Array enthält dann die angegebenen Argumente. Die Wörter "java" und "Klassenname" sind nicht in dem Array vorhanden.
args[0] enthält das erste Argument, welches in der Kommandozeile übergeben wurde.
Eine Klasse, die keine main()-Methode hat, kann von der JVM aufgerufen werden, wenn eine ihrer Superklassen eine main()-Methode besitzt, die vererbt wurde.


nach oben

Identify classes that correctly implement an interface where that interface is either java.lang.Runnable or a fully specified interface in the question.

In dem Interface java.lang.Runnable ist nur eine Methode, die in die Klasse implementiert werden muss:
public void run()
Diese Methode hat kein Rückgabewert und ist ohne Parameter aufzurufen.


nach oben

Identify all Java programming language keywords. Note: There will not be any questions regarding esoteric distinctions between keywords and manifest constants.

Identifizierer Java Schlüsselwörter
abstract do implements protected throws
boolean double import public transient
break else instanceof return true
byte extends int short try
case false interface static void
catch final long strictfp volatile
char finally native super while
class float new switch  
const for null synchronized  
continue goto package this  
default if private throw  

Die beiden Schlüsselwörter "const" und "goto" werden von Java nicht benutzt.
Die Wörter "null", "true" und "false" sind zwar keine Schlüsselwörter, sondern vordefinierte Literale, aber im Java Examen wird nach dem Unterschied nicht gefragt.

nach oben

State the effect of using a variable or array element of any kind when no explicit assignment has been made to it.

Java unterstützt zwei Arten von Variablen: Die Arrays haben eine besondere Bedeutung. Sie werden sofort mit dem Defaultwert initialisiert, wenn sie definiert werden, egal wo sie definiert werden.

Defaultwerte
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
boolean false
char '\u0000'
objekt null


nach oben

State the range of all primitive formats, data types and declare literal values for String and all primitive types using all permitted formats bases and representations.

Java unterscheidet zwischen 8 verschiedenen primitiven Datentypen. Die Grösse dieser Datentypen ist in Java-Spezifikation festgelegt.


primitive Datentypen
Typ Grösse min Wert max Wert
boolean 1 - false, true
char 16 '\u0000' (0) '\uffff' (216-1 oder 65536)
byte 8 -27 (128) 27-1 (127)
short 16 -215 (32768) 215-1 (32767)
int 32 -231 (2147483648) 231-1 (2147483647)
long 64 -263 (9223372036854775808) 263-1 (9223372036854775807)
float 32 -3.4 * 1038 3.4 * 1038
double 64 -1.8 * 10308 3.4 * 10308

Char- und String-Literale:
Ein char Literal kann nur ein Zeichen, eingeschlossen in einfache Anführungszeichen annehmen, unter der Voraussetzung, dass dieses Zeichen auf der Tastatur vorhanden ist. Falls dieses Zeichen nicht auf der Tastatur vorhanden ist, so wird der Unicodewert, bestehend aus vier Ziffern, des Zeichens eingegeben. Beispiel:
char spc = '\u0020' für ein Leerzeichen.

String-Literale sind Zeichenketten. Sie werden in doppelte Anführungszeichen eingeschlossen. Beispiel:
String name = "Hans Schulz";

Java unterstützt verschiedene Escape Sequenzen, die unten aufgeführt sind.

Escape Sequenzen
Escape Sequenz Bedeutung
'\b' Schritt zurück
'\f' Seitenschaltung
'\n' neue Zeile
'\r' Wagenrücklauf
'\t' Tabulator
'\'' einfache Anführungszeichen
'\"' doppelte Anführungszeichen
'\\' Rückwärts-Schrägstrich

Integralwerte Literale
Integralwerte haben drei verschiedene Formen: Alle Integralliterale sind per Defaulteinstellung int-Werte. Stehen hinter den Zahlen l bzw. L als Suffix, so sind sie long-Werte. Eine Zuweisung zu byte oder short ist nicht erlaubt.

Fliesskomma-Literal:
Für die Fliesskommaliterale verwendet man die untenstehenden Formen: Eine Fliesskommazahl, welches kein Suffix (d, D, f, F) besitzt, ist als Defaulteinstellung double.
Valid XHTML 1.1! Valid CSS!