wiki:Skript/2. Java/ 2. Anweisungen, Variable und Datentypen

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

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

Java Insel

Datentypen, Typisierung, Variablen und Zuweisungen