Skip to content

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 不能只背语法,而要知道:

  1. Java 代码如何被编译、加载和执行。
  2. 数据在基本类型、引用类型、对象、数组、集合之间如何表达。
  3. 代码为什么需要封装、继承、多态、泛型和异常。
  4. String、集合、IO、反射、注解这些常用能力底层为什么这样设计。
  5. 并发、JVM、网络、序列化这些能力如何支撑真实后端系统。

为什么 Java 基础不能跳过 ​

很多后端问题表面发生在 Spring、MyBatis、Redis、MQ 或 JVM,根因却是 Java SE 没理解清楚:

表面问题Java SE 根因
Spring 注入失败反射、注解、构造方法、访问控制没理解
HashMap 查不到数据equals、hashCode、可变 key 没理解
金额计算不准double 浮点精度问题没理解
线上空指针引用类型、包装类型、异常处理没理解
线程池把服务打挂并发、队列、拒绝策略没理解
日期展示错乱时区、本地时间、时间戳没理解
接口调用拖死系统网络超时、线程阻塞没理解

Java SE 要解决的是五件事:

  1. 代码如何被编译和运行。
  2. 数据如何用类型、对象和集合表达。
  3. 业务规则如何用面向对象、枚举、泛型和异常组织。
  4. 程序如何通过 IO、网络、序列化和反射连接外部世界。
  5. 多线程和 JVM 如何影响性能、稳定性和排查能力。

学习路线 ​

mermaid
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"]

目录 ​

Java SE 知识地图 ​

模块必须掌握的问题学不会的后果
基础语法程序结构、变量、方法、流程控制只能照抄代码,不能独立定位编译和运行问题
数据类型基本类型、引用类型、包装类型、精度、溢出金额错误、空指针、ID 溢出
面向对象封装、继承、多态、接口、抽象类代码职责混乱,扩展困难
String不可变、常量池、编码、拼接比较错误、乱码、性能差
数组和集合下标、扩容、哈希、迭代器数据丢失、查询异常、性能问题
异常异常体系、处理边界、资源释放线上问题无日志、事务状态错误
泛型类型安全、通配符、类型擦除强转异常、框架类型解析困难
枚举注解状态建模、元信息、注解处理魔法值泛滥,框架原理看不懂
反射Class、Field、Method、ConstructorSpring、MyBatis、JUnit 原理看不懂
IO和网络字节字符、缓冲、Socket、HTTP文件乱码、接口超时、线程阻塞
日期时间时区、格式化、时间戳、时间差订单过期和账单周期错误
JDK版本8/11/17/21新增能力、版本边界、编译运行与升级误用API、版本不兼容、升级失败
并发可见性、原子性、有序性、线程池数据错乱、死锁、服务雪崩

Java程序执行流程 ​

mermaid
flowchart TD
    A[".java 源文件"] --> B["javac 编译"]
    B --> C[".class 字节码"]
    C --> D["JVM 类加载"]
    D --> E["解释执行或 JIT 编译"]
    E --> F["运行结果"]

基础语法重点 ​

程序入口 ​

普通 Java 程序从固定签名的 main 方法开始执行:

java
public static void main(String[] args)

JVM 不需要先创建对象,就可以通过这个静态方法启动程序。

类型系统 ​

Java 数据类型分为基本类型和引用类型。基本类型保存具体值,引用类型保存对象引用。

类型说明
基本类型byte、short、int、long、float、double、char、boolean
引用类型类、接口、数组、枚举、注解等

对象模型 ​

对象通常创建在堆里,局部变量和方法调用信息在线程栈里。理解这一点后,才能继续理解值传递、引用、GC 和线程安全。

mermaid
flowchart TD
    A["main 方法栈帧"] --> B["User user 引用"]
    B --> C["堆中的 User 对象"]
    C --> D["字段 name"]
    C --> E["字段 age"]

业务建模 ​

真实开发不是写零散语句,而是用类、方法、枚举、集合和异常表达业务规则。例如订单系统至少会涉及订单对象、订单状态枚举、金额计算、状态流转校验、异常提示、持久化和接口返回。

代码 Demo:第一个 Java 程序 ​

新建 Hello.java:

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 + " 次");
        }
    }
}

编译和运行:

bash
javac Hello.java
java Hello

这个最小程序包含类、main 方法、变量、循环和输出,是继续学习面向对象、集合和异常的起点。

开发建议 ​

  1. 基础语法不只是会写,还要理解编译期、运行期、值传递、引用、作用域、重载等细节。
  2. 面向对象重点理解封装、继承、多态,而不是死记定义。
  3. 集合要结合数组、哈希、红黑树、扩容和业务场景学习。
  4. 异常要区分业务异常和系统异常。
  5. 反射、注解、泛型要结合 Spring、MyBatis 这类框架理解。
  6. IO、网络、序列化要结合接口调用、文件处理、缓存和 MQ 理解。
  7. 多线程和 JVM 不要脱离线上排查,必须知道为什么会慢、为什么会卡、为什么会 OOM。

本章小结 ​

Java SE 不是“学完语法就结束”。它是一整套后端基础能力:语法让代码能运行,类型和对象让数据有结构,集合和异常让业务能组织,反射和注解让框架能自动化,IO 和网络让系统能连接外部世界,并发和 JVM 决定系统能不能稳定运行。