黑马程序员技术交流社区

标题: this指代的内容有哪几种情况?请高手指教,谢谢! [打印本页]

作者: jagon    时间: 2014-3-12 11:15
标题: this指代的内容有哪几种情况?请高手指教,谢谢!
本帖最后由 jagon 于 2014-3-12 13:03 编辑

请问this指代的情况有哪几种,都是怎么回事?怎么也搞不明白,饶一会就晕,求总结和降解,谢谢指导!
作者: Aenon    时间: 2014-3-12 11:29
在类中,当调用构造方法创建对象实例时,如果类的实例变量和局部变量名称相同,则要用this关键字区分。反之,编译可能出错。
构造方法中,通过this关键字调用所在类中的另一个构造方法。
实例方法内,通过this关键字访问当前实例的引用。
实例方法内,局部变量或参数与实例变量名称相同,编译口器无法区分变量,这时要用this关键字。

作者: 透过生活    时间: 2014-3-12 11:32
这个问题 在论坛里就有人问过了。
1、表示对当前对象的引用!

2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。

3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!

还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

建议,你多多看看论坛的,希望能帮到你
作者: 天地宽    时间: 2014-3-12 11:37
如何分辨this的指代情况,我觉得要分辨出当前的函数运行环境且this指代的是当前运行环境。举例子来说
class simple{
         private  String name;//定义一个私有变量
         public   void setName(String name){//设置name变量的公有函数
                this.name=name;//此时this指的是全局环境
            }
}


另一个例子

class    simple{
               private  String name;//定义一个私有变量
               public   void setName(String name){//设置name变量的公有函数
                             this.name=name;//此时this指的是全局环境
                  }
               //这里我们再重新定义一个类
class   another {
                  private  String name;//定义一个私有变量
                   public   void setName(String name){//设置name变量的公有函数
                             this.name=name;//此时this指的是当前类的环境
                          }


作者: 天地宽    时间: 2014-3-12 11:38
楼主要是还有不明白的可以具体提问
作者: 橸瑩膤漃寞林    时间: 2014-3-12 12:39
我所理解的要两种情况:
1、是用于区分局部变量和成员变量同名情况。this代表它所在函数所属对象的引用。简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
但凡本类功能内部使用了了本类对象,都用this表示。
class Person
{
       private int age;
             Person(int age)
            {
                  this.age = age;
            }

}
class PersonDemo3
{
        public static void main(String[] args)
        {
                //下面的例子中,p1,p2分别调用this时,this分别代表 p1,p2 。
                Person p1 = new Person(20);
                Person p2 = new Person(25);

         }
}

2、this语句 :用于构造函数之间进行互相调用。this语句只能定义在构造函数的第一行。因为初始化要先执行。

class Person
{

        private String name;
        private int age;
        Person(String name)
        {               
                this.name =name;
        }
        Person(String name,int age)
        {
                //因为上面已经有this.name =name;所以这里就直接调用上面的,就写成this(name);
                this(name);               
                this.age = age;
               
        }

}





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