Java 中的 this 关键字
Java 中的 this 关键字是什么意思?
Java 中的“this”关键字是一个引用变量,它引用当前方法或构造函数所属的对象。在Java 中使用 this 关键字的主要目的是消除类属性和同名参数之间的混淆。
Java 中 this 关键字的用法
以下是 Java 中“this”关键字的各种用法:
- 可用于引用当前类的实例变量
- 可用于调用或初始化当前类的构造函数
- 可以作为参数传递给方法调用
- 可以作为参数传递给构造函数调用
- 可用于返回当前类的实例
如果视频无法访问,请点击此处
通过示例理解“this”关键字。
- 类:class Account
- 实例变量:a 和 b
- 方法 Set data:用于设置 a 和 b 的值。
- 方法 Show data:用于显示 a 和 b 的值。
- Main 方法:在此我们为 Account 类创建一个对象,并调用 set data 和 show data 方法。
编译并运行代码
我们预期的 A 和 B 的输出值应分别初始化为 2 和 3。
但值为 0,为什么?让我们调查一下。
在 Set data 方法中,参数声明为 a 和 b,而实例变量也命名为 a 和 b。
执行过程中,编译器会感到困惑。“a”在赋值运算符的左侧是实例变量还是局部变量。因此,在调用 set data 方法时,它不会设置“a”的值。
解决方案是“this”关键字
在 Java this 关键字后附加“a”和“b”以及点 (.) 运算符。
代码执行时,当对象调用 ‘setdata’ 方法时,关键字 ‘this’ 被对象处理器“obj.”替换(见下图)。
所以现在编译器知道:
- 左侧的“a”是实例变量。
- 而右侧的“a”是局部变量。
变量已正确初始化,并显示了预期的输出。
假设您足够聪明,可以为您的实例变量和方法参数选择不同的名称。
但这次,您创建了该类的两个对象,每个对象都调用 set data 方法。
编译器如何确定它是应该处理对象 1 的实例变量还是对象 2 的实例变量。
好吧,编译器会自动附加实例变量(见下图)。
这样,当对象 1 调用 set data 方法时,实例变量会附加其引用变量。
当对象 2 调用 set data 方法时,将修改对象 2 的实例变量。
这个过程由编译器自行处理。您不必显式附加‘this’关键字,除非出现像我们示例中那样的特殊情况。
Java 中 this 关键字的示例
示例:学习“this”关键字的用法
步骤 1)将以下代码复制到记事本中。
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(); } }
步骤 2)保存、编译和运行代码。
步骤 3) A 和 b 的值显示为零?要纠正错误,请在第 6 行和第 7 行附加“this”关键字。
this.a =a; this.b =b;
步骤 4)保存、编译并运行代码。这次,A 和 b 的值分别设置为 2 和 3。
摘要
- Java 中的this关键字是引用当前对象的引用变量。
- this 关键字在 Java 中的一个用途是引用当前类的实例变量
- 可用于调用或初始化当前类的构造函数
- 可以作为参数传递给方法调用
- Java 中的 this 指针可以作为参数传递给构造函数调用
- Java 中的 this 运算符可用于返回当前类的实例
- Java 中的 this 是对当前对象的引用,其方法正在被调用。
- 您可以使用“this”关键字来避免方法/构造函数中实例/对象的命名冲突。
查看我们的 Java 面试题文章:点击这里