A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫嘉伟 中级黑马   /  2013-2-27 23:08  /  1231 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.isoftstone.interview.traffic;

import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Road {
        List<String> verhicle=new ArrayList<String>();       
        private String name=null;
        public Road( String name){
                name=name;
                //产生一个线程池
                ExecutorService pool=Executors.newSingleThreadExecutor();
                pool.execute(new Runnable(){
                                public void run(){
                                        for(int i=0;i<1000;i++){
                                                try{Thread.sleep((new Random().nextInt(10)+1)*1000);}
                                                catch(InterruptedException e){
                                                        e.printStackTrace();
                                                }
                                                verhicle.add(Road.this.name+" "+i);
                                        }
                                }
                                });
                     
                      ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);
                      timer.scheduleAtFixedRate(new Runnable(){
                              public void run(){
                                      if(verhicle.size()>0){
                                              boolean lighted=Lamp.valueOf(Road.this.name).isLighted();
                                              if(lighted){
                                                      System.out.println(verhicle.remove(0)+"is travelling");
                                              }
                                      }
                              }
                              
                      },
                      1,
                      1,
                      TimeUnit.SECONDS);
                     
               
               
        }
}
我记得内部类是可以直接访问外类的private成员的,连private成员都可以直接访问我想其他权限的成员就更不用说了吧,可是为什么在这里内部类中调用外部类的name成员时要用Road.this.name这样的方式呢,还有就是说这行代码中间这this代表了啥?代表了内部类对象吗?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

2 个回复

倒序浏览
为什么在这里内部类中调用外部类的name成员时要用Road.this.name这样的方式呢

因为构造方法内也存在一个名字为name的局部变量,所以需要使用Road.this.name的方式去访问外部类的name变量,其中的this代表外部类对象

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
用Road.this.name的原因是出现了同名变量,在Road()方法中也存在一个name局部变量,所以那应写成this.name = name。而Road.this.name里的this指的是外部类的那个对象了。this指什么,看它在哪出现的或者前边有什么  类名.this.变量,指的是那个类里的一个变量。

评分

参与人数 1黑马币 +6 收起 理由
陈丽莉 + 6

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马