黑马程序员技术交流社区

标题: 内部类 [打印本页]

作者: 田向向    时间: 2012-7-4 16:48
标题: 内部类
本帖最后由 田向向 于 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才能都传给内部类呢?
请高手们不吝赐教

作者: 韦念欣    时间: 2012-7-4 16:55
本帖最后由 韦念欣 于 2012-7-4 16:56 编辑

这段代码使用了多线程技术,2是创建一个匿名内部类,重写run方法,也就是想让线程执行的代码,4是开启线程,让线程处于就绪状态。
匿名内部类中,如果要使用外部类的变量,那么这个变量必须使用final修饰。
作者: 康子龙    时间: 2012-7-4 17:01
你这段代码里涉及到了多线程,2是new了一个匿名的线程实例,里面重写了run(),第四步就是激活了线程。应该这么个意思
作者: 康子龙    时间: 2012-7-4 17:02
额,原来2楼有版主的回答。。。。这回露怯了,向版主学习学习
作者: dev    时间: 2012-7-4 17:16
其实程序中2到4,是连着的一个整体。这算是多线程和内部类结合的知识点吧。
在new Thread()中要传入一个Runnable接口的子类对象,而程序中就是直接在
方法中new一个Runnable的子类对象,这也是一个匿名内部类的做法,接着在run()
方法主体中打印局部变量name,而内部类还有一个特点就是局部内部类要访问局部
变量时,该局部变量也必须得用final修饰的,这是语法上的要求。接着程序就调用
start()方法启动线程了。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2