码迷,mamicode.com
首页 > 编程语言 > 详细

java内部类,局部变量加Final分析

时间:2015-08-21 13:29:07      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

之前在使用内部类,对外部局部变量要加final一直不是特别理解,今天心血来潮想要弄个明白。

 1 public class Outer {
 2     public Parent method() {
 3         final int n = 8;
 4         
 5         class Inner extends Parent{
 6             public void show() {
 7                 System.out.println("number:" + n);
 8             }
 9         }
10         return new Inner();
11     }
12     public static void main(String[] args) {
13         Outer o = new Outer();
14         Parent p = o.method();
15         p.show();
16     }
17 }
18 
19 class Parent{
20     public void show() {
21         System.out.println("parent");
22     } 
23 }

首先我在method方法里面定义了一个int类型的变量跟Inner(类名)内部类。然后在Inner里面写了

show()方法引用了n变量,加上了final修饰。然后我返回了Inner对象,注意分析此时method方法

执行完后变量n已经被销毁了。那么n变量又怎么还在呢?难道加上final就会一直驻留在内存中?于

是我上网查final的生命周期,发现不是。然后在一篇技术帖中找到答案。

如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用

是final 的。经研究,Java虚拟机的实现方式是,编译器会探测局部内部类中是否有直接使用外部

定义变量的情况,如果有访问就会定义一个同类型的变量,然后在构造 方法中用外部变量给自己

定义的变量赋值。引用至   http://developer.51cto.com/art/200906/128214.htm

java内部类,局部变量加Final分析

标签:

原文地址:http://www.cnblogs.com/luck0318/p/4747486.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!