--- title: "00-基础概览" created: 2025-11-25 tags: - Java --- # Java 基础 ## 📚 核心知识点地图 [[00-java的优势|java的优势]] ### 一、数据类型体系 ``` 基本类型(8种) → 包装类 → 自动装拆箱 → 缓存池机制 ↓ 类型转换规则 → 隐式/显式 → 精度丢失 ``` - [[01-基本类型与包装类|01-基本类型与包装类]] - byte/short/int/long/float/double/char/boolean - [[02-自动装拆箱|02-自动装拆箱]] - valueOf()原理、NPE陷阱、性能影响 - [[03-缓存池机制(Cache Pool)|03-缓存池机制(Cache Pool)]] - Integer(-128~127)、为什么127?如何扩展? - [[04-类型转换规则|04-类型转换规则]] - 提升规则、强制转换、复合赋值的隐式转换 ### 二、核心类详解 ``` String → StringBuilder/Buffer → BigDecimal → 时间新API → Comparable/Comparator ↓ 不可变性 → 常量池 → intern() → 拼接优化 → 线程安全 → 排序策略 ``` - [[01-String详解|01-String详解]] - final char[] → final byte[]、为什么不可变? - [[01-String详解|01-String详解]] - 字面量 vs new、intern()原理、JDK7变化 - [[02-StringBuilder系列|02-StringBuilder系列]] - 三者对比、扩容机制、线程安全 - [[03-BigDecimal|03-BigDecimal]] - 构造方式、compareTo vs equals、舍入模式 - [[04-Java时间新API|04-Java时间新API]] - java.time 替代 Date/Calendar、格式化、跨时区 - [[05-Comparable与Comparator|05-Comparable与Comparator]] - 自然顺序 vs 外部策略、排序溢出、TreeSet 去重 ### 三、Object通用方法 ``` equals/hashCode → toString → clone → finalize(废弃) ↓ 重写规范 → HashMap应用 → fail-fast ``` - [[01-Object通用方法|01-Object通用方法]] - 重写规范、5大约定、HashMap为什么需要? - [[01-Object通用方法|01-Object通用方法]] - 默认实现、重写技巧、日志应用 - [[01-Object通用方法|01-Object通用方法]] - 浅拷贝 vs 深拷贝、为什么不推荐clone()? - [[01-Object通用方法|01-Object通用方法]] - wait/notify/notifyAll、为什么在Object中? ### 四、面向对象核心 ``` 继承 → 多态 → 封装 ↓ 抽象类 vs 接口 → 访问权限 → 重写 vs 重载 ``` - [[01-继承与多态|01-继承与多态]] - 里氏替换、方法调用优先级、动态绑定 - [[02-抽象类与接口|02-抽象类与接口]] - 设计思想、JDK8+接口增强、选择原则 - [[03-访问权限|03-访问权限]] - public/protected/default/private、封装原则 - [[04-重写与重载|04-重写与重载]] - 编译时多态 vs 运行时多态、协变返回 ### 五、关键字 ``` final → static → super/this ↓ 不可变 → 类级别 → 继承体系 ``` - [[01-final关键字|01-final关键字]] - 修饰类/方法/变量、内存语义、性能优化 - [[02-static关键字|02-static关键字]] - 静态块、初始化顺序、内存泄漏风险 - [[03-super与this关键字|03-super与this关键字]] - 构造器调用、方法覆盖、同名变量访问 - [[04-其他关键字|04-其他关键字]] - switch支持类型、goto保留字、参数传递 ### 六、核心机制 ``` 反射 → 泛型 → 注解 → 异常 → 枚举 / Lambda / Stream / IO ↓ 动态能力 → 类型安全 → 元数据 → 错误处理 → 现代语言特性 ``` - [[01-Class对象与反射机制|01-Class对象与反射机制]] - Class对象、Field/Method/Constructor、性能开销 - [[02-泛型详解|02-泛型详解]] - 类型擦除、通配符(? extends/super)、PECS原则 - [[03-注解原理|03-注解原理]] - 元注解、自定义注解、反射解析、框架应用 - [[04-异常体系|04-异常体系]] - Checked vs Unchecked、处理规范、自定义异常 - [[05-动态代理|05-动态代理]] - JDK/CGLIB 动态代理、invokedynamic、Spring AOP 前置 - [[06-枚举|06-枚举]] - 底层原理、枚举单例、EnumMap/EnumSet - [[07-Lambda与函数式接口|07-Lambda与函数式接口]] - 语法、变量捕获、四大函数式接口、方法引用 - [[08-Stream与Optional|08-Stream与Optional]] - 惰性流水线、收集器、并行流、空值类型化 - [[09-IO流体系|09-IO流体系]] - 四棵树、装饰器、序列化、Files/NIO 概念 ### 七、JVM与内存模型 ``` JVM整体结构 → 运行时数据区 → 对象创建与内存分配 ↓ 类加载机制 → 加载/链接/初始化 → 双亲委派 → 自定义类加载器 垃圾回收与内存管理 → 对象存活判定 → GC算法 → GC收集器 → 调优思路 ↓ JMM(Java内存模型) → 主内存/工作内存 → 可见性/有序性/原子性 → 并发关键字 ``` - [[01-JVM与内存模型|01-JVM与内存模型]] - 运行时数据区、堆/栈/方法区、线程模型 - [[02-类加载机制|02-类加载机制]] - 加载/链接/初始化,双亲委派 - [[03-垃圾回收与GC算法|03-垃圾回收与GC算法]] - 对象存活、算法、收集器 - [[04-JMM与内存可见性|04-JMM与内存可见性]] - happens-before / volatile / 重排序(并发基础) ### 八、其他 [[01-java中的位运算技巧|java中的位运算技巧]] [[02-内部类|内部类]] [[03-JDK9-21新特性速览|JDK9-21新特性速览]] [[04-设计模式体系|设计模式体系]] ### 九、java的优势 ``` java的优势(总览) → JVM → 字节码 → JIT/AOT ↓ 自动垃圾回收 → GC机制/内存泄漏/内存溢出 ↓ OOP特性 → 封装/接口隔离/多实现/重载重写多态/访问控制/super/抽象类与接口 ``` - [[00-java的优势|00-java的优势]] - C++ 对比视角:跨平台/垃圾回收/生态/面向对象(块内动线表在这) - [[01-JVM(Java Virtual Machine)|01-JVM(Java Virtual Machine)]] - JVM 是什么、如何屏蔽系统差异 - [[02-字节码|02-字节码]] - 中间代码、javap 实操、class 文件结构 - [[03-JIT编译|03-JIT编译]] - 热点代码、C1/C2、内联/逃逸分析 - [[04-AOT编译|04-AOT编译]] - 提前编译、GraalVM、快速启动场景 - [[00-自动垃圾回收机制|自动垃圾回收机制]] - GC 怎么替你管内存(含 01-内存泄漏 / 02-内存溢出 两篇实操排查) - [[00-OOP特性|OOP特性]] - 12 篇专题:封装/接口隔离/多实现/重载重写/多态/访问控制/多重继承/super/抽象类与接口 ### 十、对比与面试 - [[01-Java基础高频面试题|01-Java基础高频面试题]] - 28 题压轴速答,每题指路既有篇目,自测复盘用 ## 🔥 高频考点 1. **自动装拆箱 + 缓存池** - 为什么 `Integer a=127; b=127; a==b` 为true? - NPE如何产生?如何避免? - 相关:02-自动装拆箱 03-缓存池机制 2. **String不可变性原理** - 为什么设计成final?底层数据结构? - 常量池如何工作?intern()原理? - 相关:01-String不可变性 02-String常量池 3. **equals与hashCode** - 为什么重写equals必须重写hashCode? - HashMap如何依赖这两个方法? - 相关:01-equals与hashCode 4. **反射的应用场景** - Spring如何通过反射实现IoC? - 反射的性能问题如何优化? - 相关:01-反射机制 5. **泛型擦除机制** - 什么是类型擦除?为什么这样设计? - `List` 和 `List` 运行时是同一个类吗? - 相关:02-泛型详解 6. **抽象类 vs 接口** - 设计思想有何不同?何时选择哪个? - JDK8后接口有哪些增强? - 相关:02-抽象类与接口 7. **final关键字** - 修饰变量/方法/类各有什么作用? - final如何保证线程安全? - 相关:01-final关键字 8. **static关键字** - 静态块、静态变量的初始化顺序? - 静态变量有内存泄漏风险吗? - 相关:02-static关键字 9. **重写 vs 重载** - 重写有什么限制条件?为什么? - 重载能靠返回值区分吗? - 相关:04-重写与重载 10. **异常体系** - Checked vs Unchecked的设计意图? - 异常处理的最佳实践? - 相关:04-异常体系 --- ## 📊 知识图谱(关联关系) ```mermaid graph TD A[Java基础] --> B[数据类型] A --> C[核心类] A --> D[面向对象] A --> E[核心机制] B --> B1[基本类型] B --> B2[包装类] B2 --> B3[自动装拆箱] B3 --> B4[缓存池] C --> C1[String] C1 --> C2[不可变性] C2 --> C3[常量池] C --> C4[BigDecimal] D --> D1[继承] D --> D2[多态] D --> D3[封装] D1 --> D4[抽象类] D1 --> D5[接口] E --> E1[反射] E --> E2[泛型] E --> E3[注解] E1 --> E4[Spring IoC] E2 --> E5[集合框架] E3 --> E6[框架开发] style B fill:#e1f5ff style C fill:#fff4e1 style D fill:#ffe1f5 style E fill:#f5e1ff ``` --- --- ⬅️ [[00-Java|00-Java]] 🏠 [[00-Java|00-Java]] ➡️ [[01-基本类型与包装类|基本类型与包装类]]