黑马程序员技术交流社区
标题:
内部类访问外部成员变量
[打印本页]
作者:
lonely_zb
时间:
2013-9-11 15:33
标题:
内部类访问外部成员变量
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
try {
Thread.sleep((new Random().nextInt(10)+1)*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
vecirles.add(Road.this.name+"_"+i);
}
}
});
vecirles.add(Road.this.name+"_"+i)----这样的访问方式是可以的,这个表示的是什么意思呢? 不是把name编程final了就可以了吗...?
作者:
.....淡定
时间:
2013-9-11 15:58
final修饰的话。。name的值就确定了。。但是这里面name的值是可变的。。所以不能用final修饰
作者:
静以修身
时间:
2013-9-11 16:11
本帖最后由 静以修身 于 2013-9-11 16:15 编辑
内部类定义在外部类上的位置分为两种情况,一是内部类可以定义在外部类中的成员位置上,二是定义在外部类中的局部位置上。如果是定义在外部类中的成员位置上,内部中都持有一个外部类的引用外部类名.this ,内部类可以直接访问外部类中的成员,可以隐藏外部类名.this 。而如果义在外部类中的局部位置上,则必须加上外部类名.this 。你这道题是第二种情况,所以调用外部成员变量时必须显示加上外部类名.this ,即外部类名.this .成员变量名。而你问题:不是把name编程final了就可以了吗...?不行的,因为它不是局部变量,因为内部类被定义在局部位置上,只能访问局部中被final修饰的局部变量,被final修饰的必须是局部变量而不是成员变量,所以不能在成员变量上加上final。如果你要访问局部变量的话就必须在局部变量上加上final。对了,类名.this 代表外部类对象的引用。
作者:
code_geass
时间:
2013-9-11 18:32
name是成员变量,内部类可以直接引用。但是现在方法中也有个name。就是构造函数的name。所以为了区别用的是哪一个name,就需要用全名的引用。就是类名.this.变量名。
作者:
风叶漂
时间:
2013-9-11 20:31
final不是只能被赋予一次,以后不能在改变了
作者:
楞个里格朗
时间:
2013-9-12 00:05
被final修饰后就成常量了,不能更改常量的值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2