黑马程序员技术交流社区

标题: 程序中的几句句代码求分析下。。。 [打印本页]

作者: 常万    时间: 2012-4-12 12:11
标题: 程序中的几句句代码求分析下。。。
//以下程序使用内部类实现线程,对增减的时候没有考虑顺序问题。
public class ThreadTest
{

         
        private int j;
        /**
         * @param args
         */
        public static void main(String[] args)
        {
               
        ThreadTest tt = new ThreadTest();
        Inc inc = tt.new Inc();//tt.new Inc()是什么意思啊?对象.对象这样做的目的是什么?
        Dec dec = tt.new Dec();
        //Inc inc = new Inc();
        //Dec dec = new Dec();
                         for(int i=0;i<2;i++)
                         {
                        Thread t = new Thread(inc);
                        t.start();
                        t=new Thread(dec);
                        t.start();
                         }
       

        }
       
                private  synchronized void inc()
                {
                        j++;
                        System.out.println(Thread.currentThread().getName()+"-inc"+j);
                }
                private synchronized void dec()
                {
                        j--;
                        System.out.println(Thread.currentThread().getName()+"-dec"+j);
                }

        class Inc implements Runnable//内部类实现Runnable接口,线程对计数器+1

        {
                public void run()
                {
                        for(int i=0;i<100;i++)
                        {
                                inc();
                        }
                }
        }
        class Dec implements Runnable//内部类实现Runnable接口,线程对计数器-1
        {
                public void run()
                {
                        for(int i=0;i<100;i++)
                        {
                                dec();
                        }
                }
        }
       
}
作者: 尹博    时间: 2012-4-12 12:37
Inc 和Dec都是非静态的内部类,要在调用之前建立对象,你之前为了使用Inc和Dec已经建立了ThreadTest对象了,但是要建立Inc和Dec的对象必须知道这两个内部类成员所在的对象的地址,所以用tt标识Inc这个成员所在的对象,用tt.new Inc()新建Inc成员对应的对象,相当于是new ThreadTest().new Inc()
作者: 未长法    时间: 2012-4-12 12:39

1,当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。
可以直接建立内部类对象。
格式
        外部类名.内部类名  变量名 = 外部类对象.内部类对象;
        Outer.Inner in = new Outer().new Inner();
如果是在本类中建立内部对象。
            内部类名  变量名 = 外部类对象.内部类对象;
ThreadTest tt = new ThreadTest();
        Inc inc = tt.new Inc();
就等同于
内部类名  变量名 = 外部类对象.内部类对象;所以它就是在本类中建立内部类对象
           
作者: 未长法    时间: 2012-4-12 12:40
也就是在ThreadTest 中建立内部类Inc 对象。
作者: 常万    时间: 2012-4-12 18:41
懂了。。感谢...很清楚




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