📜 核心目录
👑 Object的王者地位
Java类型体系金字塔
Object
基本类型包装类
集合框架
自定义类
异常体系
数组对象
编译器的秘密
// 所有类的隐式继承 public class MyClass /* extends Object */ { //... }
🛠️ 九大核心方法逐帧解析
equals方法与==的量子纠缠
// 宇宙级误解示例 String s1 = new String("Java"); String s2 = new String("Java"); System.out.println(s1 == s2); // false System.out.println(s1.equals(s2)); // true
hashCode方法契约体系
同一对象多次调用
必须返回相同值
equals返回true
hashCode必须相等
equals返回false
hashCode尽可能不同
toString的调试艺术
// IDEA自动生成模板 public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }
多线程通信原理解密
wait/notify机制
2000-01-012000-02-012000-03-012000-04-012000-05-012000-06-012000-07-012000-08-012000-09-012000-10-012000-11-012000-12-012001-01-012001-02-012001-03-012001-04-012001-05-01获取对象锁获取对象锁执行wait操作处理业务逻辑等待通知发送notify线程A线程B锁的获取流程
同步代码块解剖
synchronized (lockObject) { while (!condition) { lockObject.wait(); } // 业务处理 lockObject.notifyAll(); }
克隆战争(深拷贝VS浅拷贝)
克隆方法的三重境界
// 实现Cloneable接口三部曲 class DeepCloneDemo implements Cloneable { private int[] data; @Override protected Object clone() throws CloneNotSupportedException { DeepCloneDemo cloned = (DeepCloneDemo) super.clone(); cloned.data = Arrays.copyOf(this.data, this.data.length); return cloned; } }
拷贝方式对比矩阵
特征 | 浅拷贝 | 深拷贝 |
---|---|---|
对象引用 | 共享 | 新建 |
内存消耗 | 低 | 高 |
实现复杂度 | 简单 | 复杂 |
适用场景 | 不可变对象 | 嵌套可变对象 |
⚰️ 死亡回响(finalize机制)
垃圾回收最后防线
垃圾收集器对象第一次标记可达性分析没有重写finalize直接回收重写了finalize则进入F-Queue垃圾收集器对象
JDK版本演进
// 自Java9起被标记为过时 @Deprecated(since="9") protected void finalize() throws Throwable { }
🧠 类型系统设计哲学
万物皆对象的三大原则
-
单根继承体系
-
运行时类型识别(RTTI)
-
多态实现基础
getClass方法妙用
// 精确判断泛型类型 Class<?> clazz = list.getClass(); if (clazz == ArrayList.class) { System.out.println("真实类型是ArrayList"); }
🔥 高频灵魂拷问
Q1:为什么重写equals必须重写hashCode?
-
HashMap等集合类的哈希存储依赖
-
破坏Object类定义的契约关系
-
示例代码灾难:
Map<Student, String> map = new HashMap<>(); map.put(new Student(1, "Tom"), "A"); // 当Student只重写equals不重写hashCode时: map.get(new Student(1, "Tom")); // 返回null
🚀 性能优化圣经
对象监控黑科技
// Java Mission Control检测对象创建 public static void main(String[] args) { for (int i = 0; i < 1000000; i++) { new Object(); // 产生大量瞬时对象 } }
hashCode性能提升
// Effective Java推荐写法 @Override public int hashCode() { return Objects.hash(name, age, department); }
新版本特性演进
Java16记录类
// 新的语义化对象定义 public record Point(int x, int y) {} // 自动生成equals/hashCode/toString Point p = new Point(10, 20); System.out.println(p.x()); // 访问器方法
Null处理最佳实践
// 现代判空方式 if (Objects.isNull(obj)) { throw new NullPointerException(); } String result = Optional.ofNullable(obj) .map(Object::toString) .orElse("default");
⚠️ 黑暗森林法则
对象逃逸案例分析
// 构造器中的this泄漏 public class ThisEscape { public ThisEscape(EventSource source) { source.registerListener( new EventListener() { public void onEvent(Event e) { doSomething(e); // 此时对象还未完全初始化 } }); // 后续初始化操作... } }
思维跃迁挑战
-
如何用Object的wait实现分布式锁?
-
为什么Java不允许多继承却允许多实现?
-
如果让你重新设计Object类,会做哪些改变