1. Schlüsselwort var
Wenn wir anfangen, in Java zu programmieren, begegnet uns ein strenges Typsystem: Jede Variable muss explizit deklariert werden – ihr Typ muss angegeben werden. Das ist gut für die Zuverlässigkeit, aber manchmal werden die Schreibweisen sperrig und überladen den Code. Um das Leben zu vereinfachen, wurde in Java ein praktisches Werkzeug eingeführt – Typinferenz (var).
var ermöglicht kürzeren und saubereren Code, ohne die Typsicherheit zu opfern: Sie schreiben den Wert, und der Compiler leitet den Typ selbst ab.
Beispiel
var age = 23; // Der Compiler ermittelt den Typ der Zahl 23 und setzt int age ein
var name = "Anna"; // Der Compiler ermittelt den Typ von "Anna" und setzt String name ein
var price = 99.99; // Der Compiler ermittelt den Typ 99.99 und setzt double price ein
Warum gibt es var?
- Lesbarkeit: Sie müssen lange Typen (wie HashMap<String, List<Integer>>) nicht von Hand schreiben.
- Flexibilität: ermöglicht leichteres Ändern von Typen in der Zukunft: rechts korrigiert – links passt sich var an.
- Moderner Stil: praktisch alle modernen Java‑Projekte verwenden var dort, wo der Typ aus der Initialisierung leicht ersichtlich ist.
Wann man var verwenden kann (und sollte)
- Wenn auf der rechten Seite eindeutig ist, welchen Typ die Variable hat.
- Wenn der Typ offensichtlich ist (var price = 100; – klar, dass das ein int ist).
- Wenn der Typ sehr lang oder kompliziert ist (z. B. HashMap<Integer, List<Calendar>>).
Beispiel mit Array
var numbers = new int[] { 1, 2, 3, 4 };
Beispiel mit Methode
var input = console.nextLine(); // input – ist ein String (die Methode gibt String zurück)
Wann man var besser NICHT verwendet
Wenn der Typ aus der rechten Seite nicht klar hervorgeht, kann der Code weniger verständlich werden. Wenn Sie in einem Monat selbst nicht mehr verstehen, welcher Typ dort steht, geben Sie ihn besser explizit an.
var mystery = DoSomethingVeryComplicated(); // WER BIST DU, mystery???
Hier ist es besser, den Typ explizit anzugeben:
String result = DoSomethingVeryComplicated();
Goldene Regel: Verwenden Sie var nur dort, wo die Lesbarkeit nicht leidet!
var – nur für lokale Variablen
Das Schlüsselwort var funktioniert nur für lokale Variablen – innerhalb von Methoden. Sie können var nicht verwenden für:
- Methodenparameter;
- Klassenfelder;
- Konstanten.
Wie funktioniert var „unter der Haube“
- Der Java-Compiler setzt beim Kompilieren den korrekten Typ ein.
- Nach der Kompilierung gibt es kein var mehr.
- Keine Leistungseinbußen: Es ist nur eine Bequemlichkeit für den Programmierer.
var year = 2025; // zur Compile-Zeit wird das zu: int year = 2025;
Typische Fehler bei der Verwendung von var
Nicht initialisierte Variable:
var a; // FEHLER: Dem Compiler fehlt eine Grundlage, um den Typ abzuleiten!
Mehrdeutige Initialisierung:
var list = null; // FEHLER: Der Typ von null ist nicht definiert!
Wiederverwendung der Variable mit unterschiedlichen Typen:
var value = 5; // value – int
value = "Fünf"; // FEHLER: value ist bereits int!
Vergleich: explizite Typen und var
| Szenario | Expliziter Typ | var |
|---|---|---|
| Typ ist eindeutig | |
|
| Methode gibt einen komplexen Typ zurück | |
|
| Array | |
|
2. Schlüsselwort final: Deklaration von Konstanten
Eine Konstante ist eine Variable, deren Wert nach der Initialisierung nicht geändert werden kann. Konstanten machen den Code zuverlässig und verständlich und schützen vor versehentlichen Änderungen wichtiger Zahlen und Zeichenketten.
- Kreiszahl Pi (PI = 3.14159…)
- Maximale Anzahl an Benutzern (MAX_USERS = 1000)
- Firmenname (COMPANY_NAME = "CodeGym")
In Java wird für die Deklaration einer Konstante der Modifikator final verwendet. Er sagt dem Compiler: „Nach der ersten Zuweisung – später darf nichts mehr geändert werden!“
final Typ KONSTANTENNAME = Wert;
Syntax
final int DAYS_IN_WEEK = 7;
final double PI = 3.1415926535;
final String GREETING = "Hallo, Java!";
Wichtige Punkte:
- Eine Variable mit final muss initialisiert werden (sofort oder im Konstruktor – wenn es sich um ein Klassenfeld handelt).
- Der Versuch, den Wert zu ändern, führt zu einem Kompilierfehler.
Beispiel: Eine final-Variable darf nicht geändert werden
final int MAX_USERS = 100;
MAX_USERS = 200; // Fehler: einer final-Variablen darf kein neuer Wert zugewiesen werden
Anmerkung: Wenn Sie die Zuweisung entkommentieren – lässt sich das Projekt nicht bauen.
3. static final: Klassenkonstanten
In Java werden oft Konstanten benötigt, die nicht von einem konkreten Objekt abhängen – „gemeinsame“ für die gesamte Klasse. Dafür nutzt man die Kombination aus static + final.
Warum static final?
- static – die Variable gehört zur Klasse (eine für alle).
- final – der Wert darf nicht geändert werden.
Syntax
public static final double PI = 3.1415926535;
public static final int MAX_USERS = 1000;
public static final String COMPANY_NAME = "CodeGym";
Wo deklarieren? Üblicherweise am Anfang der Klasse (vor den Methoden).
Beispiel: Verwendung in einer Klasse
public class MathUtils
{
public static final double PI = 3.1415926535;
public static double circleLength(double radius)
{
return 2 * PI * radius;
}
}
Aufruf:
double len = MathUtils.circleLength(5);
System.out.println(len); // 31.4159...
Beachten Sie: auf die Konstante greifen wir über den Klassennamen zu: MathUtils.PI.
4. Unterschied zwischen nur final und static final
final – der Wert eines Feldes kann nach der Initialisierung nicht geändert werden, aber jedes Objekt hat seinen eigenen Wert.
static final – eine gemeinsame Konstante für die ganze Klasse, unabhängig von Objekten.
Beispiel: Unterschied in der Praxis
public class User
{
public final String name; // Jeder User hat seinen eigenen Namen (final)
public static final String COMPANY = "CodeGym"; // Eine Firma für alle (static final)
public User(String name)
{
this.name = name;
}
}
User u1 = new User("John");
User u2 = new User("Peter");
System.out.println(u1.name); // John
System.out.println(u2.name); // Peter
System.out.println(User.COMPANY); // CodeGym
Fazit: name – individuelles unveränderliches Feld, COMPANY – gemeinsame Konstante.
Namenskonventionen für Konstanten
Konstanten werden in GROSSBUCHSTABEN_MIT_UNTERSTRICH benannt.
public static final int MAX_USERS = 1000;
public static final double GRAVITY = 9.81;
public static final String DEFAULT_GREETING = "Hello, world!";
Tipp: Sehen Sie einen solchen Namen – versuchen Sie nicht, den Wert im Code zu ändern: Der Compiler lässt es nicht zu.
5. Praxis: Deklaration und Verwendung von Konstanten
Beispiel: Klasse mit Konstanten
public class CircleCalculator
{
public static final double PI = 3.1415926535;
public static double getLength(double radius)
{
return 2 * PI * radius;
}
public static double getArea(double radius)
{
return PI * radius * radius;
}
}
Verwendung:
public class Main
{
public static void main(String[] args)
{
double r = 5.0;
System.out.println("Kreisumfang: " + CircleCalculator.getLength(r));
System.out.println("Kreisfläche: " + CircleCalculator.getArea(r));
}
}
Ergebnis:
Kreisumfang: 31.415926535
Kreisfläche: 78.5398163375
Versuch, die Konstante zu ändern
CircleCalculator.PI = 3.14; // Kompilierfehler: cannot assign a value to final variable PI
6. Besonderheiten und Feinheiten
Konstanten für Objekte
Man kann final für Referenzen auf Objekte deklarieren, aber das macht das Objekt nicht unveränderlich! Es verbietet nur, der Variablen eine andere Referenz zuzuweisen.
final StringBuilder sb = new StringBuilder("Hello");
sb = new StringBuilder("World"); // Fehler: neues Objekt darf nicht zugewiesen werden
sb.append(", Java!"); // Erlaubt – der Objektzustand ändert sich
System.out.println(sb); // Hello, Java!
Fazit: final schützt die Referenz, nicht das Objekt. Für echte Unveränderlichkeit verwenden Sie unveränderliche Klassen (z. B. String, List.of() usw.).
Konstanten statt „magischer Zahlen“
Schlechter Stil:
double area = 3.1415 * r * r; // Was ist 3.1415? Warum genau diese Zahl?
Guter Stil:
double area = PI * r * r; // Sofort ersichtlich, dass die Kreiszahl Pi verwendet wird
7. Häufige Fehler im Umgang mit Konstanten und var
Fehler Nr. 1: Versuch, den Wert einer final-Variable zu ändern. Wenn eine Variable mit final deklariert ist, führt eine erneute Zuweisung zu einem Kompilierfehler.
Fehler Nr. 2: Versuch, eine Konstante mit var zu deklarieren. Für Konstanten verwenden Sie immer einen expliziten Typ zusammen mit final oder static final. var ist nur für lokale Variablen.
Fehler Nr. 3: falsche Benennung von Konstanten. Konstanten sollten in GROSSBUCHSTABEN_MIT_UNTERSTRICHEN benannt werden. Eine Schreibweise wie final int maxUsers = 100; verschlechtert die Lesbarkeit.
Fehler Nr. 4: Geltungsbereich vergessen. Eine Konstante, die innerhalb einer Methode deklariert ist, ist nur dort sichtbar. Für die Verwendung in der ganzen Klasse deklarieren Sie sie auf Klassenebene als static final.
Fehler Nr. 5: Annehmen, dass final ein Objekt unveränderlich macht. final fixiert die Referenz, nicht den Zustand des Objekts – das sind verschiedene Dinge.
GO TO FULL VERSION