黑马程序员技术交流社区
标题:
局部内部类如何访问final修饰的变量
[打印本页]
作者:
陈圳
时间:
2013-2-23 22:22
标题:
局部内部类如何访问final修饰的变量
class Outer
{
private int num=3;
void method()
{
final int nums=4;
class Inner
{
private int num=5;
void show()
{
int num=6;
System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);
System.out.println(nums);
}
}
Inner in=new Inner();
in.show();
}
}
class Demo
{
public static void main(String[] args)
{
new Outer().method();
}
}
复制代码
内部类可以存放在局部位置上。
内部类在局部位置上只能访问局部中被final修饰的局部变量。
刚写日记汇总内部类知识的时候,看到了知识点局部内部类只能访问局部中被方法访问的局部变量.然后我在类中各个地方都加入了同名变量.num并赋不同的值.
Outer.this.num=3;
this.num=5;
num=6;
被final修饰的局部变量.如果没有this.num是可以访问的,但是加入了就没办法访问了.程序不报错,但是除了改名以外,始终没有任何办法能访问到被final修饰的变量.
大家看下.
作者:
刘圣繁
时间:
2013-2-23 23:25
本帖最后由 刘圣繁 于 2013-3-1 10:23 编辑
不是说有两个同名变量的话 内部类必须刻意的去找 那个final变量访问 而是说局部内部类如果要想访问局部的变量的话那么此变量必须是fnal类型的 访问本类的成员变量当然不用final 这个final没关系 你这两个变量同名了就变成这种情况了
这是个局部变量作用范围问题 举例说明
函数里面有个内部类 内部类里面有个函数 姑且这就好比下面这个例子
public void show(){
int num=3;
for(int j=0;j<5;j++)
{
int num=9;
System.out.print("我是谁的变量? 请看我的值num="+num);
}
}
这里有两个num for循环输出语句打印的是99999 即在for循环里面 当访问到num的时候 会先找for循环里面时候有这个变量 没有的话再去for外面找
里面这个num将外面那个num覆盖了
作者:
游灿平
时间:
2013-2-24 01:47
你这个是局部内部类方法中的局部变量和外部类中的方法同名了。会优先调用离它近的局部变量
作者:
史政法
时间:
2013-2-24 06:01
学习了,,,
作者:
邢义敏
时间:
2013-2-24 07:51
学习学习,大家多交流哈
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2