Método: la clase interna local no puede acceder a las variables locales porque la instancia de la clase interna local del método puede seguir activa después de que el método haya finalizado. Pero las variables locales desaparecerán una vez que el método local haya terminado. Me enteré de que la clase interna local del método puede acceder a la variable local final, ¿significa esto que la variable local final sigue viva después de que el método ha terminado?Alcance de la variable local final en java
Respuesta
Tipo de. Las clases internas anónimas de Java actúan como "cierres", es decir, "cierran" alrededor del estado local actual. Sin embargo, Java solo permite que estas clases se cierren alrededor de las variables finales. Si no fuera así, el estado local de la variable podría cambiar, pero la versión de la clase interna no lo haría, por lo que accedería a una instancia "desactualizada". Esto podría ser confuso para un programador.
En su lugar, Java requiere que la instancia maneje la mutabilidad mediante métodos, no con la reasignación de variables. Esto conduce a una mayor claridad y permite una depuración más simple. Para obtener más información acerca de por qué Java hace esto, consulte this answer.
Dado que la clase todavía contiene una referencia a la variable, la respuesta a su pregunta es sí, esa instancia no será basura hasta que la clase interna renuncie a la propiedad de la variable.
* "Esto podría ser confuso para un programador." * - Más al punto, ya no sería "como" un cierre. Tendría un nombre de identificador que tiene un enlace observablemente diferente, según el contexto léxico. –
@Stephen Bastante, y un buen punto. –
No, no lo hace. Significa que una copia de la variable local aún está activa, en la instancia de clase interna. El 'final' solo asegura que las dos copias no divergen confusamente en valor.
- 1. alcance local en Java
- 2. Pregunta de alcance de variable local
- 3. variable estática final en Java
- 4. última variable local en Java
- 5. Método La clase interna local solo puede acceder a la variable local final.¿Por qué?
- 6. Conmutador Java: declaración de variable y alcance
- 7. No se puede asignar la variable local final
- 8. En ArrayBlockingQueue, ¿por qué copiar el campo miembro final en la variable final local?
- 9. Alcance de la variable en Stylus
- 10. Bloque variable y sincronizado final en java
- 11. entendimiento global y alcance local en Javascript
- 12. java: ¿Por qué la variable local debe ser declarada definitiva
- 13. Alcance variable en PowerShell
- 14. Recolección de basura en una variable local
- 15. Alcance de la variable en XSLT
- 16. Alcance de variable en la página aspx
- 17. Inicializar la variable final antes del constructor en Java
- 18. Problema con el alcance de la variable
- 19. Alcance de la variable en las funciones de VBScript
- 20. Alcance de variable en C#
- 21. Java: clase interna anónima usando una variable local
- 22. clase interna variable no final java
- 23. Alcance variable de Bash
- 24. variable local de Javascript declarar
- 25. final variable local no se haya inicializado en la clase interna anónima
- 26. convertir la variable local de JavaScript en la variable global
- 27. alcance Variable + eval en Clojure
- 28. Peculiar Alcance de Java
- 29. Alcance variable fuera de la función jQuery
- 30. Alcance variable Dentro de la clase PHP
¿Desea publicar su ejemplo para que nadie malinterprete su pregunta accidentalmente? Somos codificadores, y el código de Java daría mucha más claridad. – jmort253
Creo que esto es lo que quieres decir, y _no_ no funciona. http://ideone.com/LNg9w –
@HunterMcMillen La pregunta es acerca de las clases de método local, no de otros métodos. – Jeffrey