黑马程序员技术交流社区

标题: this问题 [打印本页]

作者: 马伟奇    时间: 2011-12-30 16:30
标题: this问题
this既然表示当前类的对象,这个对象存放到哪里呢。
作者: 房宝彬    时间: 2011-12-30 16:32
本帖最后由 房宝彬 于 2011-12-30 16:34 编辑

this  关键字只能在方法内部使用,表示"对调用方法的那个对象"的引用.this的用法和其他对象的引用并无不同.但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可.当前方法中的this应用会自动应用于同一类中的其他方法.
    this关键字对于将当前对象传递给其他方法很有用.
    可用this关键字在一个构造器中引用另一个构造器,避免代码重复.
作者: 付星    时间: 2011-12-30 16:52
因为一个类有多个对象,类里用this可以代表当前的引用对象

Person p=new Person();那么this就代表是p这个引用对象了

作者: 于海生    时间: 2011-12-30 17:01
this其实可以说是一个隐形指针。他所指向的是本类中的成员变量或者方法。
Java中this的使用 :
1. this是指当前对象自己。当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用。
2.2. 把this作为参数传递。当你要把自己作为参数传递给别的对象时,也可以用this。
3.注意匿名类和内部类中的中的this。有时候,我们会用到一些内部类和匿名类,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。
4.在构造函数中,通过this可以调用同一class中别的构造函数
作者: 张绍成    时间: 2011-12-30 17:09
本帖最后由 张绍成 于 2011-12-30 17:10 编辑

this为一系统资源,只允许用户读而不允许写,它存放当前对象的地址(引用)。
    this变量有以下作用:
    1. 构造方法重用:
  1.   public class Rectangle{
  2.         public Rectangle(Location at, Shape size) {…}
  3.                 public Rectangle(Shape size,Location at){
  4.                                    this(at, size); }
  5.         public Rectangle(Location at) {
  6.        this(at, new Shape(100,100));
  7.         }
  8.         public Rectangle(Shape size) {
  9.        this(size, new Location(1,1));
  10.         }
  11.         public Rectangle() {
  12.        this(new Location(1,1), new Shape(100,100));
  13.         }
  14.     }
复制代码
2、消除歧义:
  1.   Location{
  2.     private int x;
  3.     private int y;
  4.     public Location(int x,int y)   {
  5.        this.x=x;
  6.        this.y=y;
  7.     }
  8.     ……
  9.     }
复制代码
3、返回对象-链式方法调用:
  1. public class Count {
  2.     private int i = 0;
  3.        Count increment() {
  4.        i++;
  5.        return this; //返回对象的地址,所以我们可以链式访问它
  6.        }
  7.         void print() {
  8.        System.out.println("i = " + i);
  9.         }
  10.     }
  11.     public class CountTest{
  12.     public static void main(String[] args) {
  13.        Count x = new Count();
  14.        x.increment().increment().print();
  15.     }
  16.     }
复制代码
4、作为参数传递"this”变量-进行回调:
    假设有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接受一个代表其所在容器的参数。例如:
  1. class Container
  2.             {
  3.                  Component comp;
  4.                  public void addComponent()
  5.                  {
  6.                       comp = new Component(this); //代表你所创建的对象,因为它要用到.
  7.                  }
  8.             }
  9.             class Component
  10.             {
  11.                  Container myContainer;
  12.                  public Component(Container c)
  13.                  {
  14.                       myContainer = c;
  15.                  }
  16.             }
复制代码

作者: 黑马张伟    时间: 2011-12-30 17:15
java中this一共有三种使用方式
1、表示对当前对象的引用!

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

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

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

作者: 周吉明    时间: 2011-12-30 20:31
对象存放在堆里。
作者: 李林轩    时间: 2011-12-30 21:42
只要是对象当然存放在堆中了!
如Person p = Person(); 创建对象时 P就放在堆内存中
作者: 代臣    时间: 2011-12-30 23:00
首先这个对象存放在堆中。
下面介绍关键字this:
this 代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象.
this应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
         但凡本类功能(函数、方法)内部使用了本类对象,都用this表示。
this语句:用于构造函数之间进行互相调用。一般函数的调用不能用this语句;
         构造函数之间的调用只能用this语句。
注意事项:this语句只能定义在构造函数的第一行。因为初始化动作要先执行。
  1. class Person
  2. {
  3.         private String name;
  4.         private int age;

  5.         //构造函数1
  6.         Person(String name)
  7.         {
  8.                 this.name = name;
  9.                 show();//调用show()方法
  10.         }

  11.         //构造函数2
  12.         Person(int age)
  13.         {
  14.                 this.age = age;
  15.         }

  16.         //构造函数3
  17.         Person(String name, int age)
  18.         {
  19.                 //this.name = name;
  20.                
  21.                 this(name);//这里是构造函数之间的相互调用方法示例。
  22.                 this.age = age;
  23.                 speak();//调用speak()方法
  24.         }

  25.         public void speak()
  26.         {
  27.                 System.out.println("name="+this.name+",age="+this.age);
  28.                 //show();
  29.         }

  30.         public void show()
  31.         {
  32.                 System.out.println(name);
  33.         }

  34.         /*
  35.         需求:给人定义一个用于比较年龄是否相同的功能,也就是是否是同龄人。
  36.         结果:是或者不是同龄人
  37.         需要传递一个人的年龄作为参数。
  38.         */
  39.         public boolean peer(Person p)//peer函数内部使用了本类Person类的对象,因此要用到this这个关键字.
  40.         {
  41.                 return this.age == p.age;//0代表不是同龄人,1代表同龄人,
  42.         }
  43. }

  44. class CreateDemo
  45. {
  46.         public static void main(String[] args)
  47.         {
  48.                 Person p1 = new Person(20);         /*this代p1,这是构造函数的应用中讲到的*/
  49.                 Person p2 = new Person(25);          //this代p2,(构造函数的应用)
  50.                 Person p3 = new Person("java");     //this代表p3,(构造函数的应用)
  51.                 Person p4 = new Person("java",24);  //this代p4,(构造函数的应用)

  52.                 boolean b = p1.peer(p2);     //p2作为传递参数使用,这个时候this就代表p1.
  53.                 System.out.println(b);       //输出false
  54.         }
  55. }
  56. /*
  57. 输出结果
  58. java //这是构造函数之间的调用执行出来的结果
  59. java //这是调用类中方法执行的结果
  60. name=java,age=24
  61. false
  62. */
复制代码

作者: 杨丹丹    时间: 2011-12-30 23:06
this这个引用存放于栈中
作者: 颜宗茂    时间: 2011-12-30 23:25
简单点得说,当产生对象时,this就指向这个对象自己。
作者: 沈样    时间: 2011-12-31 10:25
this只是引用,只有new才是开辟新内存地址
作者: 詹英鹏    时间: 2011-12-31 14:18
this当然放在堆中啊。这个问题,学java都知道吧
this 是指它所在函数所属对象的引用,指向了本类或对象自己
就是说this就是对象对自己说“我的”+的意思
这是我的理解
this应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
         但凡本类功能(函数、方法)内部使用了本类对象,都用this表示。
this语句:用于构造函数之间进行互相调用。一般函数的调用不能用this语句;
         构造函数之间的调用只能用this语句。
这是书上对this的定义理解




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