LEON / REFERENCE
Java 面向对象编程
集中回顾核心概念、公式和适用条件。
LEON / LEARNING MAP
先看学习路线
按箭头顺序学习。点击一个阶段进入第一节;完整知识框架列出了每一个主题。
01 / 编译只是一层检查
编译期类型检查不能证明预期行为。追踪数值转换,处理运行失败并测试契约,尤其关注整数除法、溢出与空输入。
02 / Java 按值传递
方法接收实参值的副本。复制的引用可访问共享可变状态;形参重新赋值绝不会给调用者变量重新赋值。
03 / 数组边界
对非 null 数组,有效下标满足 0 ≤ i < length。多维数组可能有 null 行或不等长行;外层 clone 是浅复制。
04 / 身份与相等
引用身份与枚举常量使用 ==;类定义值相等时使用 equals。相等对象必须有相等哈希值,反向推论不成立。
05 / 维持不变式
构造有效对象,在无效状态暴露前检查操作。private 和 final 有帮助,但都不会自动让引用对象不可变。
06 / 方法选择分两步
编译期实参类型选择重载。运行时接收者选择被重写的实例实现。静态方法是隐藏,仅改变返回类型不构成重载。
07 / 按集合契约选择
List 保留顺序和重复项,Set 表示唯一性,Map 关联键和值。比较查找、插入和遍历成本,不要假设一种实现永远更快。
08 / 泛型数据流
泛型是不变的。来源使用 ? extends T,目的地使用 ? super T。这是类型保证,不是完整不可变保证。
09 / 失败与清理
受检查异常必须捕获或声明。在能有效恢复的地方捕获,保留原因,所拥有资源使用 try-with-resources。垃圾回收不能替代及时清理资源。
10 / 测试与递归
测试普通情况、边界和拒绝后的状态。递归还需要基本情况与递减问题规模。记忆化减少重复状态,却可能保留深调用栈。
11 / lambda 上下文
lambda 需要函数式接口目标,只捕获 final 或事实上的 final 局部变量。所指对象仍可变;lambda 的 this 表示外围实例。
12 / 设计与诊断
分离模型规则、事件输入和显示。复现缺陷,检查最早偏差,检验具体假设,并记录接受输入、效果、输出及失败行为。