Variablen und primitive Typen
Ein Programm arbeitet mit Werten: Zahlen, Zeichen, Wahrheitswerten, Texten. Damit es sich diese Werte merken kann, braucht es Variablen.
Was du am Ende kannst
Abschnitt betitelt „Was du am Ende kannst“- Variablen deklarieren, initialisieren und ändern
- den passenden primitiven Typ für einen Wert wählen
- erklären, warum
Integer.MAX_VALUE + 1negativ ist - zwischen Typen umwandeln und Konstanten verwenden
Was ist eine Variable?
Abschnitt betitelt „Was ist eine Variable?“Eine Variable ist ein benannter Speicherplatz für einen Wert. In Java hat jede Variable einen Typ, der festlegt, welche Art von Werten hineinpasst. Dieser Typ steht fest und kann sich später nicht mehr ändern – Java ist eine statisch typisierte Sprache.
package de.drv;
public class Variablen {
public static void main(String[] args) { int alter; alter = 19; System.out.println(alter);
int jahr = 2026; System.out.println("Geburtsjahr: " + (jahr - alter));
alter = alter + 1; System.out.println("Nächstes Jahr: " + alter); }
}19Geburtsjahr: 2007Nächstes Jahr: 20Drei Dinge passieren hier:
| Begriff | Beispiel | Bedeutung |
|---|---|---|
| Deklaration | int alter; |
Eine Variable mit Typ int und Namen alter wird angelegt. |
| Zuweisung | alter = 19; |
Der Variable wird ein Wert gegeben. |
| Initialisierung | int jahr = 2026; |
Deklaration und erste Zuweisung in einem Schritt. |
Das Gleichheitszeichen = ist in Java keine Gleichung, sondern eine
Zuweisung: „Rechne den Ausdruck rechts aus und speichere das Ergebnis in der
Variable links.“ Deshalb ist alter = alter + 1; völlig sinnvoll: Nimm den
alten Wert, addiere 1, speichere das Ergebnis.
Die acht primitiven Typen
Abschnitt betitelt „Die acht primitiven Typen“Java kennt acht eingebaute, sogenannte primitive Typen:
| Typ | Größe | Wertebereich bzw. Inhalt | Beispiel |
|---|---|---|---|
byte |
8 Bit | −128 bis 127 | byte b = 100; |
short |
16 Bit | −32.768 bis 32.767 | short s = 30_000; |
int |
32 Bit | ca. ±2,1 Milliarden | int anzahl = 42; |
long |
64 Bit | ca. ±9,2 Trillionen | long l = 8_200_000_000L; |
float |
32 Bit | Kommazahl, ca. 7 Stellen genau | float f = 19.99f; |
double |
64 Bit | Kommazahl, ca. 15–16 Stellen genau | double preis = 19.99; |
char |
16 Bit | ein Zeichen (Unicode) | char c = 'J'; |
boolean |
– | true oder false |
boolean ok = true; |
Im Alltag brauchst du fast nur die fett gedruckten: int für ganze
Zahlen, double für Kommazahlen, boolean für Ja/Nein und
char für einzelne Zeichen. Reicht int nicht aus, nimmst du long.
package de.drv;
public class Typen {
public static void main(String[] args) { int anzahl = 2_000_000_000; long weltbevoelkerung = 8_200_000_000L; double preis = 19.99; char buchstabe = 'J'; boolean istVolljaehrig = true;
System.out.println("anzahl: " + anzahl); System.out.println("weltbevoelkerung: " + weltbevoelkerung); System.out.println("preis: " + preis); System.out.println("buchstabe: " + buchstabe); System.out.println("istVolljaehrig: " + istVolljaehrig); }
}Literale
Abschnitt betitelt „Literale“Ein Wert, der direkt im Quelltext steht, heißt Literal. Ein paar Regeln:
- Ganze Zahlen wie
42sind vom Typint. Fürlonghängst du einLan:8_200_000_000L. - Kommazahlen schreibst du mit Punkt:
19.99. Sie sind vom Typdouble. Fürfloathängst du einfan:19.99f. - Unterstriche machen große Zahlen lesbar:
2_000_000_000– Java ignoriert sie. - Ein Zeichen steht in einfachen Anführungszeichen:
'J'. Text steht in doppelten:"Ja"– das ist keinchar, sondern einString(siehe unten).
Grenzen
Abschnitt betitelt „Grenzen“Jeder Typ hat eine feste Größe – und damit Grenzen. Was passiert, wenn man sie überschreitet?
package de.drv;
public class Grenzen {
public static void main(String[] args) { int max = Integer.MAX_VALUE; System.out.println(max); System.out.println(max + 1);
System.out.println(0.1 + 0.2); }
}2147483647-21474836480.30000000000000004Überlauf: Rechnet man über den größten int-Wert hinaus, springt das
Ergebnis ohne Warnung ans andere Ende des Wertebereichs. Java meldet keinen
Fehler – das Ergebnis ist einfach falsch.
Ungenauigkeit: Kommazahlen werden intern im Binärsystem gespeichert. Viele
Dezimalzahlen wie 0.1 lassen sich dort nicht exakt darstellen – wie 1/3 im
Dezimalsystem. Kleine Rundungsfehler sind die Folge.
Typumwandlung
Abschnitt betitelt „Typumwandlung“Manchmal muss ein Wert von einem Typ in einen anderen.
package de.drv;
public class Umwandlung {
public static void main(String[] args) { int ganz = 7; double komma = ganz; System.out.println(komma);
double wert = 3.99; int abgeschnitten = (int) wert; System.out.println(abgeschnitten);
char c = 'A'; int code = c; System.out.println(code); System.out.println((char) (c + 1)); }
}7.0365B- Vom kleineren zum größeren Typ (z. B.
int→double) geht automatisch: Es kann nichts verloren gehen. - Vom größeren zum kleineren Typ (z. B.
double→int) musst du ausdrücklich verlangen – mit einem Cast:(int) wert. Dabei werden die Nachkommastellen abgeschnitten, nicht gerundet. Ohne Cast meldet Eclipse: Type mismatch: cannot convert from double to int. - Ein
charist intern eine Zahl: der Code des Zeichens.'A'hat den Code 65,'B'den Code 66 – deshalb kann man mit Zeichen rechnen.
Konstanten
Abschnitt betitelt „Konstanten“Werte, die sich nie ändern sollen, markierst du mit final:
final double MWST_SATZ = 0.19;double netto = 100.0;double brutto = netto * (1 + MWST_SATZ);Versucht jemand später, MWST_SATZ einen neuen Wert zu geben, meldet Eclipse
einen Fehler. Konstanten schreibt man nach Konvention in Großbuchstaben mit
Unterstrichen.
Und Texte?
Abschnitt betitelt „Und Texte?“Für Texte gibt es den Typ String:
String name = "Anna";System.out.println("Hallo " + name);String ist kein primitiver Typ, sondern eine Klasse – deshalb wird er
großgeschrieben. Wir benutzen ihn ab jetzt ganz selbstverständlich; was eine
Klasse genau ist, besprechen wir später.
Seit Java 10 darfst du bei lokalen Variablen den Typ weglassen, wenn er sich aus dem Wert ergibt:
var anzahl = 42; // intvar preis = 19.99; // doublevar name = "Anna"; // StringDie Variable hat trotzdem einen festen Typ – Java leitet ihn nur selbst ab. In dieser Schulung schreiben wir die Typen vorerst aus: Am Anfang hilft es, sie immer vor Augen zu haben.
Namen für Variablen
Abschnitt betitelt „Namen für Variablen“Regeln – sonst meldet der Compiler einen Fehler:
- Buchstaben, Ziffern,
_und$; keine Ziffer am Anfang - Groß- und Kleinschreibung zählt:
alterundAltersind verschiedene Variablen - keine reservierten Wörter wie
int,classoderpublic
Konventionen – daran hält sich praktisch jeder Java-Code:
- Variablen in lowerCamelCase:
anzahlTeilnehmer,istVolljaehrig - Konstanten in UPPER_SNAKE_CASE:
MWST_SATZ - sprechende Namen statt
x,a2odertemp - Umlaute sind erlaubt, aber unüblich – wir schreiben
ae,oe,ue
Wenn es nicht klappt
Abschnitt betitelt „Wenn es nicht klappt“| Meldung in Eclipse | Ursache |
|---|---|
| The local variable x may not have been initialized | Variable gelesen, bevor sie einen Wert hat |
| Type mismatch: cannot convert from double to int | Kommazahl in int-Variable – Cast nötig: (int) |
| The literal 3000000000 of type int is out of range | Zahl zu groß für int – L anhängen und long verwenden |
| Duplicate local variable x | Variable mit diesem Namen gibt es schon |
| The final local variable X cannot be assigned | Einer Konstante wird ein neuer Wert zugewiesen |
Übungen
Abschnitt betitelt „Übungen“-
Berechne die Sekunden eines Jahres (365 Tage) und gib sie aus.
-
Berechne jetzt die Millisekunden eines Jahres:
long ms = 365 * 24 * 60 * 60 * 1000;Das Ergebnis ist falsch, obwohlmseinlongist. Warum? Wie behebst du es? -
Rechne eine Temperatur von Celsius in Fahrenheit um:
fahrenheit = celsius * 9 / 5 + 32. Probiere 21,5 °C. -
Welchen Zeichencode hat
'a'? Gib ausgehend von'a'den Buchstaben'e'aus, ohne'e'hinzuschreiben. -
Gegeben sind
int a = 3;undint b = 8;. Vertausche die Werte, sodass danacha8 undb3 ist.