Java
Java 是一门静态类型、面向对象、以 JVM 为中心的工业级语言;核心价值是可移植运行模型、强类型与成熟后端/企业生态,适合长期维护的服务与跨平台应用。
#type / resource
#status / growing
#tech / dev
#resource / java
[!info] 关联笔记
- 知识地图总入口:Java MOC
- 系统学习路线:Java 学习路线 MOC
- 设计与平台哲学:Java 的起源与平台哲学
- 环境配置:安装 JDK 并运行第一个程序 · 使用 Scoop 安装并配置 Java 环境
- 阶段地图:语言基础 · 类型与 OOP · 并发 · 工具链与构建 · 测试质量 · 标准库 · JVM 与运行时 · Web 后端 · 数据访问 · 服务工程
- 相邻主题:后端开发 MOC · Spring Boot · 开发环境 MOC · Go
Java
这个概念为什么出现
在选语言与开学习路径之前,需要先钉死对象边界:Java 解决什么工程问题、默认适合什么负载、何时不该硬上。没有这篇定位,后面的语法与框架笔记容易变成无目的的清单。
Java 是一门静态类型、以类与接口为中心的面向对象语言,程序通常编译为字节码,在 JVM(Java Virtual Machine) 上执行。语言规范(Java Language Specification)与 JVM 规范分层:学语言时要分清「规范保证什么」和「HotSpot 等实现当前怎么做」。
[!abstract] 对象定位 本篇只回答「Java 是什么、适合什么、选择边界在哪里」。
平台动机见 Java 的起源与平台哲学;从零到可交付服务的顺序、阶段目标与逐篇目录见 Java 学习路线 MOC。本篇不是语法教程。
这是什么
可先抓这些稳定特征:
- 静态类型,编译期发现大量类型错误
- 以 class / interface / 继承与多态 组织领域模型;接口也可承载契约与默认方法
- 引用类型可空(
null)是历史主模型;Optional是标准库层表达,不是语言级消灭 null - 异常是一等控制流机制:受检异常(checked)与非受检异常并存
- 内存由 GC 管理;并发主线是 Thread + JMM + java.util.concurrent,不是协程内置原语
- 工具链中心是 JDK(
javac/java/ 模块与类路径)+ 主流构建系统 Maven / Gradle - 生态重心:后端服务、Android(历史与仍存)、大数据与中间件、企业信息系统
核心词汇:class、interface、package、static、final、null、Object、equals/hashCode、泛型擦除、try-with-resources、synchronized、ExecutorService、classpath / module path。
导航:学习路线与阶段 MOC
系统学习请以路线图为准,不要只在本页零散跳转。
| 入口 | 作用 |
|---|---|
| Java 学习路线 MOC | 七阶段依赖、完成标准、逐篇目录 |
| Java MOC | 主题总导航与分栏索引 |
阶段与子 MOC
| 阶段 | 目标 | 子 MOC |
|---|---|---|
| 一 基本认知 | 平台边界、JDK、程序骨架、基本类型、控制流、方法 | 语言基础 · 工具链与构建 |
| 二 数据与类型 | 数组/字符串、类与对象、继承多态、接口、equals、泛型入门 | 类型系统与 OOP |
| 三 错误与资源 | 异常模型、try-with-resources、IO 抽象 | 标准库 · 路线阶段三 |
| 四 并发 | 线程、同步、JUC、线程池、CompletableFuture、JMM | 并发 |
| 五 工程化 | 类路径/模块、Maven/Gradle、JUnit、日志配置、分层 | 工具链 · 测试质量 · 服务工程 |
| 六 运行时与进阶 | 类加载与字节码、内存与 GC、反射、注解处理 | JVM 与运行时 |
| 七 真实项目 | CLI、HTTP、JSON、JDBC、可选 Spring | Web 后端 · 数据访问 · 服务工程 |
适合什么
- 需要长期维护的业务服务、企业信息系统、中台与内部平台
- 团队依赖成熟类型系统、重构工具与静态检查
- 需要跨操作系统部署,接受「一次编译、目标 JVM 运行」的交付模型
- 要接入 Java 生态中间件(消息、ORM、监控、应用服务器/嵌入式容器)
- 需要与既有 Java/Spring/Android/大数据栈协作
不适合什么 / 选择边界
- 极致启动延迟与极小静态二进制(对比部分 Go/Rust 场景)时,Java 默认不是第一选择
- 以脚本化交互、快速数值探索为主时,Python 等往往更合适
- 需要语言内置轻量协程作为主并发模型时,要认清 Java 主线长期是线程 + 异步库;虚拟线程(Project Loom)改变了成本曲线,但仍要按版本与语义学习
- 「只会 Spring 注解」不等于会 Java:框架不能替代类型、异常、并发与 JVM 心智
与相邻语言的粗边界
| 维度 | Java | Go(对照) |
|---|---|---|
| 抽象主线 | 类/接口/继承 + 组合 | struct + 隐式接口 + 组合 |
| 错误模型 | 异常(含 checked) | error 值 |
| 并发主线 | Thread / JUC /(较新)虚拟线程 | goroutine / channel / context |
| 空值 | 引用默认可 null | 多种 nil 形态 + 零值 |
| 交付物 | 字节码 + JVM/原生镜像可选 | 常为单二进制 |
| 构建 | Maven/Gradle 为中心 | 统一 go 工具链 |
更细对比应在后续 synthesis 笔记展开,不要在本页写成语言战争。
版本与资料基线
- 学习默认以 当前 LTS 语义 为主(撰写时常见 LTS:11 / 17 / 21;具体发行版以本机
java -version为准) - 规范入口:Java SE Documentation · Java Language Specification
- 实现与发行:OpenJDK / Eclipse Temurin 等;发行版 ≠ 语言规范
本节总结
- Java = 语言规范 + 标准库 + JVM 执行模型 + 成熟工程生态
- 先建立「类型、对象、异常、并发、工具链」主线,再进入 Web 框架
- 系统路径以 学习路线 为准;本页只做对象定位
自测题
- 为什么说「会 Spring」不等于「会 Java」?
- 学 Java 时为什么要区分 JLS 与 JVM 实现?
- 若目标是极小静态二进制 CLI,Java 默认是否最优?
参考答案
- Spring 解决的是应用装配与生态集成;语言层的类型、异常、集合、并发与 JVM 行为仍是排障与设计的基础。
- JLS 规定语言语义;GC 细节、JIT、部分性能行为属于实现,不能写成语言永久承诺。
- 通常不是;该场景常更倾向 Go/Rust 等,除非团队与生态绑定 Java。
延伸阅读与资料来源
| 资料 | 类型 | 支撑内容 |
|---|---|---|
| Java SE Documentation | 官方文档 | 平台与 API 总入口 |
| Java Language Specification | 规范 | 语言语义权威来源 |
| OpenJDK | 实现/社区 | 开放实现与项目入口 |
| JEP Index | 增强提案 | 版本特性演进 |