黑马程序员技术交流社区

标题: 关于张老师的交通灯管理系统的一些问题 [打印本页]

作者: 昝文萌    时间: 2013-9-21 18:20
标题: 关于张老师的交通灯管理系统的一些问题
本帖最后由 昝文萌 于 2013-9-22 07:44 编辑

在Road类里面有一段开启线程增加车辆的代码
  1. public class Road {
  2.         private List<String> vechicles = new ArrayList<String>();
  3.         
  4.         private String name =null;
  5.         public Road(String name){
  6.                 this.name = name;
  7.                
  8.                 //模拟车辆不断随机上路的过程               
  9.                 ExecutorService pool = Executors.newSingleThreadExecutor();
  10.                 pool.execute(new Runnable(){
  11.                         public void run(){
  12.                                 for(int i=1;i<1000;i++){
  13.                                         try {
  14.                                                 Thread.sleep((new Random().nextInt(10) + 1) * 1000);
  15.                                         } catch (InterruptedException e) {
  16.                                                 e.printStackTrace();
  17.                                         }
  18.                                         vechicles.add(Road.this.name + "_" + i);
  19.                                 }                                
复制代码
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