java 中 this 关键字的用法,相信只要接触过Java的童鞋都应该用过,今天在这里就在温习一下。
java 中,this 可以完成3件事情:表示本类属性、表示本类方法和当前对象。下面通过例子来分别说明this在这几种情况下的应用。
1.this 表示本类属性:this.属性
先来看个例子:
class Person {
private String name;
private int age;
public Person(String name, int age) { // 定义构造
name = name; // 为属性赋值
age = age; // 为属性赋值
} // setter、getter略
public String getInfo() { // 取得信息
return "姓名:" + name + ",年龄:" + age;
}
}
由上面可以看出构造函数在初始化的时候对name和age进行了赋值,但有些时候属性跟参数的名字相同时容易混淆,因此我们可以改写成如下的形式。
class Person {
private String name;
private int age;
public Person(String name, int age) { // 定义构造
this.name = name ; // 为本类name属性赋值
this.age = age ; // 为本类age属性赋值
} // setter、getter略
public String getInfo() { // 取得信息
return "姓名:" + name + ",年龄:" + age;
}
}
这里通过this关键字调用了本类的属性name和age,是程序的结构更清晰。
2.this 调用本类方法
在一个类中主要有两种方法:普通方法和构造函数,因此调用方法也就分为两种形式。
- 调用本类普通方法:调用本类方法可以使用“this.方法()”;
- 调用本类构造函数:在一个构造中要调用其他构造使用“this()”调用。
下面是一个存在三个构造方法例子(无参、有一个参数和有两个参数)
class Person {
private String name;
private int age;
public Person() { // 无参构造方法
System.out.println("*** 一个新的Person类对象被实例化。");
}
public Person(String name) { // 两参构造方法
System.out.println("*** 一个新的Person类对象被实例化。");
this.name = name;
}
public Person(String name, int age) { // 三参构造方法
System.out.println("*** 一个新的Person类对象被实例化。");
this.name = name;
this.age = age;
} // setter、getter略
public String getInfo() { // 取得信息
return "姓名:" + this.name + ",年龄:" + this.age;
}
}
假设要输出的信息为100行,那么每一个构造函数都要重复这些代码,可是明明调用一个构造函数就可以搞定的,如果这样的话肯定就违背了软件开发的初衷,所以肯定有方法解决的,那就是调用本类构造
所以上面的代码可以修改为如下代码:
class Person {
private String name;
private int age;
public Person() { // 无参构造方法
System.out.println("*** 一个新的Person类对象被实例化。"); // 想象为50行代码
}
public Person(String name) { // 两参构造方法
this() ; // 调用无参构造
this.name = name;
}
public Person(String name, int age) { // 三参构造方法
this(name) ; // 调用一个参数构造
this.age = age;
} // setter、getter略
public String getInfo() { // 取得信息
return "姓名:" + this.name + ",年龄:" + this.age;
}
}
这样一看代码复用,哈哈,是软件开发的思想,大牛们早就想到了。
注意:使用 this() 要注意以下问题
所有的构造方法是在对象实例化时被默认调用的,而且是在调用普通方法之前调用,所以使用“this()”调用构造方法的操作一定要放在构造方法的首行。
3. this 表示当前对象
这个不太好说,先贴个例子看看:
验证this为当前对象
class Demo {
public void print() {
System.out.println("当前对象:" + this); // 直接输出this
}
}
public class TestDemo {
public static void main(String args[]) {
Demo demo1 = new Demo();
Demo demo2 = new Demo();
System.out.println(demo1); // 直接输出对象
demo1.print(); // 调用方法,即:输出this
System.out.println("******");
System.out.println(demo2); // 直接输出对象
demo2.print(); // 调用方法,即:输出this
}
}
运行结果:
exercise.Demo@133c5982
当前对象:exercise.Demo@133c5982
******
exercise.Demo@5f186fab
当前对象:exercise.Demo@5f186fab
通过运行结果发现,默认情况下一个对象直接输出所返回的是一个对象的编码,而使用demo1调用print() 方法时,直接输出的 this 和demo1的对象编码一样,demo2也同样如此。所以可以看出当前正在调用类中方法的对象为当前对象,而所有的当前对象都使用this来表示。
A little more for everyday。