为什么要学Object类
因为一切皆对象
所有的普通类的顶级父类都是Object类
因此我们要学习Object类
只要学会了这个类
就可以知晓一些常见方法的使用
getClass方法
功能
获取对象的类
可用于判断两个不同的对象是否是源自同一个类
示例
public class Test {
public static void main(String[] args) {
Dog wc = new Dog();
Dog kr = new Dog();
Class<? extends Dog> wcClass = wc.getClass();
Class<? extends Dog> krClass = kr.getClass();
if (wcClass == krClass) {
System.out.println("二者相同");
} else {
System.out.println("二者不同");
}
}
}
hashCode方法
功能
根据对象的内存地址,计算出来的哈希码值
如果对象内存地址不相同
那么算出来的哈希码也不相同
用途
用于判断不同的对象是否是相同的本体
示例
public class Test {
public static void main(String[] args) {
Dog wc = new Dog();
Dog kr = new Dog();
Dog xb = wc;
int wcCode = wc.hashCode();
int krCode = kr.hashCode();
int xbCode = xb.hashCode();
System.out.println(xbCode);
System.out.println(wcCode);
System.out.println(krCode);
}
}
toString方法
功能
定义对象被打印时的字符串结构
示例
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
equals方法
功能
判断自己与另一个对象是否是相同的对象
返回一个布尔值
改良
通常会有一种需求
判定只要值相等,就让两个对象判为相同的对象
办法
重写equals方法
代码如下
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Dog dog = (Dog) o;
return age == dog.age && Objects.equals(name, dog.name);
}
finallize方法
功能
当对象被垃圾回收时会触发的代码块
用法
在自定义类中重写方法
在测试类中通过System.gc()强制执行垃圾回收机制
让我们可看到finallize的执行现象
示例
自定义类中的重写
@Override
protected void finalize() throws Throwable {
System.out.println("我被销掉了:" + this.name);
}
测试类中的体验
Dog wc = new Dog("旺财", 3);
Dog wc2 = new Dog("旺财", 3);
new Dog("小白", 5);
System.gc();