Noch ein Beispiel für 'Variable ist außerhalb des Geltungsbereichs'
Da ich diese Art von Fragen schon ein paar Mal gesehen habe, vielleicht noch ein Beispiel dafür, was illegal ist, auch wenn es sich vielleicht richtig anfühlt.
Betrachten Sie diesen Code:
if(somethingIsTrue()) {
String message = "Alles ist in Ordnung";
} else {
String message = "Es ist ein Fehler aufgetreten";
}
System.out.println(message);
Das ist ungültiger Code. Denn keine der Variablen mit dem Namen message
ist außerhalb ihres jeweiligen Geltungsbereichs sichtbar - in diesem Fall wären es die umgebenden geschweiften Klammern {}
.
Sie könnten sagen: "Aber eine Variable mit dem Namen message ist so oder so definiert - also ist message nach dem if
definiert".
Aber Sie lägen falsch.
Java hat keine free()
oder delete
Operatoren, daher muss es sich auf das Verfolgen des Gültigkeitsbereichs von Variablen verlassen, um herauszufinden, wann Variablen nicht mehr verwendet werden (zusammen mit Verweisen auf diese Variablen natürlich).
Es ist besonders schlimm, wenn man denkt, man hätte etwas Gutes getan. Ich habe diesen Fehler oft gesehen, nachdem ich Code "optimiert" hatte, zum Beispiel so:
if(somethingIsTrue()) {
String message = "Alles ist in Ordnung";
System.out.println(message);
} else {
String message = "Es ist ein Fehler aufgetreten";
System.out.println(message);
}
"Oh, da ist doppelter Code, lass uns diese gemeinsame Zeile herausziehen" -> und da ist es.
Der häufigste Weg, mit dieser Art von Geltungsbereichsproblemen umzugehen, wäre es, die else-Werte den Variablennamen im äußeren Geltungsbereich vorab zuzuweisen und sie dann im if erneut zuzuweisen:
String message = "Es ist ein Fehler aufgetreten";
if(somethingIsTrue()) {
message = "Alles ist in Ordnung";
}
System.out.println(message);