this
如果一个类中有多个构造方法,也可以利用this关键字互相调用。
例子(如何使用this调用属性):
package test;
class Person {
private String name;
private int age;
public Person() { // 无参构造
System.out.println("一个新的Person对象被实例化。");
}
public Person(String name, int age) {
this(); // 在此处调用Person类中的无参构造方法
this.name = name; // 为name属性赋值
this.age = age; // 为age属性赋值
}
public String getInfo() { // 取得信息
return "姓名:" + name + ",年龄" + age;
}
}
public class ThisDemo03 {
public static void main(String[] args) {
Person per1 = new Person("张三", 33); // 调用有参构造
System.out.println(per1.getInfo()); // 输出信息
}
}
结果:
一个新的Person对象被实例化。
姓名:张三,年龄33
2.this表示当前对象
this最重要的特点就是表示当前对象,在java中当前对象就是指当前正在调用类中方法的对象。
关于当前对象的解释:
现在假设有张三,李四,王五三个人在谈话,如果现在说话的人是张三,则“当前正在说话的人”就是张三,如果现在李四在说话,则“当前正在说话的人”就是李四,一次类推...
例子:观察this表示当前对象。
package test1;
class Person{
public String getInfo() {
System.out.println("Person类 ------>"+this);
return null;
}
}
public class ThisDemo06 {
public static void main(String [] args) {
Person per1=new Person();
Person per2=new Person();
System.out.println("MAIN方法------->"+per1);
per1.getInfo();
System.out.println("---------------------");
System.out.println("MAIN方法------->"+per2);
per2.getInfo();
}
}
结果:
MAIN方法------->test1.Person@c17164
Person类 ------>test1.Person@c17164
---------------------
MAIN方法------->test1.Person@1fb8ee3
Person类 ------>test1.Person@1fb8ee3
对象比较
例子:
package test2;
class Person {
private String name;// 姓名
private int age;// 年龄
public Person(String name, int age) {// 通过构造为属性赋值
this.setName(name); // 设置姓名
this.setAge(age);// 设置年龄
}
public boolean compare(Person per) {
// 调用此方法时里面存在两个对象:当对象、传入的对象
Person p1 = this; // 表示当前调用方法的对象,为per1
Person p2 = per;// 船体到方法中的对象,为per2
if (p1 == p2) {// 首先比较两个地址是否相等
return true;
}
// 分别判断每一个属性是否相等
if (p1.name.equals(p2.name) && p1.age == p2.age) {
return true; // 两个对象相等
} else {
return false; // 两个对象不相等
}
}
public String getName() { // 取得姓名
return name;
}
public void setName(String n) {// 设置姓名
name = n;
}
public int age() {// 取得年龄
return age;
}
public void setAge(int a) {// 设置年龄
age = a;
}
}
public class ThisDemo08 {
public static void main(String[] args) {
Person per1 = new Person("张三", 30);// 声明两个对象,内容完全相等
Person per2 = new Person("张三", 30);
if (per1.compare(per2)) { // 进行比较
System.out.println("两个对象相等!");
} else {
System.out.println("两个对象不相等!");
}
}
}
结果:
两个对象相等!
compare方法主要功能就是专门完成两个对象的比较操作,在比较时,首先进行地址比较,如果两个对象的地址一样,则肯定是同一个对象,而如果地址不相等,则将一个个属性进行一次比较。
对象的比较操作在开发中是一个重要的概念,
浙公网安备 33010602011771号