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 查不到数据equalshashCode、可变 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 决定系统能不能稳定运行。