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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田向向 高级黑马   /  2012-7-4 16:48  /  1545 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田向向 于 2012-7-4 21:54 编辑

刚才查有关内部类的资料时看到这么一个例子,没有看明白,找高手请教一下:
package mianxiangduixiang;
public class thistest {
     public void Test(final String name)             //1
     {
             new Thread(new Runnable(){          //2
     public void run()
     {
             System.out.println(name);            //3
     }                  
             }).start();                                      //4
     }
     public static void main(String[] args) {
         new thistest().Test("黑马程序员");
}
}

我不明白的是,2和4 是什么意思??有什么用?这个程序的运行过程是怎样的?
为什么这里的参数一定要是用final才能都传给内部类呢?
请高手们不吝赐教

4 个回复

正序浏览
其实程序中2到4,是连着的一个整体。这算是多线程和内部类结合的知识点吧。
在new Thread()中要传入一个Runnable接口的子类对象,而程序中就是直接在
方法中new一个Runnable的子类对象,这也是一个匿名内部类的做法,接着在run()
方法主体中打印局部变量name,而内部类还有一个特点就是局部内部类要访问局部
变量时,该局部变量也必须得用final修饰的,这是语法上的要求。接着程序就调用
start()方法启动线程了。

点评

谢谢啊  发表于 2012-7-4 21:53

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
额,原来2楼有版主的回答。。。。这回露怯了,向版主学习学习
回复 使用道具 举报
你这段代码里涉及到了多线程,2是new了一个匿名的线程实例,里面重写了run(),第四步就是激活了线程。应该这么个意思
回复 使用道具 举报
本帖最后由 韦念欣 于 2012-7-4 16:56 编辑

这段代码使用了多线程技术,2是创建一个匿名内部类,重写run方法,也就是想让线程执行的代码,4是开启线程,让线程处于就绪状态。
匿名内部类中,如果要使用外部类的变量,那么这个变量必须使用final修饰。

点评

谢谢版主,稍微有一点明白,原来有多线程啊,,我还没学到多线程,等看到那个地方,再回来看看这个代码,谢谢啦  发表于 2012-7-4 21:54
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马