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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 你懂得 中级黑马   /  2013-8-18 17:29  /  1886 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

this的所有用法

评分

参与人数 1黑马币 +3 收起 理由
EYE_SEE_YOU + 3 可以先在论坛内搜一下this的用法.

查看全部评分

10 个回复

倒序浏览
楼主问的好笼统啊, 我写一点毕老师讲的吧。
this 关键字
特点:this代表本类对象的引用。

当在函数内需要用到调用该函数的对象时,就用this

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
this:看上去是用于区分局部变量和成员变量同名的情况本类         this:就代表的本类的对象         this:代表它所在函数所属对象的引用,也就是说哪个对象在调用this         所在的函数,this就代表哪个对象         this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时         ,这时this来表示这个对象;但凡类功能内部使用了本类对象都用this来表示。         this语句:用于构造函数之间的调用this();                   只能放在构造函数的第一句;因为初始化要先执行

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
        第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
        第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也可以。
        第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。
其实主要是用于调用成员属性和成员方法还有就是调用本类中的对应参数的构造函数

评分

参与人数 1技术分 +1 收起 理由
张俊生 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
拿代码看问题,用实践去解决问题,都有注释。
  1. class Person
  2. {
  3.         private String name;
  4.         private int age;       
  5.         Person(String name)       
  6.         {
  7.                 this.name = name;
  8.                 //this.name代表本类成员变量name
  9.         }
  10.         Person(String name,int age)
  11.         {
  12.                 this(name);
  13.                 //代表调用本类构造方法(有一个String类型的参数)
  14.                 this.age = age;
  15.                 //this.age代表本类成员变量age
  16.         }
  17.         public void speak()
  18.         {
  19.                 System.out.println(this.name+":"+this.age);
  20.                 //this.name代表本类成员变量name
  21.                 //this.age代表本类成员变量age
  22.         }

  23. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张俊生 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
本帖最后由 漪顿 于 2013-8-18 21:38 编辑

this的三种用法:
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用。
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!
this在什么情况下使用:
第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,
第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。其实这些用法总结都是从对“this是指向对象本身的一个指针”

评分

参与人数 1技术分 +1 收起 理由
张俊生 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报

关于Java中的关键字this的说明

本帖最后由 张云飞 于 2013-8-19 17:37 编辑

(对第一条作用的理解)
        对于java中类的引用,可以这样理解:
public class A{
        public static void main(String[] args){
                B b1 = new B();
                B b2 = new B();
               
                b1.reName(1);        //1
                b2.reName(2);        //2
        }
}
class B{
        public void reName(int i){...}
}


对于类似这样的定义,编译器是如何知道到底是b1还是b2调用了reName()?其实在这里编译器做了一些幕后工作。
它把调用方法的对象作为一个参数传递给了方法reName()。所以可以这样理解上述调用:B.reName(b1,1);B.reName(b2,2);(当然这些只是内部表现形式)
(进入正题,一下三点应用)
        1、对“调用方法的那个对象”的引用,
        对于在方法内部引用当前类的对象我们一般不会按上边那样引用,而是使用Java提供的关键字this。
        this只能在方法内部使用;表示对“调用方法的那个对象”的引用。因此一般只有当需要当前对象的引用时,才使用this关键字。比如:

public class BigApple{
        ...
        public BigApple getInstance(){
                return this;          //this:该方法所属类的对象的引用
        }
}


2、在构造器中调用构造器
        但是需要注意:
        1、必须在起始处,否则编译错误;
        2、只能调用一个构造方法,两个以上错误。
        3、只有在构造方法中才可以调用构造方法,其他方法不可以。

public class Person{
        String name = null;
        int age = 0;
        
        public Person(String name,int age){
                this(String name);                //1、必须在起始处,否则编译错误;2、只能调用一个构造方法,两个以上错误。
                                                                //此处完全可以改为this.name = name; 所以只作为例子说明,不代表这样写的好处。
                this.age = age;
        }
        public Person(String name){
                this.name = name;
        }
}


3、注:此处也展示了this的另外一种用法:this.name = name; 这是为了区分参数和数据成员;(显然前边为数据成员,后边为参数)
        
总结起来同楼上“静以修身”和“漪顿”类似,有三种用法:1、2、3(如上)

以上解释全部属于自己查询资料后整理所得(主要《Java编程思想》),如有差错往大家予以纠正,谢谢!





评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
如果问题解决了,请把未解决更改为已解决
谢谢合作!
回复 使用道具 举报
指自己所在的对象。
比如在一个方法中,调用其他对象的变量或方法时,可以使用那个对象的对象名,比如aa.abc();
而调用自己所在对象的方法或变量时,不知道别人给起了什么名,所以直接用this.abc()就可以了
回复 使用道具 举报
请看下面程序中
MyDate newDay=new MyDate(this);
this是什么作用?

class MyDate{
private int day;
private int month;
private int year; //定义三个成员变量;
public MyDate(int day,int month,int year){
  this.day=day;
  this.month=month;
  this.year=year;
} //构造方法;
public MyDate(MyDate date){
  this.day=date.day;
  this.month=date.month;
  this.year=date.year; //将参数Date类中的成员变量赋给MyDate类;
} //构造方法;
public int getDay(){
  return day;
}//方法;
public void setDay(int day){
  this.day=day;//参数Day赋给此类中的Ddy;
    }
    public MyDate addDays(int moreDay){
     MyDate newDay=new MyDate(this);
     newDay.day=newDay.day+moreDay;
     return newDay; //返回整个类;
    }
    public void print(){
     System.out.println("My Date: "+year+"-"+month+"-"+day);
    }
}
public class TestMyDate{
public static void main(String args[]){
  MyDate myBirth=new MyDate(19,11,1987); //利用构造函数初始化;
  MyDate next=myBirth.addDays(7);
  //addDays()的返回值是类,将其返回值赋给变量next;
  next.print();
}
}
回复 使用道具 举报

1
在一个类中如果方法中的局部变量和方法外的成员变量重名,那么如果在方法内输出这变量,就是方法
自己的变量里的值,想要区分要用this,加上this.就是输出成员变量的值
2
this代表本类对象的引用
3
this可以用于区分局部变量和成员变量同名的情况
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马