超类、基类,所有类的直接或间接继承Object类,位于继承树的最顶层

任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承

Object类中所定义的方法,是所有对象都具备的方法

Object类型可以存储任何对象:

作为参数,可接受任何对象

作为返回值,可返回任何对象

getClass()方法

public final Class<?> getClass(){}

返回引用中存储的实际对象类型

应用:通常用于判断两个引用中实际存储对象类型是否一致

public class TestStudent {
    public static void main(String[] args) {
        Student s1 = new Student("你滚",27);
        Student s2 = new Student("那你",24);
        //判断s1与s2是否是同一个对象
//        Class class1=s1.getClass();
//        Class class2 = s2.getClass();
        if (s1.getClass().equals(s2.getClass())){
            System.out.println("是同一个对象啊!");
        }else {
            System.out.println("不属于同一个对象");
        }

    }
}

hashCode()方法

public int hashCode(){}

返回该对象的哈希码值

哈希值根据对象的地址 或字符串或数字使用hash算法计算出来的 int类型的数值

一般情况下相同对象返回相同的哈希码

toString()方法

public String toString(){}

返回该对象的字符串表示(表现形式)

可以根据程序需求覆盖该方法,如:展示对象各个属性值

equals()方法

public boolean equals(Object obj){}

默认实现为(this == obj),比较两个对象地址是否相同

可进行覆盖,比较两个对象的内容是否相同

(在比较引用数据类型时,equals方法本质与==一样,比较地址

在比较基本数据类型时,equals方法比较的依旧时地址,==比较的时值)

equals方法覆盖

  1. 比较两个引用是否指向同一个对象
  2. 判断obj是否为null
  3. 判断两个引用指向的实际对象类型是否一致
  4. 强制类型转换
  5. 依次比较各个属性值是否相同
public class Student {
    private String name;
    private int age = 30;

    public Student() {
    }
    public Student(String name,int age){
        super();
        this.name=name;
        this.age=age;
    }


    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';
    }

    @Override
    public boolean equals(Object obj) {
        // 1.判断两个对象是否是同一个引用
        if (this==obj){
            return true;
        }
        //  2.判断obj是否为null
         else if (obj !=null) {
             return true;
        }
         //  3.判断是否是同一个类型
        //  判断对象是否是某种类型
        else if (this instanceof Student) {
            //  4.强制类型转换
            Student s =(Student) obj;
            //  5.比较属性
            if (this.name.equals(s.getName())&& this.age==s.getAge()){
                return true;
            }
        }
        return false;
    }
}

finalize()方法

(简单来说就是没有创建对象,没有实例化,没有开辟空间,就是垃圾对象)

当对象被判定为垃圾对象时,有JVM自动调用此方法,用以标记垃圾对象,进入回收队列。

垃圾对象:没有有效引用指向此对象时,为垃圾对象

垃圾回收:由GC销毁垃圾对象,释放数据存储空间

自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象

手动回收机制:使用System.gc();通知JVM执行垃圾回收