Java 基础知识总结(超详细版,2026年视角,基于 JDK 21 LTS + 主流企业实际使用情况整理)
这份总结适合:
- 零基础/初学者系统入门
- 准备校招/社招/面试(覆盖95%+ Java基础岗考点)
- 已有经验但知识碎片化,想系统复习的人
内容按学习/面试推荐顺序组织,加粗的是高频面试点,⭐表示当前(2026年)企业最常使用的写法/特性。
1. Java 语言概述与环境(先搞懂这层)
| 概念 | 解释(2026视角) | 关键点 / 面试常问 |
|---|---|---|
| JDK | 开发工具包(javac、javadoc、jar、jlink 等) | 包含 JRE + 开发工具 |
| JRE | 运行环境(JVM + 核心类库 rt.jar / modules) | 只跑程序,不开发 |
| JVM | 虚拟机(HotSpot 是主流实现) | 跨平台核心:一次编写,到处运行 |
| 字节码 | .class 文件,平台无关 | javap -v 查看字节码指令 |
| 主流版本 | 企业主流:JDK 8 / 11 / 17 / 21(LTS) | 2026年新项目首选 JDK 21 或 JDK 17 |
JDK 21 LTS 为什么现在最推荐?
虚拟线程(Project Loom 正式版)、记录类、密封类、模式匹配 for switch、字符串模板(预览)等大幅提升开发效率。
2. 基本语法(最基础但最容易丢分)
- 标识符:字母、下划线、$ 开头,后面可数字
- 关键字:53个(goto、const 是保留字但不用)
- 数据类型(8种基本 + 引用) 类型 字节 默认值 包装类 常考点 byte 1 0 Byte -128 ~ 127 short 2 0 Short int 4 0 Integer 面试最爱:缓存 -128~127 long 8 0L Long 后缀 L/l float 4 0.0f Float 后缀 F/f,精度问题 double 8 0.0 Double 默认小数类型 char 2 Character Unicode,’中’ 合法 boolean ~ false Boolean 不能转int(不像C++)
- 自动装箱/拆箱(面试必考)
Integer i = 100; // 自动装箱
int j = i; // 自动拆箱
Integer a = 100, b = 100; // true(IntegerCache -128~127)
Integer c = 200, d = 200; // false(new Integer)
- 运算符优先级:
()>++ -- !>* / %>+ -><< >>>&>^>|>&&>||>?:>= - switch 表达式(JDK 14+,JDK 21 完善,强烈推荐)
String result = switch (day) {
case "Mon", "Tue", "Wed", "Thu", "Fri" -> "工作日";
case "Sat", "Sun" -> "周末";
default -> throw new IllegalStateException();
};
3. 面向对象核心(OOP)—— Java 的灵魂
三大特性 + 两大原则
| 特性 | 核心思想 | 代码体现 | 面试话术 / 常考扩展 |
|---|---|---|---|
| 封装 | 隐藏实现,暴露接口 | private + public get/set | 为什么用 getter/setter?数据校验、控制访问 |
| 继承 | 代码复用,is-a 关系 | extends(单继承) | 多实现接口,慎用继承(组合优于继承) |
| 多态 | 同一接口,不同实现 | 父类引用 → 子类对象 | 向上/向下转型、动态绑定、方法重写 vs 重载 |
其他高频OOP概念
- 抽象类 vs 接口(2026年最常问区别) 维度 抽象类 (abstract class) 接口 (interface) 2026主流用法 成员 可以有构造、普通方法、抽象方法、字段 默认方法、静态方法、私有方法(JDK9+) — 继承 单继承 多实现 优先接口 字段 可以非 public static final 只能 public static final(常量) — 适用场景 有部分实现,想强制子类实现某些行为 纯行为契约,多实现 模板方法用抽象类,策略用接口
- final 关键字三处用法(必背)
- 修饰类:不能被继承(String、LocalDateTime 等)
- 修饰方法:不能被重写
- 修饰变量:基本类型值不可变,引用类型地址不可变(内容可变)
- this / super(this() 调用本类构造,super() 调用父类构造,必须第一行)
4. 常用类(String / 包装类 / Math / Date 时间)
- String(不可变,线程安全,常考)
- 字符串常量池(JDK7+ 在堆中)
- intern() 方法
- String、StringBuilder、StringBuffer 对比(线程安全、性能)
- 包装类:Integer.valueOf() 有缓存,new Integer() 没有
- 时间(JDK8+ 强烈推荐新 API)
LocalDate.now();
LocalDateTime.now();
Instant.now(); // UTC 时间戳
ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
5. 集合框架(Collection & Map)—— 面试重灾区
Collection(单值)
- List:ArrayList(最常用,默认扩容1.5倍)、LinkedList(双向链表,队列/栈)
- Set:HashSet(无序)、LinkedHashSet(插入顺序)、TreeSet(红黑树,自然/自定义排序)
- Queue:PriorityQueue(小顶堆)、ArrayDeque(双端队列,推荐替代 Stack)
Map(键值对)
- HashMap(JDK8+ 红黑树+链表,1.7前只有链表)
- LinkedHashMap(访问/插入顺序)
- TreeMap(红黑树,key 排序)
- ConcurrentHashMap(高并发首选,JDK8+ CAS + synchronized)
2026年最常用写法(推荐)
var list = new ArrayList<String>(); // 局部变量类型推断
List<String> immutable = List.of("a", "b"); // 不可变集合(推荐)
Map<String, Integer> map = Map.ofEntries(
Map.entry("k1", 1),
Map.entry("k2", 2)
);
6. 异常处理(try-with-resources 必会)
try (FileInputStream fis = new FileInputStream("a.txt");
BufferedInputStream bis = new BufferedInputStream(fis)) {
// 自动关闭
} catch (IOException e) {
// 处理
}
异常分类(Throwable)
- Error(严重错误)
- Exception
- RuntimeException(非检查)
- 其他(检查异常,必须处理)
7. 泛型(2026年新项目几乎100%使用)
- 泛型擦除(运行时 List 和 List 是同一个类)
- 通配符
? extends T(上限,Producer)、? super T(下限,Consumer)—— PECS 原则
8. 反射 & 注解(框架底层基础)
- Class.forName()、getDeclaredField()、setAccessible(true)
- 常用注解:@Override、@Deprecated、@FunctionalInterface、@SuppressWarnings
9. 枚举 & 记录类(JDK14+ 记录类,强烈推荐)
public enum Week {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
public record Point(int x, int y) { } // 不可变、自动 toString/equals/hashCode
10. 快速对照表(背诵用)
| 场景 | 推荐写法(2026主流) | 替代旧写法 |
|---|---|---|
| 字符串拼接大量 | StringBuilder / String.format / 文本块 | + |
| 创建不可变集合 | List.of() / Set.of() / Map.of() | Collections.unmodifiableList() |
| main 方法简化 | 隐式声明的类 + instance main(JDK23预览) | public static void main |
| switch 复杂判断 | switch 表达式 + 模式匹配 | if-else |
| DTO/VO 简单数据类 | record | 传统 POJO |
这份总结已经覆盖了 Java 基础岗 90%+ 的知识点和面试考点。
你现在最缺哪一块?
- 想重点刷集合/Map 底层?
- 想看 JDK21+ 新特性实战代码?
- 还是想直接来 50 道 Java 基础高频面试题?
告诉我,我可以继续展开更细的模块~