现在的位置: 首页 > 综合 > 正文

Java学习疑点(1)–为何在局部内部类中无法直接访问本地变量?须修饰为final才可直接访问.

2013年08月25日 ⁄ 综合 ⁄ 共 530字 ⁄ 字号 评论关闭

最近在实现一个对JTextField监听字符长度功能中使用了匿名内部类,其中引用了本地的两个变量,编译时出错,被告知“需要被声明为最终类型",甚是疑惑,于是在网上搜索其原因, 在此作一总结。

 

局部内部类(在方法内部定义的类)中无法直接访问方法中的局部变量,须修饰其为final

1:变量的生命周期与局部内部类的对象的生命周期不一致从而导致了这个问题,一个方法运行结束,其局部变量就随之被回收,而对象的生命周期的终点却不是在此,只有当不再引用该对象时,它才会被回收。倘若具备内部类可以直接访问本地变量,那么就有可能出现一个现象:对象在访问一个已经不存在的变量。

 

2:我们假设局部内部类中可以直接访问方法中的局部变量,且不需要其为final型。我们知道,在内部类中访问变量实际上是在访问该变量的复制品,如果上述条件成立,无论是基本类型还是引用类型,那么一旦局部变量实体或者复制品任何一方发生改变,都不能相互同步,从而造成变量的实体与复制品不一致,想象一下你看着是在访问一个变量,然而你得到的值却与实际的值不同,因此这样就毫无意义可言。

 

在一定意义上,这是Java语言的硬伤,程序设计语言的设计是受到实现技术的限制的,希望在未来,技术不断进步发展,这个限制可以得到解决。

【上篇】
【下篇】

抱歉!评论已关闭.