Java中this关键字的用法

本文详细解析了Java中this关键字的概念及用途,通过示例代码解释了this如何引用当前对象、解决变量名冲突、传递对象自身作为参数、调用同一类中的不同构造方法等应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在类的方法定义中使用的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消失;


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


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


最后,调用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不管有几种用法,它都是代表使用该方法的对象的引用。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值