黑马程序员技术交流社区
标题:
【求助】今天看到高新最后1课,也来了个内部类,晕到了
[打印本页]
作者:
林豪
时间:
2012-5-28 22:41
标题:
【求助】今天看到高新最后1课,也来了个内部类,晕到了
final ArrayList target = new ArrayList();
Collection proxy3 = (Collection)Proxy.newProxyInstance(Collection.class.getClassLoader(),
new Class[]{Collection.class},
new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
long beginTime = System.currentTimeMillis();
Object retVal = method.invoke(target, args);
long endTime = System.currentTimeMillis();
System.out.println(method.getName() + "running time of" + (beginTime-endTime));
return retVal;
}
复制代码
话说内部类不是可以直接访问外部类的变量吗?
为什么还要加final才可以?
作者:
黑马-唐磊
时间:
2012-5-28 22:48
本帖最后由 黑马-唐磊 于 2012-5-28 22:51 编辑
内部类不能访问方法局部变量,想访问必须final,因为内部内是一个类,是在堆内存里,创建对象也在堆内存,在内部内访问方法的局部变量就是栈内存的局部变量,用堆内存的数据去访问栈内存的数据是访问不到的,因为堆内存比栈内生命周期长,所以加上final则变量就变成常量,常量是放在常量池也在堆内存,所以生命周期一样.
作者:
秦冲
时间:
2012-5-28 22:48
本帖最后由 秦冲 于 2012-5-28 22:50 编辑
是不是 target 在main方法中,是局部变量,不是类的成员变量。接下来就不用我说了~
作者:
小小企鹅
时间:
2012-5-28 22:49
内部类分了好几种,在一个方法中定义的类,通常是匿名类。
在这种匿名内部类中,如果要访问那个包含着该类的方法中的某个局部变量,那个局部变量就必须是用 final 修饰的。
作者:
林豪
时间:
2012-5-28 23:11
了解了,我学太久了了,结果都懵了..
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2