Version 19 (modified by tr, 8 years ago) (diff) |
---|
Java Sprachelemente
Java Insel: Eine sehr gute Einführung in die verschiedenen Elemente der Sprache Java finden Sie in Elemente der Programmiersprache Java.
Anweisungen
Jedes Java Programm ist aus Folgen von Anweisungen aufgebaut. Diese Folgen können durch Elemente wie bedingte Anweisungen, Schleifen oder Methoden zu größeren Einheiten zusammengefasst werden. Damit Anweisungen voneinander unterscheidbar sind muss jede Anweisung mit einem Semikolon abgeschlossen werden:
int antwort = 42;
Ein Zeilenumbruch allein kennzeichnet nicht das Ende einer Anweisung. Die folgenden drei Beispiele haben dieselbe Bedeutung, sind syntaktisch korrekt und werden vom Compiler identisch übersetzt:
// Beispiel 1: Zwei Anweisungen zwei Zeilen, saubere Struktur String frage = "unbekannt"; int antwort = 42; // Beispiel 2: Zwei Anweisungen eine Zeile, Struktur schlecht erkennbar String frage = "unbekannt"; int antwort = 42; // Beispiel 3: Zwei Anweisungen viele Zeilen, Bedeutung schlecht erkennbar String frage = "unbekannt"; int antwort = 42;
Variable
Variable werden benötigt, um Informationen (Zahlen, Wahrheitswerte, Zeichenketten, Zeichen, etc.) abzuspeichern und später und / oder wiederholt zu verwenden. Der Name einer Variablen sollte im Kontext zu ihrer Verwendung stehen, um Irritationen zu vermeiden. Man sagt, dass Variable sprechende Namen haben sollen.
Konvention: Variablennamen sollten mit einem Kleinbuchstaben beginnen und alle weiteren Wörter im Namen mit Großbuchstaben (lowerCamelCase): Google Java Style Guide
Deklaration
Vor der ersten Verwendung muss eine Variable bekanntgemacht werden. Dies nennt man Deklaration.
- Allgemeine Form
- datentyp variablenname;
Beispiele:
int antwort; int gewichtVorMahlzeit; String name; char geschlecht; int alter; boolean volljaehrig; String textausgabe;
Zuweisung
Wenn Informationen später verwendet werden sollen, müssen Sie in einer Variablen gespeichert werden. Dies erfolgt in Form einer Zuweisung.
- Allgemeine Form
- variablenname = ausdruck;
Auf der linken Seite des Gleichheitszeichens steht der Name der Variablen, deren Wert verändert werden soll und auf der rechten Seite steht ein Ausdruck, der den Wert repräsentiert. Im einfachsten Fall wird ein konstanter Wert zugewiesen:
// Ausdruck ist konstanter Wert antwort = 42; // Ausdruck ist Berechnung x = 2; antwort = 40 + x;
Deklaration mit Zuweisung (Initialisierung)
Zur Initialisierung (erstmaliges Belegen mit einem Wert) einer Variablen können die Deklaration und die Zuweisung miteinander kombiniert werden. Dies ist der übliche Fall.
- Allgemeine Form
- datentyp variablenname = ausdruck;
Beispiele:
int antwort = 42; String name = "Peter"; char geschlecht = 'm'; boolean volljaehrig = true;
Weitere Möglichkeiten, Variable zu initialisieren::
String name = "Name: " + "Peter"; String nichts = ""; double a, b, c, d = 0.2; // schlechte Struktur, nicht verwenden double zufallszahl = (Math.random() * 3.9) / 2;
primitive Datentypen
Wir haben bereits gesehen, dass es offenbar verschiedene Sorten von Informationen gibt. Darunter fallen Ganzzahlen, Zeichenketten, Wahrheitswerte, usw. Diese Sorten nennt man Datentypen.
In Java wird zwischen primitiven Datentypen und Objekttypen unterschieden. Die primitiven Datentypen sind in der Sprache eingebaut.
Ganzzahlen
byte | -27 .. 27 - 1 | -128 .. 127 |
short | -216 .. 216 - 1 | -32.768 .. 32.767 |
int | -232 .. 232 - 1 | -2.147483648 .. 2.147.483.647 |
long | -264 .. 264 - 1 | ~ -9 * 1018 .. 9 * 1018 |
Üblicherweise werden nur die Ganzzahltypen int und long verwendet, da Speicher heutzutage kaum noch ein beschränkendes Element darstellt und das Risiko von eingeschleppten Fehlern durch spätere Änderungen des Codes oder der Einsatzbedingungen zu groß ist. Wenn beispielsweise zur Entwurfszeit des Programms feststeht, dass der Wert einer bestimmten Variablen immer kleiner als 3.000 sein wird, könnte man als Typ der Variablen short wählen. Davon ist jedoch abzuraten, da mitunter nicht klar ist, wie lange die Software in Gebrauch sein wird und ob sich vielleicht in späteren Jahren z. B. gesetzliche Rahmenbedingungen ändern, die dann Werte bis 60.000 zulassen. Falls diese Werte von externen Quellen (z. B. über einen Internetservice) kommen, treten dann Fehlerzustände auf, die oft sehr schwierig und teuer zu identifizieren und zu beheben sind.
Gleitkommazahlen
float | ~ +/- 1,4 * 10-45 .. 3,4 * 1038 |
double | ~ +/- 9,4 * 10-324 .. 1,8 * 10308 |
Aus den oben genannten Gründen wird für Gleitkommazahlen nur noch die Verwendung des Typs double empfohlen.
Es ist zu beachten, dass das Dezimaltrennzeichen in Java Programmen der Punkt (.) und nicht das Komma (,) ist. Trotzdem kann es mitunter vorkommen, dass Benutzereingaben für Gleitkommazahlen ein Dezimalkomma verlangen, nämlich dann, wenn das Betriebssystem des Benutzers auf die deutsche Sprache eingestellt ist.
Hinweis: Bei Gleitkommazahlen können aufgrund ihrer internen Darstellung als Summe von Brüchen Rundungsfehler auftreten. Daher ist z. B. für die Darstellung von Geldbeträgen auf die Verwendung von Gleitkommazahlen zu verzichten. Statt dessen verwendet man in solchen Fällen Ganzzahlen mit z. B. dem zehntausendfachen Wert des Geldbetrags (bei vier Nachkommastellen) und rechnet nur zur Darstellung auf Ausdrucken oder am Bildschirm in die Darstellung mit Dezimaltrenner (Komma) um.
Zeichen
- char - Zahlenwert des entsprechenden Zeichens aus der ASCII-Tabelle
Die Zuweisung kann sowohl mittels Zahlenwert als auch mittels Zeichen in einfachen Anführungszeichen erfolgen:
char a1 = 'a'; char a2 = 97; // beide Variablen enthalten den Wert 97
Bei der Ausgabe mittels System.out.print... wird das Zeichen und nicht der Zahlenwert ausgegeben. Soll der Zahlenwert ausgegeben werden, muss ein Typecast auf int erfolgen:
char c = 'a'; System.out.println(c); // Ausgabe des Zeichens a System.out.println((int)c); // Ausgabe der Zahl 97
Wahrheitswerte
- boolean - true oder false
Zeichenketten
- String - Beispiel: "Hallo Welt"
Strings sind eine Sonderform der primitiven Datentypen in Java. Eigentlich sind Strings und ihre Funktionalität in der Klasse String definiert, sie ähneln in der Verwendung in vielerlei Hinsicht jedoch den anderen primitiven Typen. Beispielsweise kann die Initialisierung ohne den Operator new erfolgen:
String vorname = "Peter"; String nachname = "Meier";
Strings können mit dem Operator + verkettet werden:
String name1 = vorname + " " + nachname; // name1 enthält "Peter Meier" String name2 = "Peter " + "Meier"; // name2 enthält "Peter Meier"
Bei den primitiven Datentypen können Vergleiche mit den Vergleichsoperatoren == und != vorgenommen werden. Da es sich bei Strings jedoch um Objekte handelt, und diese Vergleichsoperatoren für Objekte in besonderer Form definiert sind, sollte der Vergleich zweier Strings auf inhaltliche Gleichheit mittels equals erfolgen:
String s1 = "Katrin"; String s2 = "Kathrin"; boolean gleich = s1.equals(s2); // gleich enthält den Wert false
Typumwandlung
Mitunter muss dem Compiler der Typ eines Wertes explizit vorgegeben werden. Dies ist beispielsweise der Fall, wenn eine Gleitkommazahl einer Variablen mit Ganzzahltyp zugewiesen werden soll. Da dabei Informationen verloren gehen würden (die Nachkommastellen werden abgeschnitten), lässt der Compiler die folgende Zuweisung nicht zu:
// Beim Casten von double zu int werden die Nachkommastellen abgeschnitten. double d = 5.3; int x = d; // nicht zulässig Compilerfehler
Eine Lösung in dieser Situation ist die explizite Typumwandlung, auch Typecast genannt.
- Allgemeine Form
- variablenname = (datentyp) ausdruck;
Beispiele:
// Beim Casten von double zu int werden die Nachkommastellen abgeschnitten. double d = 5.3; int x = (int) d; // x enthät den Wert 5
Ein expliziter Cast von int auf double ist nicht notwendig, da es nicht zu Informationsverlust kommt, aber möglich:
int z = 5; double zahl = (double) z; // zahl enthält den Wert 5.0