Java Object 类常用方法全讲解

Object 是 Java 中所有类的根父类,任何对象都直接 / 间接继承它,所有对象都能调用它提供的方法。

一、全部核心常用方法清单

  1. toString()
  2. equals(Object obj)
  3. hashCode()
  4. getClass()
  5. clone()
  6. wait() / wait(long) / wait(long,int)
  7. notify() / notifyAll()
  8. finalize()(已废弃,仅了解)

1. toString()

作用

返回对象的字符串描述,打印对象时默认自动调用。

默认实现

java

复制代码
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

输出格式:类名@哈希十六进制,可读性极差,业务实体必须重写。

重写示例

java

复制代码
@Override
public String toString() {
    return "FlowerNote{id=" + id + ", title=" + title + ", userId=" + userId + "}";
}

2. equals(Object o)

作用

对比两个对象是否逻辑相等。

默认实现(底层 ==)

java

复制代码
public boolean equals(Object obj) {
    return (this == obj);
}
  • ==:基本类型比值,引用类型比内存地址;
  • 需求:实体类需要按属性判断相等,必须重写 equals,配套重写 hashCode。

标准重写规范

  1. 判断是否是自身 == o,直接返回 true
  2. 判断对象是否为 null、类是否一致
  3. 强转后逐个对比成员变量

3. hashCode()

作用

返回对象哈希值,用于哈希容器:HashMap、HashSet、Redis 缓存等。

规则(强制约束)

  1. 两个对象 equals() == true,它们的 hashCode 必须相等;
  2. hashCode 相等,equals 不一定相等(哈希碰撞);
  3. 不重写时,返回对象内存地址换算数字。

开发规范:重写 equals 必须同步重写 hashCode,否则存入哈希集合会失效。

4. getClass()

作用

返回当前对象的运行时 Class 对象,反射核心方法。

特点

  • 被 final 修饰,不能重写;
  • 区分编译时类型和运行时真实类型。

java

复制代码
FlowerNote note = new FlowerNote();
Class<?> clazz = note.getClass();
System.out.println(clazz.getName()); // 输出全类名

结合反射:动态创建对象、调用方法、读取属性。

5. clone()

作用

快速复制对象,生成新副本,分为浅拷贝、深拷贝。

限制

  1. 方法是 protected,外部不能直接调用;
  2. 类必须实现 Cloneable 标记接口,否则抛 CloneNotSupportedException。

浅拷贝默认规则

基本类型直接复制值;引用类型只复制地址,新旧对象共用同一个引用对象。

6. wait () /notify () /notifyAll () 【多线程】

使用前提:必须在 synchronized 同步代码块内调用

  1. wait():释放锁,让当前线程进入等待队列,等待被唤醒;
  2. notify():随机唤醒一个等待该对象锁的线程;
  3. notifyAll():唤醒所有等待该对象锁的线程;

适用场景:生产者消费者、消息队列(你的项目 RocketMQ 底层同步思想)。

7. finalize()

作用

对象被 GC 回收前触发执行,用于释放资源。

现状

Java9 开始标记为 @Deprecated,不推荐使用,资源释放改用 try-with-resources。


高频面试重点总结

  1. 所有 Java 对象都继承 Object,无需手动 extends;
  2. toString 打印日志必备,实体一律重写;
  3. equals + hashCode 成对重写,哈希集合必用;
  4. getClass() 反射基石,final 不可重写;
  5. clone() 需要实现 Cloneable,区分深浅拷贝;
  6. wait/notify 配套 synchronized,用于线程间通信;
  7. finalize 已废弃,不用记实现。
相关推荐
懂点Tech5 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang5 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠5 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
美狐美颜SDK开放平台6 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04246 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘566 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅7 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅8 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
silvamux_8 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
bkspiderx8 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信