0bject类常用方法及应用场景?

在Java中,Object 类是所有类的根父类,其提供的方法会被所有子类继承。以下是Object类的常用方法及其典型应用场景:


1. toString()

  • 作用:返回对象的字符串表示(默认格式:类名@哈希码)。

  • 重写场景

    • 打印对象时需要可读性更高的信息(如日志、调试)。

    • 集合的System.out.println()输出依赖元素的toString()

  • 示例

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


2. equals(Object obj)

  • 作用:比较两个对象是否“逻辑相等”(默认比较内存地址,即==)。

  • 重写场景

    • 需要根据对象内容(而非地址)判断相等性(如值对象、DTO)。

    • 集合类(如HashSetArrayList.contains())依赖此方法。

  • 规则

    • 必须重写hashCode()以保证一致性(若equals返回truehashCode必须相同)。

    • 满足自反性、对称性、传递性、一致性。

  • 示例

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }


3. hashCode()

  • 作用:返回对象的哈希码(默认返回内存地址的哈希值)。

  • 重写场景

    • 对象作为HashMap的键或HashSet的元素时。

    • 必须与equals()逻辑一致。

  • 示例

    @Override
    public int hashCode() {
        return Objects.hash(name, age); // 使用工具类简化计算
    }


4. getClass()

  • 作用:返回对象的运行时类(Class对象)。

  • 应用场景

    • 反射操作(如动态创建实例、调用方法)。

    • 精确判断对象类型(优于instanceof)。

  • 示例

    Class<?> clazz = obj.getClass();
    System.out.println(clazz.getName()); // 输出类全限定名


5. clone()

  • 作用:创建对象的浅拷贝副本。

  • 应用场景

    • 需要复制对象时(需实现Cloneable标记接口,否则抛CloneNotSupportedException)。

    • 深拷贝需手动重写(递归复制引用类型字段)。

  • 示例

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); // 浅拷贝
    }


6. finalize()(已废弃)

  • 作用:对象被垃圾回收前调用的清理方法(Java 9+标记为废弃)。

  • 替代方案:使用AutoCloseable(如try-with-resources)或显式清理方法。


7. wait()notify()notifyAll()

  • 作用:线程间通信的等待/通知机制(必须在synchronized块中使用)。

  • 应用场景

    • 生产者-消费者模型。

    • 多线程协作任务(如线程池任务调度)。

  • 示例

    synchronized (lock) {
        while (conditionNotMet) {
            lock.wait(); // 释放锁并等待
        }
        // 执行操作
        lock.notifyAll(); // 唤醒其他线程
    }


核心方法总结

方法典型应用场景注意事项
toString()日志输出、调试建议所有类重写
equals()/hashCode()集合操作、对象比较必须同时重写,保持逻辑一致
getClass()反射、类型判断返回运行时类对象
clone()对象复制深拷贝需手动实现
wait()/notify()多线程同步需搭配synchronized使用

为什么重要?

  1. 默认行为:所有类继承Object,理解其方法避免踩坑(如集合比较错误)。

  2. 框架依赖:如HashMap依赖hashCode()equals(),序列化依赖toString()

  3. 设计规范:正确重写这些方法是面向对象设计的基本要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值