黑马程序员技术交流社区

标题: 这样写有区别吗!?大家说说 [打印本页]

作者: 黑马吕世成    时间: 2012-11-3 19:18
标题: 这样写有区别吗!?大家说说
class Test
{
          String str = new String("");


}

class ThreadOne extends Thread
{
            Test tt = new Test();
            public void run()
            {
                    int i = 0;
                    while(i<3)
                    {
                       System.out.println("ThreadOne str = "+tt.str);
                       i++;
                    }
            }

            public ThreadOne(Test tt)
            {
                  this.tt = tt;//tt = tt
            }

}

class ThreadTwo extends Thread
{
            Test tt = new Test();
            public void run()
            {
                    int i = 0;
                    while(i<3)
                    {
                   i++;
                   System.out.println("ThreadTwo str = "+tt.str);
                    }
            }

            public ThreadTwo(Test tt)
            {
                      this.tt = tt;//tt = tt
            }

}

class Main
{
            public static void main(String[] args)
            {
                        Test tt = new Test();
                        new ThreadOne(tt).start();
                        try{Thread.sleep(10);}catch(Exception e){}
                        new ThreadTwo(tt).start();
}


上面代码中,用this与不用this有区别吗!?说说看法,我已经测试过,最后会给出答案,不过我的也不一定是正解,所以大家给点观点。嘿嘿


作者: 朱宏青    时间: 2012-11-3 20:34
当然有区别...this是指当前类里的,而不是当前方法,应该说是该类,相对有个super是父类(这句是废话可以不看).

总的来说就是范围不同.
作者: 黑马吕世成    时间: 2012-11-3 21:21
qwepoidjdj 发表于 2012-11-3 20:34
当然有区别...this是指当前类里的,而不是当前方法,应该说是该类,相对有个super是父类(这句是废话可以不看). ...

但是在类里面使用该类的属性可以不用加this啊!?
作者: 朱宏青    时间: 2012-11-3 21:22
黑马吕世成 发表于 2012-11-3 21:21
但是在类里面使用该类的属性可以不用加this啊!?

?名字有相同的时候编译器容易容易搞混,推荐还是加this.用来区分,别一回头不认识了.
作者: 黑马吕世成    时间: 2012-11-13 00:45
黑马吕世成 发表于 2012-11-3 19:18:25
class Test
{
          String str = new String("");}

class ThreadOne extends Thread
{
      

这个问题就是this应用中的一种,用于区分局部变量和成员变量。如果不加this虚拟机读到tt的时候,先从方法中查找是否存在该变量,如果有则tt指向的就是局部变量。否则会继续从外部中去找。
作者: 陈军    时间: 2012-11-15 10:14
当然有区别。如果你的局部变量用了和整个类的全局变量(非static)同名的名字.

你要访问该全局变量,必须要用this指定。否则就默认是该局部的变量。




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