Object类

Object类概述

  1. 超类,基类,所有类的直接或间接父类,位于继承树的最顶层

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

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

  4. Object类型可以存储任何对象

    • 作为参数,可接受任何对象
    • 作为返回值,可返回任何对象

getClass()方法

  1. public final Class<?> getClass(){}
  2. 返回引用中存储的实际对象类型
  3. 应用:通常用于判断两个引用中实际存储对象类型是否一致
public class Student {
    private String name;
    private int age;
    
    //无参
    public Student(){

    }

    //有参
    public Student(String name,int age){
        super();
        this.age=age;
        this.name=name;
    }
    
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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




public class TestStudent {
    public static void main(String[] args) {
        //getClass()方法
        Student student1=new Student("zqq",20);
        Student student2=new Student("zzz",29);
        //判断s1和s2是不是同一个类型
        Class class1=student1.getClass();
        Class class2=student1.getClass();

        if (class1==class2){
            System.out.println("s1和s2属于同一个类型");
        }else {
            System.out.println("不是同一个类型");
        }
    }
}

hashCode()方法

  1. public int hashCode(){}

  2. 返回该对象的哈希码值

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

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

    //hashCode()方法
    System.out.println(student1.hashCode());//460141958
    System.out.println(student2.hashCode());//1163157884
    Student student3=student1;
    System.out.println(student3.hashCode());//和s1的哈希值相同,460141958
    

toString()方法

  1. public String toString(){}

  2. 返回该对象的字符串表示

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

    public class Student {
        private String name;
        private int age;
      
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
    
    //toString()方法
    System.out.println(student1.toString());//Student{name='zqq', age=20}
    System.out.println(student2.toString());//Student{name='zzz', age=29}
    

equals()方法

  1. public boolean equals(Object obj){}

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

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

  4. 覆盖步骤:

    • 比较两个引用是否指向同一个对象
    • 判断obj是否为null
    • 判断两个引用指向的实际对象类型是否一致
    • 强制类型转换
    • 依次比较各个属性值是否相同
public class Student {
    private String name;
    private int age;
    
@Override
    public boolean equals(Object obj) {
        //1.判断两个对象是否是同一个引用
        if (this==obj){
          return true;
        }
        //2.判断obj是否为空
        if (obj==null){
            return false;
        }
        //3.判断是否是同一个类型
      /*  if (this.getClass()==obj.getClass()){

        }*/
        if (obj instanceof Student){
            //4.强制类型转换
            Student s=(Student)obj;
            //5.比较属性
            if (this.name.equals(s.getName())&&this.age==s.getAge()){
                return true;
            }
        }
        return false;
    }
}


//equals()方法,判断两个对象是否相等
        System.out.println(student1.equals(student2));//false

        Student student4=new Student("qqq",23);
        Student student5=new Student("qqq",23);
        System.out.println(student4.equals(student5));//true

finalize()方法

  1. 当对象被判定为垃圾对象时,由JVM自动调用此方法,用于标记垃圾对象,进入回收队列
  2. 垃圾对象:没有有效引用指向词对象时,为垃圾对象
  3. 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
  4. 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
  5. 手动回收机制:使用System.gc;通知JVM执行垃圾回收
public class Student {
    private String name;
    private int age;
    
    @Override
    protected void finalize() throws Throwable {
        System.out.println(this.name+"对象被回收了");
   }
}


public class TestStudent2 {
    public static void main(String[] args) {
        Student s1=new Student("aaa",21);
        Student s2=new Student("ddd",22);
        Student s3=new Student("ccc",23);
        Student s4=new Student("www",25);
        Student s5=new Student("asd",26);
        
        /*new Student("aaa",21);
        new Student("ddd",22);
        new Student("ccc",23);
        new Student("www",25);
        new Student("asd",26);*/

        
         //回收垃圾
        System.gc();
        System.out.println("回收垃圾");//回收垃圾
        //System.out.println("回收垃圾");//回收垃圾
                                        asd对象被回收了
                                        www对象被回收了
                                        ccc对象被回收了
                                        ddd对象被回收了
                                        aaa对象被回收了
 
        
    }
}