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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jagon 于 2014-3-12 13:03 编辑

请问this指代的情况有哪几种,都是怎么回事?怎么也搞不明白,饶一会就晕,求总结和降解,谢谢指导!

5 个回复

倒序浏览
在类中,当调用构造方法创建对象实例时,如果类的实例变量和局部变量名称相同,则要用this关键字区分。反之,编译可能出错。
构造方法中,通过this关键字调用所在类中的另一个构造方法。
实例方法内,通过this关键字访问当前实例的引用。
实例方法内,局部变量或参数与实例变量名称相同,编译口器无法区分变量,这时要用this关键字。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
这个问题 在论坛里就有人问过了。
1、表示对当前对象的引用!

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

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

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

建议,你多多看看论坛的,希望能帮到你

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
如何分辨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指的是当前类的环境
                          }

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
楼主要是还有不明白的可以具体提问
回复 使用道具 举报
我所理解的要两种情况:
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;
               
        }

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马