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方法主要功能就是专门完成两个对象的比较操作,在比较时,首先进行地址比较,如果两个对象的地址一样,则肯定是同一个对象,而如果地址不相等,则将一个个属性进行一次比较。
对象的比较操作在开发中是一个重要的概念,