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 已废弃,不用记实现。
相关推荐
XH华1 小时前
C++语言第二章类和对象(下)
开发语言·c++
你有我备注吗1 小时前
SQL学习之查询
java·sql·学习
从零开始的代码生活_1 小时前
C++ stack、queue 与 priority_queue:容器适配器原理与实战
开发语言·c++·后端·学习·算法
techdashen2 小时前
Go 1.25 新增 `reflect.TypeAssert`:更直接、更高效地从 `reflect.Value` 取出类型值
开发语言·后端·golang
2zcode2 小时前
项目文档:基于MATLAB低采样率ISAR成像的快速稀疏重建算法研究
开发语言·算法·matlab
xixi09242 小时前
JMeter5.6.3基础使用教程1
java·开发语言
带刺的坐椅2 小时前
用 Solon ReActAgent 落地发票识别与智能报销
java·llm·solon·react-agent
এ慕ོ冬℘゜2 小时前
原生 JS 实现自定义单选日历组件(无 UI 库、纯手写、禁用过去日期)
开发语言·javascript·ui
Ulyanov2 小时前
刚体动力学方程——牛顿-欧拉与陀螺效应的奥秘
开发语言·python·目标跟踪·雷达电子对抗·导引头