Auswirkungen von schließlich blockieren auf return value
In Java können das Verhalten eines endgültigen Blocks des Rückgabewerts einer Methode kontraintuitiv sein . Lassen Sie uns einen Code -Snippet analysieren und mit den zugrunde liegenden Gründen für dieses Phänomen befassen.
Betrachten Sie den folgenden Code:
public class Test { private String s; public String foo() { try { s = "dev"; return s; } finally { s = "override variable s"; System.out.println("Entry in finally Block"); } } public static void main(String[] xyz) { Test obj = new Test(); System.out.println(obj.foo()); } }
Bei der Ausführung druckt der Code "Eintrag in endlich block", gibt aber "dev." Zurück. Dies liegt daran, dass der Rückgabewert durch die Ausführung der Rückgabeerklärung im Try -Block bestimmt wird. Die Änderung an 's' im endgültigen Block erfolgt nach Abschluss des Try -Blocks und spiegelt sich daher nicht im Rückgabewert wider.
Es ist wichtig zu beachten, dass dies für Änderungen des Wertes von 's' gilt selbst nicht Änderungen in den Referenzen des Objekts. Wenn 's' ein Verweis auf ein veränderliches Objekt wäre und sein Inhalt im endgültigen Block geändert wurde, wären diese Änderungen im Rückgabewert sichtbar.
Die Java -Sprachspezifikation (JLS) beschreibt die detaillierten Regeln dafür Verhalten in Abschnitt 14.20.2. Bei einer Versuchsanweisung, wenn sowohl der Try-Block als auch der schließlich den Block Rückgabeanweisungen haben, wird der Rückgabewert des endgültigen Blocks vorherrschen. Dies liegt daran, dass die Ausführung einer Return -Anweisung als abrupte Beendigung des Blocks angesehen wird. Änderungen an der Variablen in einem endgültigen Block, ob im Wert oder durch Objektänderung, wirken sich nicht auf den Rückgabewert aus, es sei denn, der schließlich blockieren schließlich auch eine Rückgabeanweisung.
.Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3