2012-05-20 17 views
6

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

+3

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

+0

Ich denke, das ist, was Sie meinen, und _no_ es funktioniert nicht. http://ideone.com/LNg9w –

+0

@HunterMcMillen Die Frage bezieht sich auf Methoden-lokale Klassen, keine anderen Methoden. – Jeffrey

Antwort

7

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.

+1

* "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. –

+0

@Stephen Fair genug, und ein guter Punkt. –

1

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.

Verwandte Themen