{"name":"语言基础","id":"编程语言-JAVA-语言基础","content":"# Java 语言基础\n\n## 一、Java 语言的第一性原理\n\n### 1. Java 想解决的核心问题\n\nJava 诞生的背景不是“写得更快”，而是：\n\n* **跨平台一致性**（Write Once, Run Anywhere）\n* **大型系统的长期可维护性**\n* **多人协作下的工程稳定性**\n\n因此，Java 的本质目标可以抽象为：\n\n> **通过语言层面的约束，换取系统层面的稳定性**\n\n---\n\n### 2. Java 的三大设计哲学（贯穿全文）\n\n#### 哲学一：约束优先于自由\n\n* 强类型系统\n* 显式类型转换\n* 严格的访问控制\n\n👉 牺牲灵活性，换取可读性与可维护性\n\n#### 哲学二：编译期多做事，运行期少出错\n\n* 方法重载在编译期确定\n* 类型检查前置\n* 早失败（Fail Fast）\n\n👉 把问题尽量暴露在开发阶段\n\n#### 哲学三：工程协作优先于极致性能\n\n* 冗长但明确的语法\n* 明确的对象模型\n* 防御式编程文化\n\n👉 Java 首先服务“团队”，其次才是“机器”\n\n---\n\n## 二、Java 运行模型：从源代码到执行\n\n### 1. Java 运行时的三层抽象\n\n```\n源代码 (.java)\n   ↓ 编译\n字节码 (.class)\n   ↓ JVM 执行\n机器指令\n```\n\nJava 通过 **JVM** 将“语言语义”与“硬件平台”解耦。\n\n---\n\n### 2. JVM / JDK / JRE 的本质区别\n\n| 组件  | 本质角色                    |\n| --- | ----------------------- |\n| JVM | **执行引擎**：定义字节码如何运行      |\n| JRE | **运行时集合**：JVM + 核心类库    |\n| JDK | **开发工具链**：JRE + 编译/诊断工具 |\n\n👉 这是 **开发期能力** 与 **运行期能力** 的分离设计。\n\n---\n\n### 3. OpenJDK vs Oracle JDK（原则视角）\n\n* OpenJDK：语言规范的**参考实现**\n* Oracle JDK：商业支持与扩展\n\n👉 Java 生态的稳定性来自：**规范 > 实现**\n\n---\n\n## 三、类型系统：Java 如何理解“数据”\n\n### 1. 类型系统的核心目的\n\n> 类型不是为了限制你，而是为了：\n>\n> * 提供边界\n> * 让错误尽早暴露\n> * 成为协作的“契约”\n\n---\n\n### 2. 基本类型 vs 引用类型（本质差异）\n\n| 维度   | 基本类型   | 引用类型  |\n| ---- | ------ | ----- |\n| 存储语义 | 值      | 对象引用  |\n| 设计目的 | 性能与确定性 | 抽象与建模 |\n\n👉 这是 **效率模型** 与 **抽象模型** 的分工。\n\n---\n\n### 3. 包装类型与缓存机制（设计取舍）\n\n* 包装类型存在的原因：\n\n  * 泛型\n  * 面向对象统一建模\n\n* 缓存机制的本质：\n\n  * 小整数是高频值\n  * 用空间换性能\n\n👉 这是 JVM 层面的 **对象复用优化**，而非语法特性。\n\n---\n\n### 4. 浮点数误差的本质\n\n* Java 遵循 IEEE 754\n* 二进制无法精确表示部分十进制小数\n\n👉 这是**数学与表示系统的冲突**，不是 Java 的问题。\n\n---\n\n## 四、变量、常量与内存模型\n\n### 1. 变量 vs 常量（语义区别）\n\n* 变量：**状态可变**\n* 常量：**状态收敛**\n\nfinal 的本质是：\n\n> **缩小状态空间，降低系统复杂度**\n\n---\n\n### 2. static 的真正含义\n\n> static 成员绑定在 **Class 对象** 上，而非实例\n\n因此：\n\n* 不依赖对象生命周期\n* 与实例数量无关\n\n👉 static 是一种 **“类级别状态”** 的建模方式。\n\n---\n\n## 五、方法模型：Java 如何组织行为\n\n### 1. 方法签名与唯一性\n\n> 方法签名 = 方法名 + 参数列表\n\n这是编译期行为绑定的基础。\n\n---\n\n### 2. 参数传递的第一性原理\n\n> Java **永远是值传递**\n\n* 传对象 ≠ 传对象本身\n* 传的是“引用的副本”\n\n👉 这是避免隐式共享状态的设计选择。\n\n---\n\n### 3. 方法重载 vs 方法重写（两个世界）\n\n| 维度   | 重载   | 重写   |\n| ---- | ---- | ---- |\n| 发生时机 | 编译期  | 运行期  |\n| 绑定方式 | 静态绑定 | 动态分派 |\n| 设计目标 | 易用性  | 多态性  |\n\n---\n\n### 4. 构造方法的设计边界\n\n* 不可继承\n* 不可重写\n\n👉 构造器是 **对象状态建立的唯一入口**\n\n---\n\n## 六、面向对象的约束机制\n\n### 1. 访问控制的本质\n\n> 访问修饰符不是权限工具，而是**边界声明**\n\n* private：类内一致性\n* protected：继承扩展点\n* public：稳定契约\n\n---\n\n### 2. equals / hashCode 的对象身份模型\n\n* equals：语义相等\n* hashCode：分桶定位\n\n👉 这是 **对象逻辑身份** 与 **数据结构性能** 的协作协议。\n\n---\n\n## 七、流程控制：确定性执行模型\n\n### 1. 顺序 / 分支 / 循环的统一抽象\n\n> 所有流程控制，本质都是：\n> **对执行路径的约束**\n\n---\n\n### 2. for vs while 的原则选择\n\n* for：作用域最小化\n* while：状态外显\n\n👉 这是 **可读性与生命周期控制** 的选择。\n\n---\n\n## 八、资源管理与语言演进\n\n### 1. finalize 被弃用的根本原因\n\n* 不可预测\n* 干扰 GC\n\n👉 Java 不再相信“隐式生命周期管理”。\n\n---\n\n### 2. Cleaner / try-with-resources 的设计方向\n\n> **资源必须显式释放**\n\n这是 Java 向工程确定性妥协的结果。\n\n---\n\n## 九、稳定知识与不稳定知识边界\n\n### 稳定（值得长期记忆）\n\n* 类型系统\n* 对象模型\n* static / final 语义\n* equals / hashCode 协议\n\n### 不稳定（随版本演进）\n\n* 具体 API\n* 语法糖\n* 工具链细节\n\n## 关联内容（自动生成）\n\n- [/编程语言/JAVA/JVM/JVM.md](/编程语言/JAVA/JVM/JVM.md) Java语言基础与JVM运行时系统密切相关，JVM是Java实现跨平台特性的核心技术\n- [/编程语言/JAVA/JVM/字节码.md](/编程语言/JAVA/JVM/字节码.md) Java源代码编译为字节码是Java运行模型的关键环节，字节码是JVM执行的基础\n- [/编程语言/JAVA/JVM/字节码执行引擎.md](/编程语言/JAVA/JVM/字节码执行引擎.md) 字节码执行引擎是JVM的核心组件，与Java运行模型和执行机制密切相关\n- [/编程语言/JAVA/JVM/JAVA内存模型.md](/编程语言/JAVA/JVM/JAVA内存模型.md) Java内存模型定义了Java程序中各种变量(线程共享变量)的访问规则，与Java的并发和内存管理相关\n- [/编程语言/JAVA/高级/NIO.md](/编程语言/JAVA/高级/NIO.md) NIO是Java提供的非阻塞IO操作方式，是Java语言在IO处理方面的重要扩展\n- [/编程语言/JAVA/JAVA并发编程/基础概念.md](/编程语言/JAVA/JAVA并发编程/基础概念.md) Java语言基础中的对象模型和内存管理与并发编程中的线程安全、同步机制密切相关\n- [/编程语言/JAVA/JAVA并发编程/线程.md](/编程语言/JAVA/JAVA并发编程/线程.md) Java线程模型是Java语言实现并发的基础，与Java的对象模型和内存管理相关\n- [/编译原理/编译原理.md](/编译原理/编译原理.md) Java编译为字节码的过程体现了编译原理中的词法分析、语法分析、中间代码生成等阶段\n- [/中间件/浏览器/V8.md](/中间件/浏览器/V8.md) V8引擎和JVM都是语言运行时系统，都采用了JIT编译、垃圾回收等关键技术，可对比理解运行时系统的设计原理\n- [/编程语言/编程语言.md](/编程语言/编程语言.md) Java作为编程语言的一种，其设计体现了编程语言的通用原理，如类型系统、执行模型等\n- [/计算机网络/网络编程.md](/计算机网络/网络编程.md) Java网络编程体现了Java语言在实现网络通信方面的特性和机制\n- [/数据技术/Hadoop.md](/数据技术/Hadoop.md) Hadoop是基于Java实现的大数据处理框架，体现了Java在大型分布式系统中的应用\n- [/软件工程/架构/架构.md](/软件工程/架构/架构.md) Java语言的设计哲学与软件架构原则密切相关，如约束与自由的平衡、可维护性等\n- [/编程语言/JavaScript/JavaScript.md](/编程语言/JavaScript/JavaScript.md) JavaScript与Java在类型系统、执行模型等方面形成对比，有助于理解不同语言设计选择的权衡\n","metadata":"tags: ['编程语言']","hasMoreCommit":true,"totalCommits":15,"commitList":[{"date":"2026-02-28T15:03:54+08:00","author":"MY","message":"docs(java): 移除JDBC相关文档链接并优化ORM章节结构","hash":"ec18590f8db79888521ec0118110d5a50e935b87"},{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2025-12-31T14:50:41+08:00","author":"MY","message":"docs(JAVA): 重构Java语言基础文档内容","hash":"b12603b08688b300daada671f9149b31d16dda92"},{"date":"2024-10-24T14:25:32+08:00","author":"MY","message":"📦更新基本数据类型和浮点数表示的图片","hash":"cbb8551f65cb9094f3ddda94b6e2094ab7b028b8"},{"date":"2023-03-09T09:41:00+00:00","author":"My","message":"🛠替换在线图片","hash":"0c8b08bc22fbe482ba02da2f1fcad211441d3c23"},{"date":"2022-10-12T21:49:08+08:00","author":"MY","message":"✏️Java","hash":"0dc1fa35b269f76ec4eb6430d20f667ca134b0ed"},{"date":"2022-06-22T16:40:38+08:00","author":"cjiping","message":"📦整理 Java","hash":"dd8a407d9e17e954526376861d539512ad700daa"},{"date":"2022-06-09T21:51:44+08:00","author":"MY","message":"📦整理 Java","hash":"34c01b44e7566fa54773149765e3dd8420235279"},{"date":"2020-09-16T15:24:42+08:00","author":"MY","message":"✏更新 Java 数据类型","hash":"3a91e9187e36b5aac4fefd459fe56a72ed7a6329"},{"date":"2020-09-16T15:12:27+08:00","author":"MY","message":"✏更新 Java 重载","hash":"9e2b38b462c5081acfeb7901493fd372e4ce1b6a"}],"createTime":"2020-02-28T16:57:06+08:00"}