局部内部类访问局部变量的问题
来源:互联网 发布:java c base64 编辑:程序博客网 时间:2024/06/05 14:49
但是,今天在石松老师的讲解并演示下,我彻底明白了,只有一个原因,那就是:生命周期的原因.
class Outerx{
public void show(){
int x=6;
class Inner{
public void function(){
System.out.println("hei"+x);
}
}
new Inner().function();
}
}
此时如果编译的话,会提示:从内部类中访问本地变量x,需要被声明为最终类型.
如果加上最终类型,final 后 final int x = 6; 再次进行编译,则会成功输出内容.
那么问题来了,为什么加上一个final后,就会成功运行了呢?就像我前面说的,生命周期.....可是有的书上也写道,
是延长了变量的生命周期,对于这样的话,我想说:明显是不正确的.
可以做个小实验,比如在main方法里面写:
public static void main(String[]ag){
{
final int x = 100;
}
System.out.println(x);
}
此时如果编译的话,会提示:找不到符号 ,出去了范围以后,就不能再使用了,此处说final延长了生命周期,明显已经站不住脚了.
而解决这个问题,可以换一个思路,也许只是绕过了这个棘手的问题呢?
也就是说:加上了final以后,x的值固定为了6,Java编译的时候,后面访问x的地方,直接写成了6,就不让x再出现了.
话虽如此,也要验证一下,比如,可以反编译一下,就可以清楚的看到class文件里面虽然有一堆乱码,但是乱码中间有这样几个词还是可以认得的
hei!6
在局部内部类和局部变量是同样的级别,因此,不存在超出范围,也就是找不到符号的前提下,sun公司巧妙的规避了这样的一个问题,通过final关键字,让输出语句内的变量变成了常量固定的值.
- 局部内部类访问局部变量的问题
- Java内部类访问局部变量时的final问题
- Java内部类访问局部变量时的final问题
- Java内部类访问局部变量时的final问题
- Java内部类访问局部变量时的final问题
- Java内部类访问局部变量时的final问题
- Java内部类访问局部变量时的final问题
- 内部类的访问局部变量
- 局部内部类不能访问局部变量
- 局部内部类访问final局部变量
- 局部内部类访问局部变量细节
- 局部内部类访问局部变量
- 局部内部类访问final局部变量
- 关于局部内部类访问final局部变量的分析
- 面向对象_局部内部类访问局部变量的问题
- 局部内部类和匿名内部类访问final的局部变量---一个元素的数组
- java局部内部类和匿名内部类访问局部final变量的剖析
- 为什么局部内部类和匿名内部类只能访问final的局部变量?
- 在Linux(ubuntu10.10)系统中使用摄像头之USB摄像头
- hdu 4472 dp
- csu 1503: 点到圆弧的距离-湖南省第十届大学生计算机程序设计竞赛
- 程序员生存定律--升华成高手的可能方法
- 黑马程序猿_OC之三大特性
- 局部内部类访问局部变量的问题
- C语言 return多值的解决方案
- 小编程题之检测字符串表达式中括号是否配对
- php计算抽奖的概率
- elasticsearch时间格式索引管理工具: curator
- UVA - 10057 A mid-summer night's dream. 子序列
- 安装commerce_kickstart全记录
- 动态开辟二维数组,初始化二维数组指针
- 创建MFC项目时,出现链接error,如error LINK2001