java Object类

object类:

  • 超类、基类,所有类的直接或间接父类,位于继承树的最顶层
  • 任何类,如没有书写extends显示继承某个类,都默认继承Object类,否则为间接继承
  • Object类中所定义的方法,是所有对象都具备的方法
  • Object类型可以存储任何对象
    • 作为参数,可接受任何对象
    • 作为返回值,可返回任务对象

Object类的方法

  1. getClass:

    • 返回引用中存储的实际对象类型
    • 通常用于判断两个引用中实际存储对象类型是否一致
  2. hashCode:

    • 返回该对象的哈希码值

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

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

  3. toString:

    • 返回该对象的字符串表示形式
    • 可以根据程序需要覆盖该方法,如:展示对象各个属性值
  4. equals:

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

    image-20211214085752960

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

    • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
    • 垃圾对象:没有有效引用指向此对象时,为垃圾对象
    • 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
    • 自动垃圾回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
    • 手动回收机制:使用System.gc();通知JVM执行垃圾回收
//定义一个学生类
public class Student {
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    private String name;
    private int age;
    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;
    }
    //重写toString方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    @Override
    public boolean equals(Object obj) {
        //1.判断是否为同一个引用,若相同,则值也必定相同
        if (this==obj){
            return true;
        }
        //2.判断是否为空,为空返回false
        if (obj==null){
            return false;
        }
        //3.判断是否为同一个类型或是其派生类,如果类型不同,进行强制类型转换
        //判断条件也可以写成obj instanceof Student
        if (this.getClass()==obj.getClass()){
            //4.强制类型转换
            Student s=(Student)obj;
            //进行比较,字符串的比较用equals
            if (this.age==((Student) obj).age&&this.name.equals(((Student) obj).name)){
                return true;
            }
        }
        return false;
    }
    @Override
    protected void finalize() throws Throwable {
        System.out.println(this.name+"回收了");
    }
}
public class ObjectMethod {
    public static void main(String[] args) {
        Student st1=new Student("韩xx",20);
        Student st2=new Student("宋xx",18);
        Object obj1=new Object();
        //1.getClass方法:判断两个类型是不是同一个类型
        if (st1.getClass().equals(st2.getClass())){
            System.out.println("是同一类型");
        }
        System.out.println(st1.getClass().equals(st2.getClass()));//true
        System.out.println(st1.getClass().equals(obj1.getClass()));//false
        //2.hashCode方法:返回对象的哈希值
        System.out.println(st1.hashCode());//460141958
        System.out.println(st2.hashCode());//1163157884
        Student st3=st1;
        System.out.println(st3.hashCode());//460141958
        //3.toString方法:返回对象的字符串形势,可根据情况进行重写
        System.out.println(st1.toString());
        System.out.println(st2.toString());
        System.out.println(st3.toString());
        //4.equals方法:比较两个对象的地址是否相同,可进行方法的重写,重新定义规则
        //不重写
        System.out.println(st1.equals(st2));//fasle,地址不相同
        System.out.println(st1.equals(st3));//true,地址相同
        Student st4=new Student("韩xx",20);
        System.out.println(st1.equals(st4));//false,虽然内容相同,但是地址不同
        Object st5=new Student("韩xx",20);
        System.out.println(st5.equals(st4));//false,虽然内容相同,但是地址不同,类型不同
        //重写后
//        System.out.println(st1.equals(st2));//fasle,地址不相同
//        System.out.println(st1.equals(st3));//true,地址相同
//        Student st4=new Student("韩xx",20);
//        System.out.println(st1.equals(st4));//true,
//        Object st5=new Student("韩xx",20);
//        System.out.println(st5.equals(st4));//true,

        //5.垃圾回收,finalize方法(当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列),可调用System.gc手动回收垃圾
        Student test1= new Student("han1",20);
        Student test2= new Student("han2",20);
        new Student("han3",20);//判定为垃圾对象时
        new Student("han4",20);//判定为垃圾对象时
        new Student("han5",20);//判定为垃圾对象时
        System.gc();
        //输出:
        //han5回收了
        //han4回收了
        //han3回收了
    }
}

posted @ 2022-01-12 18:55  是韩信啊  阅读(35)  评论(0编辑  收藏  举报