文章目录
- 一、Object
- 1、Object使用
- 2、toString
- 3、equals和==
- 4、hashCode
- 5、clone
- 6、finalize
- 7、getClass
- 8、wait、notify和notifyAll
- 二、使用步骤
一、Object
1、Object使用
Object类是所有Java的根父类
如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object
Object类中属性方法具有通用性
Object中只声明了一个空参的构造器
finalize()方法当我们对象被回收之前,我们会调用当前对象的finalize方法。不要主动调用,一般由垃圾回收器调用当前对象的finalize方法
AnimalTest animalTest = new AnimalTest();
System.out.println(animalTest.getClass().getSuperclass());
2、toString
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
", address=" + address +
'}';
}
3、equals和==
== 使用
必须两个保证两个变量类型相同
对于基本数据类型:比较的是两个变量值是否相等(不一定数据类型要相同,自动类型提升 唯独boolean类型不参于比较)
对于引用类型:比较的是两个对象的内存地址值是否相同,既两个引用是否指向同一个对象实体(对空间中是否同一个对象)
equals
只适用于引用数据类型
Object的equals方法:
如果没有重写equals方法,它是Object中的方法也是和==作用相同
public boolean equals(Object obj) {
return (this == obj);
}
String、Date、File 包装类等的equals方法:都重写了Object中的equals(),比较的是否值相等
== 重写自己定义的equals方法(比较两个对象的每个属性是否相同)==
通常情况下,我们自定义的类如果使用equals()方法,也通常是比较两个对象的实体内容是否相同。那么,我们就需要对Object类中的equals()方法重写。
public class Teacher {
private String name;
private Address address;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof Teacher){
Teacher teacher = (Teacher) o;
//比较两个对象的每个属性是否相同
return Objects.equals(this.name, teacher.name) && Objects.equals(this.address, teacher.address);
}
return false;
}
4、hashCode
public native int hashCode();
@Override
public int hashCode() {
return Objects.hash(name, address);
}
5、clone
实现implements Cloneable接口重写clone方法
InstanceofTest instanceofTest = new InstanceofTest();
InstanceofTest clone = (InstanceofTest)instanceofTest.clone();
@Override
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
6、finalize
finalize()方法当我们对象被回收之前,我们会调用当前对象的finalize方法。不要主动调用,一般由垃圾回收器调用当前对象的finalize方法
7、getClass
反射时class类的实例获取:对象.getClass()用到的
8、wait、notify和notifyAll
线程中使用