Object终极父类

Object类

Object类是所有类的父类,就算类没有使用extends继承Object类,如果类继承了其他类,终究会有一个父类继承的Object类。


Object的方法

getClass():

返回一个对象的运行时类。

实例

创建一个类,定义两个变量和有参无参构造方法以及get、set方法

image-20210409142053678

测试类
image-20210409142217224


hashCode():

返回该对象的哈希码值

image-20210409143258025

image-20210409143304872


toString():

返回该对象的字符串表示。

image-20210409152407833

此时返回的是你的包名+类名+@已经它的十六进制hashCode值

这时候我们需要重写toString方法,因为我们不需要这样的结果,我们要输出这个对象的值

image-20210409152547121

这样就重写成功了

image-20210409152603735

equals():

指示某个其他对象是否与此对象“相等”

举个简单的例子,使用equals方法判断两个对象,就算传值是一样的,使用Object的equals方法任然会报错

image-20210409155314241

这样的传值会报错,因为在内存地址上,他俩指向的不是同一个内存地址,除非这样

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("垃圾回收成功");
    }
}

运行结果
image-20210409162708021


posted @ 2021-04-12 15:53  SHE_HYH  阅读(183)  评论(0)    收藏  举报