Java this用法详解
this 是 Java 中的一个关键字,代表某个对象,其本质是“创建好的对象的地址”。
关键字 this 可以在实例方法中使用。由于在调用构造方法前,在运算符 new 的作用下已经创建对象,因此在构造方法中也可以使用关键字 this 来代表“当前对象”。
关键字 this 常见的用法如下:
第一种用法的示意图如下图所示:
图 1 第一种用法的示意图
【实例】关键字 this 的应用。
第二种用法的示意图如下:
图 2 第二种用法的示意图
【实例】使用 this() 调用重载构造方法。
关键字 this 可以在实例方法中使用。由于在调用构造方法前,在运算符 new 的作用下已经创建对象,因此在构造方法中也可以使用关键字 this 来代表“当前对象”。
关键字 this 常见的用法如下:
- 调用实例变量和实例方法。在程序中产生二义性之处,应使用关键字 this 来指明当前对象。在普通方法中,关键字 this 总是指向调用该方法的对象;在构造方法中,关键字 this 总是指向正要初始化的对象。
- 使用关键字 this 调用重载的构造方法,应避免相同的初始化代码。但只能在构造方法中使用,并且必须位于构造方法的开头。
第一种用法的示意图如下图所示:
图 1 第一种用法的示意图
【实例】关键字 this 的应用。
class Student { // 成员变量 int sid; String sname; // 显式定义默认的构造方法 Student() { } // 带两个参数的构造方法 public Student(int sid, String sname) { System.out.println("初始化已经建好的对象:" + this); // 使用this引用当前对象 this.sid = sid; // 使用this区分成员变量sid和参数sid this.sname = sname; // 使用this区分成员变量sname和参数sname } public void login() { // 使用this引用当前对象,但在这个上下文中可以省略 System.out.println(this.sname + "登录系统"); } } public class Test { public static void main(String[] args) { // 创建Student对象 Student student = new Student(1234, "changsheng"); System.out.println("student 对象的引用:" + student); // 打印对象引用 student.login(); // 调用login方法 } }运行结果如下图所示:
初始化已经建好的对象:Student@75a1cd57
student 对象的引用:Student@75a1cd57
changsheng登录系统
第二种用法的示意图如下:
图 2 第二种用法的示意图
【实例】使用 this() 调用重载构造方法。
class Student { int sid; String sname; String address; Student() { } // 带两个参数的构造方法 public Student(int sid, String sname) { System.out.println("初始化已经建好的对象:" + this); this.sid = sid; this.sname = sname; } // 带3个参数的构造方法 public Student(int sid, String sname, String address) { // 下面一行代码通过this()调用带两个参数的构造方法,并且必须位于第一行 this(sid, sname); this.address = address; } public void login() { // 下面一行代码中的this代表调用此方法的对象,此处可以省略 System.out.println("学号:" + this.sid); System.out.println("姓名:" + this.sname); System.out.println("地址:" + this.address); } } public class Test { public static void main(String[] args) { // 创建Student对象 Student student = new Student(1234, "changsheng", "China"); student.login(); } }运行结果为:
初始化已经建好的对象:Student@75a1cd57
学号:1234
姓名:changsheng
地址:China