Java中this关键字的用法

在类的方法定义中使用的this关键字代表使用该方法的对象的引用,this指向的是自身对象的引用,我们可以通过一个小例子分析一下内存分配情况:

代码展示:

public  class  Leaf{
   int i = 0;
   Leaf ( int i ){ this.i=i; }
   Leaf increament(){
      i++;
      return this;
   }
   void print() { 
      System.out.println(“i = ” + I );
   }
   Public static void main(String [] args){
      Leaf leaf = new (100);
      leaf.increament().increament().print(); 
   }
}

内存分析:

首先,栈空间中有个leaf,它指向我们新new出来的Leaf,其Leaf分配在堆空间中;

其次,调用Leaf的构造方法,在栈空间里分配构造方法的形参i,其值为100;在Leaf中有成员变量i,然后把栈里形参i的值赋给堆空间Leaf成员变量i(为100),构造方法完成,栈中的形参i消失;

Java中this关键字的用法_第1张图片

再次,执行leaf.increament().increament()第一个ncreament(),其i++,则i变为101;return在我们栈空间分配一个临时的内存,这块内容是this的内容,this指向其对象自身,则在栈空间分配的这个临时空间也指向该对象;

Java中this关键字的用法_第2张图片

然后,执行leaf.increament().increament()第二个ncreament(),其是对占内存分配的临时空间调用,即相当于对自身对象继续调用,此时i为102;接着return  this,则又重复上面的过程我就不在重复解说,图示说明;

Java中this关键字的用法_第3张图片

最后,调用print()方法,打印输出结果:


下面我们就介绍一下,this的几种用法:

(1)      当成员变量和构造方法中的参数重名时,在方法中使用this表明类中的成员变量。

代码如下:

public  class  Leaf{
   int i = 0;
   Leaf ( int i){ 
     this.i = i; 
   }
}

(1)      把自己当参数传递

代码如下:

class  Fruit{
   Fruit(){
      New Apple(this).print; //调用B的方法
   }
   void print(){
       System.out.println(“欢迎来到水果世界”);
   }
}

class Apple{
Fruit fruit;
Apple ( Fruit fruit){
   this.fruit = fruit;
}
void print(){
   a.print();//调用Fruit的方法
   b.System.out.println(“欢迎来到苹果世界”);
} 
} 

在这里,对象Fruit的构造函数中,用new Apple(this)把对象Fruit自己当做参数传递给了对象Apple的构造函数。

3、在构造函数中,通常this可以调用同一类中别的构造函数。

代码如下:

Public class Person{
   String name;
   int age;
   String sex;
   Person (string n, int g , string s){
      name = n;
      age = g;
      sex = s;
   }
   Person ( string n ,I nt g){
      This(n,g,”男”)
   }

4、this同时传递多个参数。

Public class Person{
   String name;
   int age;
  static  void  show( Person person){
    System.out.println( person.name + “,” + person.age);
   } 
  void  see(){
     show(this);
  }
   }

 这里相当于吧当前实例化的person传给了show()方法。

5、当用到一些内部类或匿名类,如事件处理。在匿名类中用this时,这个this指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。

Public class Person{
   Person ( ) {
      Thread  thread  = new Thread ( ){
         Void run ( ){
             Person.this.run();//调用外部类的方法
          }
      }
    void  run ( ){
       System.out.println(“跑”);
     }
   }

在这里,thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。

总之,this不管有几种用法,它都是代表使用该方法的对象的引用。

你可能感兴趣的:(Java中this关键字的用法)