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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余清兰 中级黑马   /  2012-6-14 17:30  /  2099 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、this修饰符用于区分成员变量和函数变量重名的情况。因为如果函数里的参数(局部变量)与类里的成员变量重名了,此时程序会先找局部变量。
  1. 例:
  2. class Person
  3. {
  4. private String name;

  5. Person(String name)
  6. {
  7. this.name = name;
  8. }
  9. public void speak()
  10. {
  11. System.out.println("name="+name);
  12. }
  13. }
  14. class PersonDemo
  15. {
  16. public static void main(String[] args)
  17. {
  18. Person p = new Person("lisi");
  19. p.speak();

  20. }
  21. }
复制代码
如果在成员变量name前面不加this修饰符,此代码运行后的结果是name=null;而不是lisi,因为局部变量与成员变量重名了,程序运行后,是把局部变量的null值赋给了name。this代表它所在函数所属对象的引用,也就是说哪个对象在调用this所在的函数,this就代表哪个对象。

2、构造函数间互相调用,要用this();并且此语句只能放在构造函数的第一行。因为初始化动作要先执行,若初始化里还有初始化,就要先把最里面的初始化执行完,再执行外面的初始化。
  1. class Person
  2. {
  3. private String name;
  4. private int age;
  5. Person(String name)
  6. {
  7. this.name = name;
  8. System.out.print("name");
  9. }
  10. Person(String name,int age)
  11. {
  12. this(name);//构造函数之间互相调用用这种格式且必须放在构造函数里的第一行,一般函数调用用Person(name);
  13. this.age = age;
  14. }
  15. }
  16. class PersonDemo
  17. {
  18. public static void main(String[] args)
  19. {
  20. Person p = new Person("lisi");

  21. }
  22. }
复制代码
总结:当定义类中功能(函数)时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。只要本类功能内部使用到了本类对象,都用this表示。一般函数是不能直接调用构造函数的,因为this不能用于一般函数,只在构造函数间调用。





1 个回复

倒序浏览
this可以看做是一个变量,它的值是当前对象的引用。本身peel(Apple apple)这个方法调用的时候需要一个形式参数,就是一个Apple对象,所以要传给它一个apple对象。

书上的写法有点绕,只是想你明白this这个关键字,如果你这样做:
Apple a=new Apple(); 那么程序就可以这样写了:

classic Apple {
Apple getPeeled(){return Peeler.peel(a);

这样很明显看出,this就是代表了一个Apple类的对象。

一般来说,this关键字用来处理成员变量和参数重名的情况。例如:
class Example
{
    private String name;  //成员变量只能用类的对象去使用
    void setName(String name)
      {
         //this.name表示是成员变量,把形式参数name的值传给成员变量
         this.name=name;
      }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马