Lexikalische Elemente
Kommentare
Bezeichner
reservierte Bezeichner und Zeichen
Variablen
Elementare Datentypen
Operatoren
Kontrollstrukturen
Felder, Arrays
Die elementaren Bestandteile von Java Programmen sind:
White-Space: Leerraum, Tabs
Kommentare
Bezeichner
Schlüsselwörter
Literale
Interpunktionszeichen
Operatoren
Es gibt drei Arten von Kommentaren in Java:
/* Kommentar */
Für längere Kommentare über mehrere Zeilen,
praktisch auch zum vorübergehenden Herauskommentieren
von Programmteilen
// Kommentar
Ab // werden die Zeichen bis zur nächsten Zeile
ignoriert, gebräuchlich für Kommentare innerhalb
der Programmzeilen selbst
/** Kommentar */
Kommentar zur Programmdokumentation mit javadoc.
Über bestimmte Tags, z.B.
@author text
@version text
@param name Erläuterung
@return Erläuterung
lässt sich die Dokumenation sehr übersichtlich gestalten.
Namen von Variablen und Methoden etc.
beginnen mit Buchstaben, dürfen "_" und "$" enthalten.
Schlüsselwörter (key words)
Eigene Objekte und Variablen kann man beliebig nennen, bis auf folgende, von Java reservierten Worte:
abstract double int strictfp ** boolean else interface super break extends long switch byte final native synchronized case finally new this catch float package throw char for private throws class goto * protected transient const * if public try continue implements return void default import short volatile do instanceof static while
* z.Zt unbenutzt, ** neu in Java 2
( ) { } [ ] ; , .
= - + * / %
< > ! ? & | ~
Daneben gibt es eine Reihe von Methodennamen mit speziellen
Bedeutungen (z.B. main() oder run()).
Sie werden in der Regel durch Interfaces vorgeschrieben.
Eine Ausnahme ist die Methode main().
In Java sind die primitiven Datentypen architektur-unabhängig definiert. Eine Zusammenstellung befindet sich in Abbildung 1.3. Der Begriff `atomar' wird bei Mulit-threaded Programmen benötigt.
| Datentyp | Inhalt | Größe | atomar |
|---|---|---|---|
| boolean | true oder false | 1 bit | ja |
| char | Unicode Zeichen | 16 bits | ja |
| byte | signed integer | 8 bits | ja |
| short | signed integer | 16 bits | ja |
| int | signed integer | 32 bits | ja |
| long | signed integer | 64 bits | nein |
| float | IEEE754 float | 32 bits | ja |
| double | IEEE754 double | 64 bits | nein |
| String | Zeichenkette | beliebig | nein |
| Objekt-Referenz | Zeiger, Pointer | null oder Referenz | ja |
| Typ | Art (Bereich) |
|---|---|
| ganze Zahlen | |
| byte | 8-bit Integer mit Vorzeichen (-128 bis 127) |
| short | 16-bit Integer mit Vorzeichen (-32.768 bis 32.767) |
| int | 32-bit Integer mit Vorzeichen (-2.147.483.648 bis 2.147.483.647) |
| long | 64-bit Integer mit Vorzeichen (-9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807) |
| reele Zahlen | |
| float | 32-bit IEEE 754 Fliesskomma (-3.40282347e+38 bis 3.40282347e+38) |
| double | 64-bit IEEE 754 Fliesskomma (-1.7976931348623157e+308 bis 1.7976931348623157e+308) |
| andere Typen | |
| char | 16-bit Unicode character (65536 Zeichen). |
| boolean | Boolscher Wert (wahr oder falsch) |
Die Größe der Datentypen ist unabhängig vom Rechnersystem und der Java-Implementierung!
Beispiel:
public class PrimitivTypen {
// lexikalische Typen sind int und double
// andere direkte Wertzuweisungen müssen
// "gecastet" werden z.B.:
byte b = (byte)37;
short s = (short)37;
int i = 37;
long l = 37L;
float f = 0.37F;
double d = 0.37;
char c = 'K';
boolean b = true;
}
Es gibt unter anderem folgende drei Arten von Variablen:
lokale Variablen:
werden lokal innerhalb eines {...}-Blocks (z.B. Methode)
definiert und sind nur dort verfügbar.
Objekt-Variablen:
werden in Klassen definiert und gehören zum
erzeugten Objekt
Klassen-Variablen:
werden in Klassen definiert und sind ohne erzeugtes Objekt
verwendbar
Zur Verknüpfung von elementaren Datentypen:
postfix operators [] . (params) expr++ expr--
unary operators ++expr --expr +expr -expr ~ !
creation or cast new (type)expr
multiplicative * / %
additive + -
shift << >> >>>
relational < > <= >= instanceof
equality == !=
bitwise AND &
bitwise exclusive OR ^
bitwise inclusive OR |
logical AND &&
logical OR ||
conditional ? :
assignment = += -= *= /= %= &= ^= |= <<=
>>= >>>=
Beispiel:
public class Operatoren {
public void numericalops() {
int n = 43;
n += 7; // ist eine Abkuerzung von n = n + 7;
// dies funktioniert auch mit -, /, >>, etc.
n = n * 2; // verdoppelt n
n = n / 2; // teilt n ganzzahlig durch 2
n = n % 2; // Rest der ganzzahligen Division
float f = n / (float)2; // liefert das float-
// Divisionsergebnis
}
public void logicalops() {
boolean bool = true && false; // bool ist false
bool = true || false; // bool ist true
bool = true == false; // bool ist false
bool = false != true; // bool ist true
bool = 4 >= 3; // bool ist true
bool = 4 <> 4; // bool ist false
}
public void difficultops() {
// definiert ein int-Array mit 8 Eintraegen
int array[] = new int[8];
if (array[0]++ < 0);
// ist gleichbedeutend mit
if (array[0] < 0);
array[0] = array[0] + 1;
if (--array[1] == 2);
// ist gleichbedeutend mit
array[1] = array[1] - 1;
if (array[1] == 2);
boolean bool = true;
bool = !bool;
// ! nimmt eine logische Negierung vor
// bool ist jetzt gleich false
int conditional = bool == true ? 3 : -2;
// conditional ist jetzt -2
}
public void bitwiseops() {
int i = 3;
i = i << 1; // i ist jetzt 6
i = i & 7; // i ist jetzt 6
i = i | 3; // i ist jetzt 7
}
}
Kontrollstrukturen dienen dem Ausführen von Programmteilen in Abhängigkeit von sich ändernden Bedingungen.
Statement Keyword decision making if-else, switch-case loop for, while, do-while miscellaneous break, continue, label:, return
Schleifen und bedingte Anweisungen
Java hat die üblichen auch von C und C++ bekannten while-, do- und for-Schleifen-Konstrukte.
if (condition) {
statements
} else {
statements
}
while (condition) {
statements
}
do {
statements
} while (condition);
for (int i=0; i < end; i++) {
statements
}
switch (var) {
case a: { statements }
case b: { statements }
...
default: { statements }
}
break und continue können analog zu C/C++ in einer Schleife benutzt werden.
Beispiel:
public class Kontrollstrukturen {
public void decision() {
int variable = 2;
if (variable > 1 && variable == 2) {
variable = variable - 1;
}
else {
variable = variable + 1;
}
switch (variable) {
case 0:
case 1:
// variable ist 0 oder 1
break;
case 2:
variable = variable * 2;
break;
default:
// variable ist nicht 0, 1 oder 2
}
}
public void loop() {
// dreimal die selbe Schleife
for (int index = 0; index < 4; index = index + 1) {
// tue irgendwas 4 mal
}
int index = 0;
while (index < 4) {
index = index + 1;
}
index = 0;
do {
index = index + 1;
} while (index < 3);
}
public void miscellaneous() {
int i = 0;
while (1 > 0) {
i = i + 2;
if (i > 5) break; // verlaesst die while-Schleife
continue; // faengt sofort wieder am
// Schleifen-Kopf an
}
return; // beendet die Methode sofort
}
}
Ein Array, d.h. einen Vektor oder eine Matrix, kann man ebenfalls durch new erzeugen.
byte[] buffer = new byte[4096]; byte[] data = new byte[4096]; int[][] plot = new int[64][64]; ... Date[] ds = new Date[16];
Auf die Elemente eines Arrays kann über ihren Index zugegriffen werden.
for (int i=0; i < buffer.length; i++)
buffer[i] = data[i];
In der length Variablen eines Array Objekts steht die Information über die Länge bereit.
Bemerkung:
Java erlaubt (aus Gründen der Kompatibilität zu C/C++) auch die
Notation byte buffer[] = new byte[4096].
Wir werden davon aber keinen Gebrauch machen.
Erstellt unter Verwendung von Vorlesungsunterlagen von Dr. V.-H. Winterer, Universität Freiburg, Rechenzentrum.
© Universität Mannheim, Rechenzentrum, 2000-2002.
Heinz KredelLast modified: Mon Nov 19 23:02:32 MET 2001