Stellen Sie sich ein Szenario vor, in dem die Ausführung einer Methode mehrere Rückgabeanweisungen innerhalb eines try-finally-Blocks durchläuft. Es stellt sich natürlich die Frage: Welche Rückgabeanweisung bestimmt letztendlich den endgültigen Rückgabewert der Methode? Um diesem Rätsel auf den Grund zu gehen, analysieren wir einen bestimmten Codeausschnitt:
String test() { try { return "1"; } finally { return "2"; } }
Die Faszination besteht darin, zu verstehen, ob der Rückgabewert eines Aufrufs von test() über alle Java Virtual Machines (JVMs) hinweg konsistent ist. Die Java-Sprachspezifikation birgt den Schlüssel zu diesem Rätsel.
Gemäß der Java-Sprachspezifikation überschreibt die Rückgabe vom „finally“-Block die Rückgabe vom „try“-Block. Somit wird „2“ eindeutig als endgültiger Rückgabewert bezeichnet, unabhängig von der verwendeten JVM.
Empirisch hält sich die Sun JVM an diese Spezifikation, Gibt konsequent „2“ als Rückgabewert für test() zurück. Es ist jedoch wichtig zu beachten, dass es sich bei dieser Konformität nicht nur um eine JVM-spezifische Eigenart handelt.
Die Spezifikation schreibt dies ausdrücklich vor, und jede JVM, die davon abweicht, gilt als nicht konform. Daher kann man mit Sicherheit behaupten, dass der endgültige Rückgabewert in jeder spezifikationskonformen JVM immer „2“ sein wird.
Die Spezifikation sorgt zwar für Klarheit darüber Aufgrund des Rückgabewertverhaltens wird dringend davon abgeraten, mehrere Rückgaben innerhalb einer einzigen Methode zu verwenden. Solche Codierungspraktiken führen zu unnötiger Verwirrung und verstoßen gegen grundlegende Codierungsprinzipien.
Compiler geben häufig Warnungen vor diesem fragwürdigen Ansatz aus, wie die Behauptung von Eclipse zeigt, dass der Rückgabeblock von test() niemals (fehlerhaft) ausgeführt wird. Machen Sie sich die Weisheit der Sprachspezifikation zu eigen und vermeiden Sie diese Codierungsabscheulichkeiten.
Das obige ist der detaillierte Inhalt vonWelche Return-Anweisung steht an erster Stelle: Den endgültigen Wert in einem Try-Finally-Block entschlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!