Java基础
Java SE 是 Java 后端开发的根基。Spring、MyBatis、Spring Boot、JVM、多线程、Netty、消息队列客户端、数据库驱动这些内容,都建立在 Java 语言基础、对象模型、集合、异常、IO、反射、注解、泛型、并发和网络编程之上。
学习 JavaSE 不能只基于最新 JDK。企业项目和面试里 JDK 7、JDK 8 仍然非常重要:JDK 7 代表传统 Java 写法的成熟期,JDK 8 是 Lambda、Stream、Optional、java.time、CompletableFuture 和现代集合并发实现的分水岭。后续 JDK 11、17、21、25 要作为版本演进继续学习,重点理解“旧版本怎么写、新版本为什么改、项目里怎么兼容”。
零基础学习 Java SE 不能只背语法,而要知道:
- Java 代码如何被编译、加载和执行。
- 数据在基本类型、引用类型、对象、数组、集合之间如何表达。
- 代码为什么需要封装、继承、多态、泛型和异常。
- String、集合、IO、反射、注解这些常用能力底层为什么这样设计。
- 并发、JVM、网络、序列化这些能力如何支撑真实后端系统。
为什么 Java 基础不能跳过
很多后端问题表面发生在 Spring、MyBatis、Redis、MQ 或 JVM,根因却是 Java SE 没理解清楚:
| 表面问题 | Java SE 根因 |
|---|---|
| Spring 注入失败 | 反射、注解、构造方法、访问控制没理解 |
| HashMap 查不到数据 | equals、hashCode、可变 key 没理解 |
| 金额计算不准 | double 浮点精度问题没理解 |
| 线上空指针 | 引用类型、包装类型、异常处理没理解 |
| 线程池把服务打挂 | 并发、队列、拒绝策略没理解 |
| 日期展示错乱 | 时区、本地时间、时间戳没理解 |
| 接口调用拖死系统 | 网络超时、线程阻塞没理解 |
Java SE 要解决的是五件事:
- 代码如何被编译和运行。
- 数据如何用类型、对象和集合表达。
- 业务规则如何用面向对象、枚举、泛型和异常组织。
- 程序如何通过 IO、网络、序列化和反射连接外部世界。
- 多线程和 JVM 如何影响性能、稳定性和排查能力。
学习路线
flowchart TD
A["基础语法和程序结构"] --> B["数据类型与运算"]
B --> C["面向对象"]
C --> D["String、数组、集合"]
D --> E["异常、泛型、枚举、注解"]
E --> F["反射"]
F --> G["IO、序列化、网络"]
G --> H["JDK7/8版本差异"]
H --> I["JDK 8/11/17/21 LTS演进"]
I --> J["Lambda、Stream、日期时间"]
J --> K["多线程、线程池、锁、JVM"]目录
- JavaSE 商业场景训练营
- 基础语法与程序结构
- 数据类型与运算
- 面向对象
- 包、访问控制与常用修饰符
- String详解
- 数组
- 集合框架
- 异常处理
- 泛型
- 枚举与注解
- JDK版本差异
- JDK 8、11、17、21 LTS版本演进
- JDK 8新增特性
- JDK 11新增特性
- JDK 17新增特性
- JDK 21新增特性
- 反射
- IO与NIO
- 序列化
- 日期时间API
- Lambda、Optional与Stream
- 网络编程
Java SE 知识地图
| 模块 | 必须掌握的问题 | 学不会的后果 |
|---|---|---|
| 基础语法 | 程序结构、变量、方法、流程控制 | 只能照抄代码,不能独立定位编译和运行问题 |
| 数据类型 | 基本类型、引用类型、包装类型、精度、溢出 | 金额错误、空指针、ID 溢出 |
| 面向对象 | 封装、继承、多态、接口、抽象类 | 代码职责混乱,扩展困难 |
| String | 不可变、常量池、编码、拼接 | 比较错误、乱码、性能差 |
| 数组和集合 | 下标、扩容、哈希、迭代器 | 数据丢失、查询异常、性能问题 |
| 异常 | 异常体系、处理边界、资源释放 | 线上问题无日志、事务状态错误 |
| 泛型 | 类型安全、通配符、类型擦除 | 强转异常、框架类型解析困难 |
| 枚举注解 | 状态建模、元信息、注解处理 | 魔法值泛滥,框架原理看不懂 |
| 反射 | Class、Field、Method、Constructor | Spring、MyBatis、JUnit 原理看不懂 |
| IO和网络 | 字节字符、缓冲、Socket、HTTP | 文件乱码、接口超时、线程阻塞 |
| 日期时间 | 时区、格式化、时间戳、时间差 | 订单过期和账单周期错误 |
| JDK版本 | 8/11/17/21新增能力、版本边界、编译运行与升级 | 误用API、版本不兼容、升级失败 |
| 并发 | 可见性、原子性、有序性、线程池 | 数据错乱、死锁、服务雪崩 |
Java程序执行流程
flowchart TD
A[".java 源文件"] --> B["javac 编译"]
B --> C[".class 字节码"]
C --> D["JVM 类加载"]
D --> E["解释执行或 JIT 编译"]
E --> F["运行结果"]基础语法重点
程序入口
普通 Java 程序从固定签名的 main 方法开始执行:
public static void main(String[] args)JVM 不需要先创建对象,就可以通过这个静态方法启动程序。
类型系统
Java 数据类型分为基本类型和引用类型。基本类型保存具体值,引用类型保存对象引用。
| 类型 | 说明 |
|---|---|
| 基本类型 | byte、short、int、long、float、double、char、boolean |
| 引用类型 | 类、接口、数组、枚举、注解等 |
对象模型
对象通常创建在堆里,局部变量和方法调用信息在线程栈里。理解这一点后,才能继续理解值传递、引用、GC 和线程安全。
flowchart TD
A["main 方法栈帧"] --> B["User user 引用"]
B --> C["堆中的 User 对象"]
C --> D["字段 name"]
C --> E["字段 age"]业务建模
真实开发不是写零散语句,而是用类、方法、枚举、集合和异常表达业务规则。例如订单系统至少会涉及订单对象、订单状态枚举、金额计算、状态流转校验、异常提示、持久化和接口返回。
代码 Demo:第一个 Java 程序
新建 Hello.java:
public class Hello {
public static void main(String[] args) {
String name = "Java";
int count = 3;
for (int i = 1; i <= count; i++) {
System.out.println("Hello " + name + " 第 " + i + " 次");
}
}
}编译和运行:
javac Hello.java
java Hello这个最小程序包含类、main 方法、变量、循环和输出,是继续学习面向对象、集合和异常的起点。
开发建议
- 基础语法不只是会写,还要理解编译期、运行期、值传递、引用、作用域、重载等细节。
- 面向对象重点理解封装、继承、多态,而不是死记定义。
- 集合要结合数组、哈希、红黑树、扩容和业务场景学习。
- 异常要区分业务异常和系统异常。
- 反射、注解、泛型要结合 Spring、MyBatis 这类框架理解。
- IO、网络、序列化要结合接口调用、文件处理、缓存和 MQ 理解。
- 多线程和 JVM 不要脱离线上排查,必须知道为什么会慢、为什么会卡、为什么会 OOM。
本章小结
Java SE 不是“学完语法就结束”。它是一整套后端基础能力:语法让代码能运行,类型和对象让数据有结构,集合和异常让业务能组织,反射和注解让框架能自动化,IO 和网络让系统能连接外部世界,并发和 JVM 决定系统能不能稳定运行。
