Java 中的 this 关键字

关键字 this 是 Java 中引用当前对象的引用变量。

Java 中 this 关键字的各种用法如下:

  • 它可用于引用当前类的实例变量
  • 它可用于调用或启动当前类构造函数
  • 它可以作为方法调用中的参数传递
  • 它可以在构造函数调用中作为参数传递
  • 它可用于返回当前的类实例

this 关键字举例

class Account { 
    int a; 
    int b; 
    public void setData(int a , int b){
        a = a;
        b = b;
    }

    public void showData(){
        system.out.println("value of A ="+a); 
        System.out.println("value of B="+b);
    }
    
	public static void main(string [args]){ 
    	Account obi = new Account ; 
        obj.setData(2, 3);
        obj.ShowData();
    }
}
  1. class:名为 Account 的类
  2. 实例变量:a 和 b
  3. setData 方法:设置 a 和 b 的值。
  4. showData 方法:显示 a 和 b 的值。
  5. main 方法:我们为 Account 类创建一个对象,并调用方法设置数据和显示数据。

让我们编译并运行代码,

C:\Tastons> java Account
Value of A = 0
Value of B = 0

我们对 a 和 b 的预期输出应分别初始化为值 2 和 3,但输出值是 0,为什么?我们来看一下。

在方法 setData() 中,参数声明为 a 和 b,而实例变量也命名为 a 和 b。

在执行期间,编译器会困惑,比如分配的运算符左侧的 a 是实例变量还是局部变量呢?因此,在调用方法集数据时,它不会设置 a 的值。

解决方案是 this 关键字,使用 this 关键字后跟 . 运算符然后再加 ab

public void setData(int a , int b){
        this.a = a;
        this.b = b;
}

在代码执行期间,当对象调用方法 setdata 时。关键字 this 由对象处理程序 obj 替换。

所以现在编译器知道,

  • 左侧的 a 是实例变量。
  • 而右侧的 a 是局部变量

现在变量已正确初始化,并能显示预期输出。

C:\Tastons> java Account
Value of A = 2
Value of B = 3

假设你足够聪明,可以为实例变量和方法参数选择不同的名称。

class Account { 
    int a; 
    int b; 
    public void setData(int c , int d){
        a = c;
        b = d;
    }
    ....

但是这一次,你创建了类的两个对象,每个对象都调用 setData 方法。

编译器将如何确定它是否应该在 object1object2 的实例变量上工作。

public void setData(int c , int d){
    a = c;
    b = d;
}

public static void main(string args[]) {
    Account object1 = new Account();
    object1.setData(2, 3);
    Account object2 = new Account();
    object2.setData(4, 3);
}

编译器隐式地将实例变量附加到 this 关键字(下图)。

这样当对象 1 调用 setData 方法时,实例变量被其引用变量追加。

object1.a = c;
object1.b = d;

当对象 2 调用 setData 方法时,对象 2 的实例变量被修改。

object2.a = c;
object2.b = d;

编译器本身会处理此过程。除非在我们的示例中存在异常情况,否则你不必显式地附加 this 关键字。

示例: 学习来使用 this 关键字

class Account{
    int a;
    int b;
    public void setData(int a ,int b){
        a = a;
        b = b;
    }
    public void showData(){
        System.out.println("Value of A ="+a);
        System.out.println("Value of B ="+b);
    }
    public static void main(String args[]){
        Account obj = new Account();
        obj.setData(2,3);
        obj.showData();
    }
}

步骤 1 ab 的值显示为零?要更正这个错误,请使用 this 关键字添加到程序。

this.a =a;
this.b =b;

步骤 2: 编译和运行代码,此时,a 和 b 的值分别设置为 2 和 3。

摘要

  • Java 中的 this 关键字是一个引用当前对象的引用变量。
  • 它可用于引用当前类实例变量
  • 它可用于调用或启动当前类构造函数
  • 它可以作为方法调用中的参数传递
  • 它可以在构造函数调用中作为参数传递
  • 它可用于返回当前的类实例
  • this 是方法正在被调用的当前对象的引用,。
  • 你可以使用 this 关键字来避免实例/对象的方法/构造函数中的命名冲突。