黑马程序员技术交流社区
标题:
关于张老师的交通灯管理系统的一些问题
[打印本页]
作者:
昝文萌
时间:
2013-9-21 18:20
标题:
关于张老师的交通灯管理系统的一些问题
本帖最后由 昝文萌 于 2013-9-22 07:44 编辑
在Road类里面有一段开启线程增加车辆的代码
public class Road {
private List<String> vechicles = new ArrayList<String>();
private String name =null;
public Road(String name){
this.name = name;
//模拟车辆不断随机上路的过程
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){
public void run(){
for(int i=1;i<1000;i++){
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i);
}
复制代码
vechicles.add(Road.this.name + "_" + i);//这里为什麽要用Road.this.name ,内部类不是直接可以访问成员变量name吗?为什麽还要加Road.this
直接写成vechicles.add(name + "_" + i)不行吗?
作者:
麦子609
时间:
2013-9-21 18:42
内部类不可以直接访问外部类的成员变量,如果要访问需要外部类名.this.成员变量名
作者:
胡智
时间:
2013-9-21 18:44
因为这个内部类是定义在局部位置上的。
局部位置上的内部类,想要获取外部类中的成员变量,需要用outer.this.xxx这个格式获取。
另外补充下,局部位置上的内部类要获取局部变量,那这个局部变量要被final修饰。
具体你可以再看下毕老师视频里的内部类。
作者:
神之梦
时间:
2013-9-21 19:06
因为这个匿名内部类是定义在方法里,也称局部类,此时内部类只能访问被final修饰的局部变量,而这里的name不可以被final修饰,所以用加外部类.this的方式,表示它访问的是外部类的变量
作者:
早知道
时间:
2013-9-21 22:27
本帖最后由 早知道 于 2013-9-21 22:31 编辑
内部类是可以直接访问外部类的成员变量的。但内部类所以能访问外部类成员变量就是因为内部类含外部的引用,其全名就是Road.this.name,平时可以省略。但如果遇到内部类成员变量名称和这个name一样,或者调用方法里面局部变量名称和name一样,就一定要使用Road.this.name。本例中,因为出现了局部变量,所以如果要访问外部类的成员变量,就要使用全称。如果你是要使用该方法的局部变量的话,那方法中的参数 String name 就要改成final String name.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2