workplace-blog

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  30 随笔 :: 0 文章 :: 0 评论 :: 692 阅读

Object类

一.概述

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

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

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

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

  • 作为参数可以接受任何对象

  • 作为返回值可以接受任何对象

二.常用方法

1.getClass()方法

  • public final Class<?> getClass()
  • 返回引用中存储的实际对象类型
  • 应用:通常用于判断两个引用中实际存储对象类型是否一致
public class Student {
    //属性字段
    private String name;
    private int age;
    public Student() {//构造方法
        
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = 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;
    }
}
public class TestStudent {
    public static void main(String[] args) {
        Student s1 = new Student("a",6);
        Student s2 = new Student("b",3);
        //判断s1和s2是不是同一类型
        Class class1 = s1.getClass();
        Class class2 = s2.getClass();
        if (class1 == class2){
            System.out.println("true");
        }else {
            System.out.println("false");
        }
    }
}
//输出结果为true

2.hashCode()方法

  • public int hashCode ()
  • 返回该对象的哈希码值
  • 哈希值根据对象的地址或字符或数字使用hash算法计算出来的int类型的数值
  • 一般情况下相同对象返回的相同哈希码值
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
Student s3 = s1;//两个对象指向同一个地址
System.out.println(s3.hashCode());

//输出结果为:
    168423058
    821270929
    168423058

3.toString()方法

  • public String toString ()
  • 返回该对象的字符串表示(表现类型)
  • 可以根据程序需求覆盖该方法,如:展示对象的各个属性值
//Object类中toString方法说明
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
//toString方法
System.out.println(s1.toString());
System.out.println(s2.toString());

//输出结果:
          study01.Object.Student@a09ee92
          study01.Object.Student@30f39991
//重写toString方法
@Override
public String toString() {
    return name + ":" +age;
}

//toString方法
System.out.println(s1.toString());
System.out.println(s2.toString());

//输出结果:(s1和s2的属性字段值)
           a:6
           b:3

4.equals方法

  • public boolean equals (Object obj)
  • 默认实现为(this == obj),比较两个对象地址是否相等
  • 可进行覆盖,比较两个对象内容是否相同
//equals方法
System.out.println(s1.equals(s2));//比较地址输出false(this:s1,obj:s2)
  • equals方法覆盖步骤
    • 比较两个引用是否指向同一个对象
    • 判断obj是否为null
    • 判断两个引用指向的实际对象类型是否一致
    • 强制类型转换
    • 依次比较各个属性值是否相同
//重写Object类的equals方法
@Override
public boolean equals(Object obj) {
    //1.判断两个对象引用指向是否相同
    if (this == obj){
        return true;
    }
    //2.判断obj是否为null
    if ( obj == null ){
        return false;
    }
    //3.判断是否是同一个类型
    if ( obj instanceof Student){
        //4.强制类型转换
        Student s = (Student)obj;
        //5.比较属性值
        if ( this.name.equals(s.getName()) && this.age == s.getAge()){
            return true;
        }
    }
    return false;
}
Student a = new Student("小明",10);
Student b = new Student("小明",10);
System.out.println(a.equals(b));//重写后比较的为内容,输出true

5.finalize()方法

  • 当对象被判为垃圾对象,Jvm自动调用该方法,用以标记垃圾对象进入回收队列
  • 垃圾对象:没有有效引用指向该对象时,为垃圾对象
  • 垃圾回收:由GC销毁垃圾对象,释放数据储存空间
  • 自动回收机制:当JVM内存耗尽,一次性回收所有垃圾对象
  • 手动回收机制:使用System.gc,通知JVM回收垃圾对象
//方法重写
@Override
protected void finalize() throws Throwable {
    System.out.println(this.name + "对象被回收了");
}

 //finalize()方法;
        Student c = new Student();//堆里的内存空间有对象c,d指向,不会被回收
        Student d =new Student();
        new Student("bb",13);//无对象指向的内存空间会被gc操作回收
        new Student("aa",12);
        System.gc();

//结果输出:
    aa对象被回收了
    bb对象被回收了
posted on   多巴胺LLL  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示