Object类
- 所有类的直接或间接超类,处在类层次最高点
- 包含了所有Java类的公共属性
Object类的主要方法
- public final Class getClass()获取当前对象所属的类信息,返回Class对象
- public String toString()返回表示当前对象本身有关信息的字符串对象
- public boolean equals(Object obj)比较两个对象的引用是否指向同一对象,是则返回true,否则返回false
- protected Object clone()赋值当前对象,并返回这个副本
- public int hashCode()返回该对象的哈希代码值
- protected void finalize() throws Throwable在对象被回收时执行,通常完成的资源释放工作
相等和同一
- 两个对象具有相同的类型,及相同的属性值,则称二者相等(equal)
- 如果两个引用变量指向的是同一个对象,则称这两个引用变量同一(identical)
- 两个对象同一,则肯定想等
- 两个对象相等,不一定同一
- 比较运算符“==”判断的是这连个对象是否同一
package 第三章类的重用;
import 第二章类和对象.BankAccount;
public class 判断对象同一 {
public static void main(String[] args) {
BankAccount a = new BankAccount("大白糖奶兔",123456,100.00f);
BankAccount b = new BankAccount("大白糖奶兔",123456,100.00f);
if (a==b){
System.out.println("Yes");
}else{
System.out.println("No");
}
}
}
equals判断同一
package 第三章类的重用;
import 第二章类和对象.BankAccount;
public class 判断对象相等equals {
public static void main(String[] args) {
BankAccount a = new BankAccount("大白糖奶兔",123456,100.00f);
BankAccount b = new BankAccount("大白糖奶兔",123456,100.00f);
if (a.equals(b)){
System.out.println("Yes");
}else{
System.out.println("No");//两个引用不是指向同一对象
}
}
}
方法2
package 第三章类的重用;
public class BankAccount {
public boolean equals(Object obj){
if (obj instanceof BankAccount) return false;
BankAccount b = (BankAccount) obj;
return((this.getOwnerName().equals(b.getOwnerName())) && (this.getAccountNumber()==b.getAccountNumber()) &&
(this.getBalance()==b.getBalance())
}
}
hashCode()方法
hashCode是一个返回对象散列码的方法,该方法实现的一般规定是:
- 在一个Java程序的一次执行过程中,如果对象“相等比较”所使用的信息没有被修改的话,同一对象执行hashCode方法每次都应返回同一整数。在不同的执行中,对象的hashCode方法返回值不必一致
- 如果依照equals方法两个对象是相等的,则在这两个对象上调用hashCode方法应该返回同样的整数结果
- 如果依照equals方法两个对象不相等,并不要求在这两个对象上调用hashCode方法返回值不同
只要实现的合理,Object类定义的hashCode方法为不同对象返回不同的整数,一个典型的实现是:将对象的内部地址转换为整数返回,但是Java语言并不要求必须这样实现
clone方法
- 用于根据已存在的对象构造一个新的对象,也就是复制对象
覆盖clone方法:
- 覆盖clone方法:在Object类中被定义为protected,所以需要覆盖为public
- 实现Cloneable接口,赋予一个对象被克隆的能力cloneability class MyObject implements Cloneable
finalize方法
- 在对象被垃圾回收器回收之前,系统自动调用对象的finalize方法
- 要覆盖finalize方法,覆盖方法最后必须调用super.finalize
getClass方法
- final方法,返回一个Class对象,用来代表对象的所属的类
- 通过Class对象,可以查询类的各种信息:比如名字、超类、实现接口的名字等等
void PrintClassName(Object obj)
System.out.println("The Object's Class is" + obj.getClass().getName());
}
notify、notifyAll、wait方法
- final方法、不能覆盖!
- 这三个方法主要用在多线程程序中
发表评论