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 已废弃,不用记实现。
相关推荐
Tisfy36 分钟前
LeetCode 1927.求和游戏:抵消+看最值
java·leetcode·游戏·题解·博弈论
「QT(C++)开发工程师」6 小时前
C++ 11 常用for循环
开发语言·c++
我还记得那天6 小时前
0 初识C++
开发语言·c++
FfHUCisI6 小时前
Go 编译过程全景
开发语言·后端·golang
FfHUCisI6 小时前
Golang 语法分析与 AST:Parser 与 go/ast
开发语言·后端·golang
秋饼7 小时前
JDK 27 企业级 AI 服务落地实战:G1 默认、紧凑对象头、后量子 TLS 与 JFR 脱敏全解析
java·ai·技术分享·后端开发
卓怡学长7 小时前
w176基于SpringBoot的医院管理系统
java·spring boot·spring·maven·intellij-idea
lemon_sjdk7 小时前
ObjectProperty
java·开发语言·算法
大模型码小白8 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring