LWLeon.
LEON / REFERENCE

Java 面向对象编程

集中回顾核心概念、公式和适用条件。

LEON / LEARNING MAP

先看学习路线

按箭头顺序学习。点击一个阶段进入第一节;完整知识框架列出了每一个主题。

  1. 01

    追踪程序执行

    先理解表达式、分支和引用,再设计较大的对象。

    5 个主题 ↗
  2. 02

    建立有契约的对象

    明确状态归谁所有,让每个操作遵守文档规定的契约。

    6 个主题 ↗
  3. 03

    安全组织数据

    选择能表达预期数据流的容器与类型关系。

    5 个主题 ↗
  4. 04

    处理变化与失败

    输入、操作或资源访问失败时,仍保留有效状态。

    4 个主题 ↗
  5. 05

    连接与检查应用

    把可复用行为组合成应用,再测试和解释其工作方式。

    3 个主题 ↗

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 / 设计与诊断

分离模型规则、事件输入和显示。复现缺陷,检查最早偏差,检验具体假设,并记录接受输入、效果、输出及失败行为。

Leon