当前位置: 首页 > news >正文

java基础面试题(6)--Object

Object类中的常用方法

Java 中的 java.lang.Object 类是所有类的根类,任何类都直接或间接继承自它。Object 类提供了一些基本方法,这些方法在所有 Java 对象中都可用。以下是其常用方法的详细说明:

1. toString()

  • 功能:返回对象的字符串表示形式,默认格式为 类名@哈希码的十六进制(如 com.example.Person@1b6d3586)。
  • 用途:常用于打印对象信息,方便调试。
  • 建议:子类通常会重写此方法,返回更有意义的信息(如对象的属性值)。
@Override
public String toString() {return "Person{name='" + name + "', age=" + age + "}";
}

2. equals(Object obj)

  • 功能:判断当前对象与参数对象是否 “相等”。默认实现是比较对象引用(即 this == obj,只有两个引用指向同一对象时才返回 true)。
  • 用途:比较两个对象的内容是否相等(而非引用是否相同)。
  • 注意
    • 重写时需遵循等价性原则(自反性、对称性、传递性等)。
    • 通常与 hashCode() 一起重写(两者逻辑需一致)。
@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()

  • 功能:返回对象的哈希码(一个 int 值),用于哈希表(如 HashMapHashSet)中快速定位对象。
  • 约定
    • 如果两个对象通过 equals() 判定相等,则它们的 hashCode() 必须返回相同值。
    • 如果两个对象 hashCode() 不同,则 equals() 一定返回 false(反之不成立)。
@Override
public int hashCode() {return Objects.hash(name, age); // 利用工具类生成哈希码
}

4. getClass()

  • 功能:返回对象的运行时类(Class 对象)。
  • 用途:获取对象的类型信息,常用于反射编程。
Person p = new Person();
Class<?> clazz = p.getClass();
System.out.println(clazz.getName()); // 输出类的全限定名(如 com.example.Person)

5. clone()

  • 功能:创建并返回当前对象的副本(浅拷贝)。
  • 使用条件
    • 类必须实现 Cloneable 接口(否则抛出 CloneNotSupportedException)。
    • 需重写此方法并修改为 public 访问权限。
  • 示例:见(5) “浅拷贝” 相关内容。

6. notify() / notifyAll() / wait()

  • 功能:用于多线程通信,协调线程间的同步与等待。
    • notify():唤醒在此对象监视器上等待的单个线程
    • notifyAll():唤醒在此对象监视器上等待的所有线程
    • wait():使当前线程进入等待状态,直到被其他线程唤醒或超时。
  • 注意:这些方法必须在同步代码块(synchronized 中调用,否则抛出 IllegalMonitorStateException

7. finalize()

  • 功能:垃圾回收器回收对象前调用的方法,用于释放资源(如关闭文件、网络连接)。
  • 特点
    • 调用时机不确定(由 JVM 决定),不建议依赖它释放资源。
    • Java 9 后被标记为过时(@Deprecated),推荐使用 try-with-resources 等方式。

http://www.dtcms.com/a/304381.html

相关文章:

  • Jenkins 节点连接故障定位及解决方案总结 - PKIX path validation failed
  • 如何创建一个 Solana 钱包?
  • 在 Ubuntu 下测试单目与双目相机
  • ubuntu 25.04 自带JS引擎gjs运行GTK with JavaScript 应用
  • B+树高效实现与优化技巧
  • 微服务 01
  • FastAPI后台任务:异步魔法还是同步噩梦?
  • Spring Boot with RabbitMQ:四大核心模式指南
  • 代码随想录算法训练营第三十天|0/1背包问题
  • 如何保证DoIP的网络安全?
  • rtp、rtcp、rtsp、rtmp协议详解
  • 嵌入式学习日志(十一)
  • 【windows系统服务端ssh免密登录配置坑】
  • 低空经济应用-无人机拉格朗日粒子追踪技术
  • 阿里云上进行k8s集群的配置
  • 电脑没有声音了怎么恢复 快速解决音频故障
  • 使用 Databend Cloud 归档 OceanBase 数据数据库
  • ElasticStack技术栈概述及Elasticsearch8.2.2集群部署并更换JDK版本为openjdk-17
  • 路由器路由协议详解:从 RIP 到 OSPF 的技术演进
  • TRACERT命令
  • 迅为RK3588开发板安卓GPIO调用-APP运行测试
  • HarmonyOS-ArkUI Web控件基础铺垫6--TCP协议- 流量控制算法与拥塞控制算法
  • LeetCode Hot 100 搜索二维矩阵
  • 抽象工厂模式 Abastract Factory Pattern
  • 从本地 Docker 部署的 Dify 中导出知识库内容(1.6版本亲测有效)
  • 设计一个高可用、可拓展、监控报警系统,使用普罗米修斯和grafana,并给出go实现
  • 无穿戴动作捕捉技术:驱动历史活化、乐园叙事与教育沉浸的文旅利器
  • JVM知识点(2)
  • 从协议栈到ath12k_mac_op_tx的完整调用路径
  • Leetcode——41. 缺失的第一个正数