diff --git a/Aufpassen%21.md b/Aufpassen%21.md index 319e705..1525126 100644 --- a/Aufpassen%21.md +++ b/Aufpassen%21.md @@ -67,7 +67,7 @@ Trowable - **`throw null`** führt zu `NullPointerException` - **switch**: -`ausdruck` muss Typ `enum`, `byte`, `short`, `int`, `char` oder `String` ergeben - - Vom Compiler berechenbare Audrücke in case-Anweisungen sind erlaubt + - Vom Compiler berechenbare Audrücke in case-Anweisungen sind erlaubt (compile time constant). ``final int i = 1;`` geht, ``final int i; i = 1`` geht nicht. - **Erlaubte Identifier-Namen**: - Müssen mit `_`, `$` oder Buchstabe beginnen - Danach auch Zahlen erlaubt @@ -169,4 +169,9 @@ Trowable - remove: Entfernt das **erste** Element der Liste, Vergleich per equals - **Zahl-Literale und Unterstriche**: - Nicht am Anfang oder Ende erlaubt. (Bei double, float auch nicht vor oder hinter Dezimalpunkt) -- **Encapsulation**: Beim Setzen und Rückgabe von Listen (und eigentlich allen komplexen Typen) Kopie erzeugen. Immutable Objekte Sonderfall. \ No newline at end of file +- **Encapsulation**: Beim Setzen und Rückgabe von Listen (und eigentlich allen komplexen Typen) Kopie erzeugen. Immutable Objekte Sonderfall. +- **Lokale Variablen und final-Felder: Bedingte Initialisierung**: Wann meckert der Compiler? + - Nur wenn der Compiler sicher ist, dass eine Variable initialisiert wurde, gibt es keinen Compilerfehler + - Compiler prüft aber keine Bedingungen (``if (true)`` genügt, ``if (b = true)`` nicht) + - Bei Zuweisungen zu ``final`` ähnlich: Compiler ahndet Mehrfachzuweisung, wenn er Bedingung nicht eindeutig auflösen kann. ``if (true) s3= "Hallo"; if (false) s3 = "Welt";`` geht, ``if (b) s3= "Hallo"; if (!b) s3 = "Welt";`` geht nicht. ``final boolean c = false; if (c) s6 = "Hallo"; if (!c) s6 = "Welt";`` geht, da c final ist. + - \ No newline at end of file