Object终极父类
Object类
Object类是所有类的父类,就算类没有使用extends继承Object类,如果类继承了其他类,终究会有一个父类继承的Object类。
Object的方法
getClass():
返回一个对象的运行时类。
实例:
创建一个类,定义两个变量和有参无参构造方法以及get、set方法

测试类

hashCode():
返回该对象的哈希码值


toString():
返回该对象的字符串表示。

此时返回的是你的包名+类名+@已经它的十六进制hashCode值
这时候我们需要重写toString方法,因为我们不需要这样的结果,我们要输出这个对象的值

这样就重写成功了

equals():
指示某个其他对象是否与此对象“相等”
举个简单的例子,使用equals方法判断两个对象,就算传值是一样的,使用Object的equals方法任然会报错

这样的传值会报错,因为在内存地址上,他俩指向的不是同一个内存地址,除非这样
Student student = new Student("小米",30);
Student student2 = student;
System.out.print(student.equals(student2));//true
因为student2使用的是student的内存地址,所以判断的时候会是true。
解决方法:重写equals方法
public boolean equals(Object obj) {
//判断是否是同一个引用
if(this == obj){
return true;
}
//判断是否为空
if(obj == null){
return false;
}
//判断是否是同一种类型
if (obj instanceof Student){
//强制类型转换
Student s = (Student) obj;
//比较属性
if(this.name.equals(s.getName()) && this.age == s.getAge()){
return true;
}
}
return false;
}
finalize():
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
其实这个方法程序员都不需要调用,因为靠jvm就行了,不需要我们自动回收,用处也就是告诉JVM我这边可能需要回收。
首先重写finalize方法
//重写finalize方法
@Override
protected void finalize() throws Throwable {
System.out.println(this.name + "被回收了");
}
测试
class TestStudent02{
public static void main(String[] args) {
//创建四个垃圾对象
new Student("aaa",20);
new Student("bbb",20);
new Student("ccc",20);
new Student("ddd",20);
new Student("eee",20);
new Student("fff",20);
//垃圾回收
System.gc();
System.out.println("垃圾回收成功");
}
}
运行结果

努力做一个技术流

浙公网安备 33010602011771号