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

 

对象的比较操作在开发中是一个重要的概念,

  

 

posted on 2011-12-01 15:11  wangbokun  阅读(218)  评论(0编辑  收藏  举报

导航