Object
-
祖宗类,最大父类
-
所有类都直接或者间接的继承自Object
-
该类中存放着所有对象都应该拥有的方法,可以根据需求对部分方法提供重写
常用方法
-
Class getClass():获取引用的实际对象类型
import com.bz.entity.Person; import com.bz.entity.Student; import com.bz.entity.Teacher; public class Test { public static void main(String[] args) { //利用多态创建学生对象 Person p = new Student(); //利用多态创建一个老师对象 Person p2 = new Teacher(); Student stu = new Student(); //获取实际对象类型 System.out.println(p.getClass()); //判断p和p2的实际对象类型是否相同 System.out.println(p.getClass() == p2.getClass());//f System.out.println(p.getClass() == stu.getClass());//t } }
-
int hashCode():用来获取对象的哈希码值
-
重写原因:该方法默认根据对象堆地址获取哈希码值,但是在某些需求场景下,我们需要关注的是对象内容,内容相同则哈希码值相同,所以需要重写
-
方法签名:public int hashCode()
-
重写规则:
-
整数类型:直接相加(long类型需要强转为int)
-
double类型:强转为int后相加
-
类库中的引用类型(如String):调用属性名.hashCode()相加
-
自定义引用类型:也重写其hashCode方法,然后调用属性名.hashCode()相加
-
public class Student extends Person{ private String name; private int age; private double score; //老师对象属性 private Teacher tea; //重写hashCode public int hashCode(){ return age+name.hashCode()+(int)score+tea.hashCode(); } //省略getter、setter、构造 }
public class Teacher extends Person{ private String name; private String className; //重写hashCode public int hashCode(){ return name.hashCode() + className.hashCode(); } //省略getter、setter、构造 }
-
-
boolean equals(Object):判断当前对象与参数对象是否相同
-
重写原因:该方法默认比较双方堆地址,但是在某些需求场景下,需要比较双方内容,所以需要重写
-
方法签名:public boolean equals(Object o)
-
重写规则:
//重写equals方法:用this当前对象和参数o进行比较 public boolean equals(Object o){ //自反性 if (this == o) { return true;//自己和自己比,一定相同 } //空值判断 if (o == null) { return false;//与null值比,一定不同 } //类型比较 if (this.getClass() != o.getClass()) { return false;//实际对象类型不同,一定不同 } //类型强转:将参数Object类型强转为当前类型 Student stu=(Student) o; //属性值比较 if (this.name.equals(stu.name) && this.age==stu.age && this.score==stu.score){ return true; } return false; }
==:基本类型比较值,引用类型比较地址
引用类型比较值:调用equals方法
-
如果为自定义引用类型,则也需要重写equals才能比较值
-
-
-
String toString():获取对象的详细信息
-
特点:直接使用引用名时会默认调用
-
重写原因:该方法默认获取对象地址,但是实际开发中,获取对象具体属性信息更常用,所以需要重写
-
方法签名:public String toString()
-
重写规则:根据需求拼接字符串返回即可
public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", score=" + score + ", tea=" + tea + '}'; }
-
-
void finalize():用来进行垃圾回收
-
垃圾回收机制:当内存满到不足以支撑新对象的创建时,虚拟机会自动调用垃圾对象的finalize方法对其进行回收销毁,以释放空间
-
垃圾对象的判断标准:无任何引用指向的对象(零引用机制)
-
手动垃圾回收:借助垃圾回收器(GC),在代码中调用System.gc()完成手动垃圾回收
-