Java 语言基础

一、Java 语言的第一性原理

1. Java 想解决的核心问题

Java 诞生的背景不是“写得更快”,而是:

因此,Java 的本质目标可以抽象为:

通过语言层面的约束,换取系统层面的稳定性


2. Java 的三大设计哲学(贯穿全文)

哲学一:约束优先于自由

👉 牺牲灵活性,换取可读性与可维护性

哲学二:编译期多做事,运行期少出错

👉 把问题尽量暴露在开发阶段

哲学三:工程协作优先于极致性能

👉 Java 首先服务“团队”,其次才是“机器”


二、Java 运行模型:从源代码到执行

1. Java 运行时的三层抽象

源代码 (.java)   ↓ 编译字节码 (.class)   ↓ JVM 执行机器指令

Java 通过 JVM 将“语言语义”与“硬件平台”解耦。


2. JVM / JDK / JRE 的本质区别

组件本质角色
JVM执行引擎:定义字节码如何运行
JRE运行时集合:JVM + 核心类库
JDK开发工具链:JRE + 编译/诊断工具

👉 这是 开发期能力运行期能力 的分离设计。


3. OpenJDK vs Oracle JDK(原则视角)

👉 Java 生态的稳定性来自:规范 > 实现


三、类型系统:Java 如何理解“数据”

1. 类型系统的核心目的

类型不是为了限制你,而是为了:


2. 基本类型 vs 引用类型(本质差异)

维度基本类型引用类型
存储语义对象引用
设计目的性能与确定性抽象与建模

👉 这是 效率模型抽象模型 的分工。


3. 包装类型与缓存机制(设计取舍)

👉 这是 JVM 层面的 对象复用优化,而非语法特性。


4. 浮点数误差的本质

👉 这是数学与表示系统的冲突,不是 Java 的问题。


四、变量、常量与内存模型

1. 变量 vs 常量(语义区别)

final 的本质是:

缩小状态空间,降低系统复杂度


2. static 的真正含义

static 成员绑定在 Class 对象 上,而非实例

因此:

👉 static 是一种 “类级别状态” 的建模方式。


五、方法模型:Java 如何组织行为

1. 方法签名与唯一性

方法签名 = 方法名 + 参数列表

这是编译期行为绑定的基础。


2. 参数传递的第一性原理

Java 永远是值传递

👉 这是避免隐式共享状态的设计选择。


3. 方法重载 vs 方法重写(两个世界)

维度重载重写
发生时机编译期运行期
绑定方式静态绑定动态分派
设计目标易用性多态性

4. 构造方法的设计边界

👉 构造器是 对象状态建立的唯一入口


六、面向对象的约束机制

1. 访问控制的本质

访问修饰符不是权限工具,而是边界声明


2. equals / hashCode 的对象身份模型

👉 这是 对象逻辑身份数据结构性能 的协作协议。


七、流程控制:确定性执行模型

1. 顺序 / 分支 / 循环的统一抽象

所有流程控制,本质都是:对执行路径的约束


2. for vs while 的原则选择

👉 这是 可读性与生命周期控制 的选择。


八、资源管理与语言演进

1. finalize 被弃用的根本原因

👉 Java 不再相信“隐式生命周期管理”。


2. Cleaner / try-with-resources 的设计方向

资源必须显式释放

这是 Java 向工程确定性妥协的结果。


九、稳定知识与不稳定知识边界

稳定(值得长期记忆)

不稳定(随版本演进)

关联内容(自动生成)