Method-lokaler innere Klasse kann nicht auf lokale Variablen zugreifen, da die Instanz der Verfahren lokales inneren Klasse kann noch am Leben, nachdem das Verfahren beendet ist. Aber lokale Variablen werden verschwinden, sobald die lokale Methode beendet ist. Ich habe gelernt, dass Methode-lokale innere Klasse Zugriff auf letzte lokale Variable, bedeutet dies letzte lokale Variable noch am Leben, nachdem die Methode beendet ist?Umfang letzten lokalen Variable in Java
Antwort
Sort of. Java anonyme innere Klassen verhalten sich wie "Schließungen", dh sie "schließen" um den aktuellen lokalen Zustand herum. Java lässt diese Klassen jedoch nur um finale Variablen herum schließen. Wenn dies nicht der Fall ist, könnte sich der lokale Status der Variablen ändern, aber die Version, die in der inneren Klasse enthalten ist, würde dies nicht tun, also würde sie auf eine "veraltete" Instanz zugreifen. Dies könnte für einen Programmierer verwirrend sein.
Stattdessen erfordert Java dass Veränderlichkeit von der Instanz durch Methoden behandelt werden, nicht variabel Neuzuordnung. Dies führt zu einer besseren Übersichtlichkeit und ermöglicht ein einfacheres Debugging. Weitere Informationen darüber, warum Java dies tut, finden Sie unter this answer.
Da die Klasse immer noch einen Verweis auf die Variable enthält, lautet die Antwort auf Ihre Frage ja, diese Instanz wird nicht mit Garbage Collection erfasst, bis die innere Klasse die Eigentümerschaft der Variablen aufgibt.
* "Dies könnte für einen Programmierer verwirrend sein." * - Mehr noch, es wäre nicht mehr "wie" eine Schließung. Sie hätten einen Bezeichnernamen, der abhängig vom lexikalischen Kontext eine deutlich andere Bindung aufweist. –
@Stephen Fair genug, und ein guter Punkt. –
Nein, tut es nicht. Dies bedeutet, dass eine Kopie der lokalen Variablen in der inneren Klasseninstanz noch am Leben ist. Das "Finale" stellt nur sicher, dass die zwei Kopien nicht im Wert abweichen.
- 1. Entkoppelung AngularJS Umfang variable Werte von lokalen Variablen Werte
- 2. Versalien- variable Umfang in Rails
- 3. Umfang Variable in Javascript Problem
- 4. Variable Umfang python3
- 5. php variable Umfang quetion
- 6. Lambda variable Umfang
- 7. jquery Variable Umfang Problem
- 8. initialisieren JavaScript-Variable mit AngularJS Umfang variable
- 9. Umfang Python Variable für loop
- 10. Wo sind die letzten lokalen Java-Variablen gespeichert?
- 11. js Namespaces und variable Umfang
- 12. Variable Umfang in Javascript für Schleife
- 13. ungerade Variable Umfang in switch-Anweisung
- 14. Variable Umfang und versuchen Catch in Python
- 15. TCL Variable Umfang: eine Variable in einem Befehl deklarierte Zugriff
- 16. Umfang einer Variablen in C#
- 17. Umfang Variable automatisch aktualisiert, wenn ich einen anderen Umfang bin Aktualisierung Variable
- 18. Python 3 Ausnahme löscht Variable Umfang aus unbekanntem Grunde
- 19. Semantik der lokalen endgültigen Variable im Java Memory Model?
- 20. Java Class Umfang und Bibliothek
- 21. PHP mit include() Variable Umfang Problem
- 22. try-Block Grenzen Umfang von const variable
- 23. JQuery/Javascript Variable Umfang Problem mit $ .get
- 24. Update-Umfang variable doesnt Änderung Ausgabe
- 25. Umfang der Variablen in Java/Android-Code.
- 26. Probleme mit Umfang und Pakete in Java
- 27. Wie setze ich Objekt/Variable, um Umfang mit PHP anzufordern
- 28. einen wiederholten Umfang Variable in verschiedenen Controllern in AngularJS
- 29. pyspark bestehen Änderungen Variable außerhalb von Mapper Umfang
- 30. Umfang der Python-Variablen in diesem Fall - Unterschied zwischen umschließenden und lokalen Variablen
Care Ihr Beispiel zu veröffentlichen, so dass niemand Ihre Frage versehentlich falsch versteht? Wir sind Programmierer, und der Java-Code würde das viel mehr Klarheit geben. – jmort253
Ich denke, das ist, was Sie meinen, und _no_ es funktioniert nicht. http://ideone.com/LNg9w –
@HunterMcMillen Die Frage bezieht sich auf Methoden-lokale Klassen, keine anderen Methoden. – Jeffrey