在 Java 语言中,this
关键字是一个对象 ( 类的实例 ) 内部对当前对象的引用。
本章节,我们来看看 Java 中的 this
关键字的几个使用场景。
使用 this 关键字来引用当前类的当前的实例变量
JavaTester.java
public class JavaTester { int a; int b; // 构造方法 JavaTester(int a, int b) { this.a = a; this.b = b; } void display() { //显示当前实例变量 a 和 b System.out.println("a = " + a + " b = " + b); } public static void main(String[] args) { JavaTester object = new JavaTester(10, 20); object.display(); } }
编译运行以上范例,输出结果如下
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester a = 10 b = 20
上面这段代码中, JavaTester
类中的 this
关键字就是指向 JavaTester
类的实例。
使用 this()
来调用当前类的构造方法
public class JavaTester { int a; int b; // 默认的构造方法 JavaTester() { this(10, 20); System.out.println("Inside default constructor \n"); } // 带参数的构造方法 JavaTester(int a, int b) { this.a = a; this.b = b; System.out.println("Inside parameterized constructor"); } public static void main(String[] args) { JavaTester object = new JavaTester(); } }
编译运行以上代码,输出结果如下
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester Inside parameterized constructor Inside default constructor
上面这段代码中,this()
方法就是对 JavaTester()
方法的引用,而 this(10,20)
就是对 JavaTester(int a, int b)
方法的引用。
可以使用 return this;
语句来返回当前类的当前实例
public class JavaTester { int a; int b; // 默认的构造方法 JavaTester() { a = 10; b = 20; } // 返回当前实例 JavaTester get() { return this; } // 显示当前实例变量 a 和 b void display() { System.out.println("a = " + a + " b = " + b); } public static void main(String[] args) { JavaTester object = new JavaTester(); object.get().display(); } }
编译运行以上代码,输出结果如下
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester a = 10 b = 20
使用 this
作为参数调用方法
在调用方法时可以通过传递 this
关键字来传递当前实例对象
public class JavaTester { int a; int b; // 默认的构造方法 JavaTester() { a = 10; b = 20; } // 可以接受 this 关键字作为参数的方法 void display(JavaTester obj) { System.out.println("a = " + a + " b = " + b); } // 返回当前实例的方法 void get() { display(this); } public static void main(String[] args) { JavaTester object = new JavaTester(); object.get(); } }
编译运行以上代码,输出结果如下
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester a = 10 b = 20
使用 this
关键字调用当前的实例方法
public class JavaTester { int a; int b; // 默认的构造方法 JavaTester() { a = 10; b = 20; } void display() { // 调用 show() 方法 this.show(); System.out.println("Inside display function"); } void show() { System.out.println("Inside show funcion"); } public static void main(String[] args) { JavaTester object = new JavaTester(); object.display(); } }
编译运行以上代码,输出结果如下
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester Inside show funcion Inside display function
从某些方面说,this
关键字其实是多余的。
使用 this
关键字作为构造方法的参数
public class JavaTester { int a; int b; // 默认的构造方法 JavaTester() { a = 10; b = 20; A a = new A(this); } void display() { System.out.println("a = " + a + " b = " + b); } public static void main(String[] args) { JavaTester tester = new JavaTester(); } } class A { JavaTester obj; // 使用 JavaTester 类的对象作为构造函数的参数 A(JavaTester obj) { this.obj = obj; // 调用 JavaTester.display() obj.display(); } }
编译运行以上代码,输出结果如下
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester a = 10 b = 20
目前尚无回复