☕ Java 学习路线
133 个互动教程
Java 入门 — 跨平台面向对象语言
Java:企业级标准,"Write Once, Run Anywhere"
Java 变量与数据类型
8 种基本类型、引用类型、类型转换
Java 条件与循环
if-else、switch、for、while、for-each
Java 方法
学习方法定义与调用
Java 数组
学习数组
Java 面向对象
学习Java中Java 面向对象 — Java教程的详细用法和最佳实践
Java 集合框架
学习Java中Java 集合框架 — Java教程的详细用法和最佳实践
Java 继承
学习Java中Java 继承 — Java教程的详细用法和最佳实践
Java Stream API
filter/map/sorted/collect
Java HashMap深入 — Java教程
学习Java中Java HashMap深入的用法和实践技巧
Java Lambda表达式 — Java教程
学习Java中Java Lambda表达式的用法和实践技巧
Java 文件IO
学习文件读写
Java 封装继承多态
private/protected/public、extends、@Override、super
Java 异常处理
try/catch/finally、throw/throws、自定义异常
Java 文件 IO
FileReader/FileWriter/BufferedReader/Files 工具类
Spring Boot 入门
Spring Boot 快速构建 Web 应用,依赖注入、自动配置
Java 多线程
Thread/Runnable/ExecutorService/Callable
CyclicBarrier 让多线程在屏障点同步等待
CyclicBarrier 允许一组线程相互等待,直到所有线程都到达一个公共屏障点,适合分阶段并行任务。
Java JDBC 数据库
DriverManager/PreparedStatement/连接池
Files.walk 优雅遍历文件目录树
Files.walk 返回以深度优先方式遍历文件树的 Stream,支持过滤、搜索等操作,是 Java NIO 的便捷工具。
Gradle task 定义与依赖配置
Gradle 构建脚本中通过 task 关键字定义任务,可配置 dependsOn、doLast 等控制执行顺序和行为。
Java 开发环境搭建 — JDK安装与第一个程序
从零搭建Java开发环境:JDK下载安装、环境变量配置、第一个Hello World程序、IDE选择(IntelliJ IDEA vs Eclipse)
Java 反射机制
Java反射:Class类获取、动态创建对象newInstance、获取/调用方法Method.invoke、访问私有字段setAccessible、注解信息获取、反射性能影响和替代方案
Java 函数式编程深入
Java函数式编程:Function<T,R>/Consumer<T>/Supplier<T>/Predicate<T>函数式接口、Optional避免空指针、Stream的collect(Collectors.groupingBy/partitioningBy)
Java CompletableFuture 异步编程
CompletableFuture:supplyAsync异步执行、thenApply/thenAccept/thenCompose链式调用、allOf/anyOf组合、异常处理exceptionally、超时控制completeOnTimeout
Java 模块系统 JPMS
Java 9+模块系统:module-info.java定义、requires导出、exports公开、opens反射开放、ServiceLoader服务加载、与Maven/Gradle集成
Java Sealed Classes 密封类
Java 17密封类:sealed关键字限制子类、permits声明允许的子类、non-sealed开放继承、与Pattern Matching模式匹配配合(switch穷尽性检查)
Java Stream teeing 收集器
Stream teeing:Collectors.teeing同时执行两个收集器再合并、统计平均值和总数一次遍历、与groupingBy/partitioningBy配合、复杂聚合场景
Java Foreign Function & Memory API
Java 19+外部函数与内存API:替代JNI、MemorySegment管理堆外内存、MemoryLayout描述内存布局、Linker调用C函数、与Panama项目
Java Lombok 代码简化
Lombok库:@Data/@Getter/@Setter/@Builder/@AllArgsConstructor、@Slf4j日志、@SneakyThrows异常处理、与IDE/编译器配合、争议与替代(Java Record)
Java MapStruct 对象映射
MapStruct:编译期生成映射代码(非反射)、@Mapping注解字段映射、嵌套对象映射、表达式expression、与BeanUtils.copyProperties性能对比
Java 基本数据类型与变量
Java八大基本数据类型详解:byte/short/int/long/float/double/char/boolean。类型转换(自动/强制)、变量命名规范、final常量
Spring JPA Auditing 审计
JPA审计:@CreatedDate/@LastModifiedDate/@CreatedBy/@LastModifiedBy自动填充、AuditorAware获取当前用户、@EntityListeners(AuditingEntityListener.class)、历史版本表
Hibernate 缓存策略
Hibernate缓存:一级缓存Session/二级缓存SessionFactory(EhCache/Hazelcast/Redis)、查询缓存Query Cache、@Cacheable/@Cache注解、缓存策略(READ_ONLY/NONSTRICT_READ_WRITE/READ_WRITE/TRANSACTIONAL)
Micronaut 微服务框架
Micronaut框架:编译时DI(无反射/启动快/内存低)、@Singleton/@Prototype、AOP编译时织入、GraalVM原生镜像native-image、与Spring Boot对比
Java JMH 基准测试
JMH微基准测试:@BenchmarkMode/@State/@Setup/@TearDown、Blackhole防止死代码消除、JVM预热Warmup、Fork分叉隔离JVM、常见的基准测试陷阱(JIT/DCE/Optimization)
Gradle 构建工具深入
Gradle深入:build.gradle.kts(Kotlin DSL)、Task定义(dependsOn/doLast/doFirst)、Plugin插件、多项目构建Multi-project、依赖管理(api vs implementation vs compileOnly)
Java 字符串处理性能
Java字符串性能:String不可变性/常量池、StringBuilder(非线程安全/更快)vs StringBuffer(线程安全)、StringJoiner/String.join()、Java 9+ Compact Strings压缩(Latin-1→byte[]/UTF-16→byte[])
Java 异常处理最佳实践
Java异常最佳实践:Checked vs Unchecked选型、try-with-resources自动关闭(AutoCloseable)、自定义异常类设计、异常链(initCause/getCause)、不要吞异常/不要用异常控制流
Java Switch 表达式新特性
Java 14+ Switch表达式:->箭头语法、yield返回值、多标签case、穷尽性检查(sealed class配合)、与旧switch语句对比、模式匹配switch(Java 17+)
Java 日志框架选型
Java日志体系:JUL(java.util.logging)→Log4j→SLF4J门面+Logback实现→Log4j2、MDC(Mapped Diagnostic Context)追踪请求ID、异步日志Async Logger、结构化日志JSON格式
Java Record 深入
Java 14+ Record深入:record自动生成构造器/accessor/equals/hashCode/toString、紧凑构造器Compact Constructor(参数验证/防御性拷贝)、Record也可实现接口/sealed、不能继承/不能扩展
反射与动态代理:运行时生成代理对象
Java 动态代理通过 InvocationHandler 接口和 Proxy 类,在运行时创建实现指定接口的代理实例,用于 AOP、日志等。
Java 运算符与表达式
Java运算符全解:算术、赋值、比较、逻辑、位、三元运算符。运算符优先级表、自增自减陷阱
Java Collectors 收集器深入
Stream Collectors深入:toMap键冲突解决(BinaryOperator参数)/groupingBy多级分组(groupingBy嵌套)/partitioningBy分区(分为true/false两组)/collectingAndThen后处理/mapping子映射/flatMapping展平
Java instanceof 模式匹配
Java 16+ instanceof模式匹配:if (obj instanceof String s)直接绑定变量(无需显式转换)、作用域(绑定变量在if的true分支可见)、与switch模式匹配对比
Java Foreign Memory API
Java 19+ Foreign Memory API(孵化为正式):MemorySegment(堆外内存/手动管理)MemoryLayout结构化布局、Arena作用域控制生命周期、与Unsafe类对比(安全/类型化/不易泄露)
Java Files 类现代文件操作
Java NIO.2 Files类:Files.readString/writeString(Java 11)/readAllLines/walk/walkFileTree、Files.copy/move/delete/createDirectory/createTempFile、FileAttribute文件属性(POSIX/DOS/ACL)
Java 序列化
Java序列化机制:ObjectOutputStream.writeObject/ObjectInputStream.readObject、Serializable接口(marker interface)、serialVersionUID版本控制、transient字段跳过序列化、Externalizable自定义序列化、安全警告(反序列化漏洞)
Java Path API 深入
Java Path深入:Path接口(不可变/层次化路径)、Paths.get创建、resolve解析相对路径、relativize计算相对路径、normalize规范化路径(消除.和..)、PathMatcher glob匹配文件
Java try-with-resources 深入
try-with-resources深入:AutoCloseable接口(比Closeable更广)、声明资源的顺序与关闭逆序、catch/finally与try-with-resources组合(可以有catch和finally)、Java 9+有效final变量优化
Java Vector API SIMD
Java 16+ Vector API孵育(SIMD单指令多数据并行计算/替代手写JNI C扩展):VectorSpecies/FloatVector/IntVector、向量化运算比标量循环快2-16倍、适用场景(矩阵运算/图像处理/ML推理)
Java ZGC 低延迟垃圾回收器
ZGC(Z Garbage Collector/Java 11实验/15生产可用/21分代ZGC):目标停顿<1ms、支持TB级堆、着色指针Colored Pointers/读屏障Load Barrier、对比G1GC/ParallelGC/Shenandoah、适用场景(低延迟交易/游戏服务器)
Java Panama 外部函数与内存
Project Panama外部函数与内存API:jextract工具从C头文件生成Java绑定、MemorySegment/MemoryLayout、Linker.downcallHandle调用C函数、彻底替代JNI(更安全/更简单/纯Java)
Java 控制流程 — if/else/switch/循环
Java流程控制:if/else if/else、switch/case(传统+箭头语法)、for/while/do-while循环、break/continue、标签
Java Security Manager 已弃用与替代
Java Security Manager在JDK 17标记弃用/JDK 18+动态移除:SecurityManager/Sandbox沙箱历史、弃用原因(复杂/性能/绕过/CVE漏洞频发)、替代方案(OS容器安全/AppArmor/SELinux/seccomp/最小权限Docker容器/K8s安全上下文)
Java 枚举进阶
Java枚举进阶:枚举构造器+字段+方法(不是简单的常量集合)、实现接口、枚举特定方法体(每个枚举常量覆盖方法/策略模式)、EnumSet/EnumMap比HashSet/HashMap更高效(位向量/数组索引)、枚举单例模式(Effective Java推荐的最安全单例实现)
Java FFM API 外部函数与内存
Java 22+ FFM API最终化(Foreign Function & Memory API替代JNI):Linker.nativeLinker()/downcallHandle调用C函数、Arena管理内存生命周期(confined/shared/ofAuto)、MemorySegment分配堆外内存零拷贝与C共享、FunctionDescriptor描述C函数签名、vs JNI对比(纯J
Java Scoped Values 作用域值
Java 20+ Scoped Values(替代ThreadLocal的不可变/轻量级/结构化并发友好/虚拟线程友好):ScopedValue.newInstance()创建/ScopedValue.where(key,value).run(()→{...})、继承性vs ThreadLocal InheritableThreadLocal、与Structured Concurrency结构化并
Java 18 Simple Web Server
Java 18+ jwebserver命令行简单Web服务器(类似Python http.server但内置JDK):jwebserver启动(-p 端口/-d目录)、SimpleFileServer.createFileServer编程API、用于快速原型/文件共享/测试/教育场景(非生产用)
Java var 局部变量类型推断
Java 10+ var局部变量类型推断:var list=new ArrayList<String>()(编译器从右侧推断类型/可读性提升/不可滥用在不明确的场合)、var在for循环/增强for循环/try-with-resources中的使用、var不能用于字段/方法参数/返回类型/无初始化/多变量声明
Java Record vs Lombok 对比
Java Record vs Lombok @Data全面对比:Record(POJ/不可变/语义清晰/自动equals/hashCode/toString/accessor/紧凑构造器/JDK内置)vs Lombok(可变/灵活/@Builder/@Slf4j/@AllArgsConstructor等丰富注解/需额外依赖和插件/编译期代码生成/社区争议)
Java Stream 并行流深入
并行流Parallel Stream深入:stream().parallel()/parallelStream()、ForkJoinPool.commonPool()公共线程池控制、并行流何时有效(CPU密集/大数据量>万/独立操作/ArrayList优于LinkedList可高效拆分)、并行流陷阱(阻塞/同步/stateful lambda/小数据)
Java Null 处理演进
Java Null处理从过去到现在:null地狱到@Nullable/@NonNull注解再到Optional(Java 8)再到Records再到Valhalla项目(将来值类型/不再可为null的Primitive Objects)
Java jpackage 打包工具
jpackage(Java 14+)创建原生安装包:jpackage --input --main-jar --main-class --name --type msi/deb/rpm/pkg/dmg/exe、生成.msi/.deb/.rpm/.dmg/.pkg原生格式(含Java运行时捆绑jlink --add-modules创建定制JRE)、与Launch4j/WinRun4J/izpack对
Java JFR JDK Flight Recorder
JDK Flight Recorder(JFR/低开销JVM性能剖析/生产环境可用):jcmd JFR.start/JFR.dump/JFR.stop、JFR Event事件各种类型、JDK Mission Control JMC可视化分析JFR文件
注解处理器 APT:编译时生成代码
APT(Annotation Processing Tool)在编译阶段扫描注解,自动生成 Java 源文件或辅助代码,如 Lombok、MapStruct 等框架的核心机制。
Java String 字符串操作
Java字符串不可变性、String池、常用方法(length/charAt/substring/indexOf/replace/split/trim)、StringBuilder/StringBuffer(可变字符串)
Java ArrayList 动态数组
ArrayList vs 数组对比、add/get/set/remove/size/contains/clear方法、遍历方式、排序(Collections.sort/Comparator)、泛型
Java HashMap 键值对集合
HashMap的put/get/remove/containsKey/keySet/values/entrySet方法、遍历Map的几种方式、HashMap工作原理简述、TreeMap/LinkedHashMap区别
Java Optional 类:优雅避免空指针
学习使用 Optional 容器对象安全地处理可能为 null 的值,告别繁琐的空检查。
Java 面向对象:类与对象
Java类的定义、对象创建(new)、构造方法(无参/有参/this()调用)、实例变量vs类变量(static)、this关键字、toString()重写
Java Stream 进阶:收集器与并行流
深入掌握 Stream API 的高级特性,包括自定义 Collector、分组、分区以及并行流性能调优。
Java Record 类:不可变数据载体
学习使用 record 关键字简洁地创建纯数据类,自动生成构造器、equals、hashCode 和 toString。
Java 抽象类与接口
abstract抽象类(不能实例化、抽象方法)、interface接口(implements实现、多接口、默认方法default、静态方法)、抽象类vs接口选择指南
Java Switch 表达式:模式匹配与箭头语法
掌握增强的 switch 表达式,支持箭头语法、多标签匹配和返回值,使条件分支更简洁安全。
Java 异常处理机制
try/catch/finally、受检异常(checked)vs非受检异常(unchecked)、throws声明、throw抛出、自定义异常、try-with-resources自动关闭资源
Java 文本块:多行字符串的优雅写法
学习使用文本块(Text Block)在代码中嵌入 HTML、JSON 或 SQL 等多行文本,摆脱转义困扰。
Java 文件IO操作
File类(创建/删除/判断)、FileReader/FileWriter字符流、FileInputStream/FileOutputStream字节流、BufferedReader/BufferedWriter缓冲流、try-with-resources
Java 密封类:受限的类层次结构
理解密封类如何精确控制哪些类或接口可以继承或实现它,增强领域建模的安全性。
Java Lambda 表达式与Stream API
Lambda语法(参数->表达式/代码块)、函数式接口(Predicate/Function/Consumer/Supplier)、Stream操作(filter/map/sorted/collect/reduce)、方法引用::
Java 模式匹配:类型检查与解构
学习 instanceof 和 switch 中的模式匹配,简化类型检查和对象解构,写出更安全的代码。
Java 虚拟线程:轻量级并发新纪元
探索 Project Loom 带来的虚拟线程,以极低开销创建成千上万个并发任务,简化高并发编程。
Java IO 流 — 字节流与字符流
Java IO流体系:InputStream/OutputStream字节流、Reader/Writer字符流、FileInputStream/FileOutputStream文件流、BufferedInputStream缓冲流、对象序列化ObjectOutputStream
Java HTTP Client:现代 API 调用
学习使用 java.net.http 包中的 HttpClient、HttpRequest 和 HttpResponse 发送同步/异步请求。
Java NIO — 非阻塞IO
Java NIO:Buffer/Channel/Selector三大核心、FileChannel文件通道、内存映射文件MappedByteBuffer、非阻塞网络通信、NIO vs IO选型
Java 模块系统:封装与依赖管理
了解 Java 9 引入的模块化系统(Project Jigsaw),如何定义模块、控制导出和依赖,构建更可靠的应用程序。
Java Record 类:简洁的数据载体
学习使用 Record 快速创建不可变数据类,减少样板代码。
Java Generics 泛型深入
Java泛型:类型擦除、泛型类/接口/方法、有界类型参数extends、通配符?/上界extends/下界super、PECS原则(Producer Extends Consumer Super)
Java 文本块
学习使用文本块优雅地处理多行字符串,告别繁琐的转义和拼接。
Java 虚拟线程:轻量级并发革命
探索 JDK 21 虚拟线程,编写高并发应用而无需担心线程开销。
Java 注解 Annotation
Java注解:内置注解(@Override/@Deprecated/@SuppressWarnings)、元注解(@Target/@Retention)、自定义注解、运行时注解处理(反射)、编译时注解处理(APT)
Java 密封类
理解密封类的概念,控制类的继承层次,提高代码安全性与可维护性。
Java Unsafe类:直接内存操作与底层指针
通过sun.misc.Unsafe类实现直接内存读写、对象字段偏移量计算和CAS操作,揭示JVM底层内存管理机制。
方法句柄与方法表:超越反射的动态调用
使用java.lang.invoke.MethodHandle实现比反射更快的方法调用,并探索invokedynamic指令在Lambda表达式中的应用。
Java外部内存访问:告别Unsafe的现代方案
利用Foreign Memory Access API (JEP 424) 安全地分配和操作堆外内存,支持结构体、指针运算和内存映射文件。
具体化泛型:在运行时保留类型信息的花式技巧
通过Super Type Token、TypeReference和自定义注解模拟泛型具体化,解决Java类型擦除导致的List<String>运行时丢失问题。
异步文件通道与CompletionHandler:非阻塞I/O深度实战
使用AsynchronousFileChannel实现高效文件读写,通过CompletionHandler回调处理完成事件,避免线程阻塞。
VarHandle:现代原子变量与内存排序控制
利用VarHandle替代AtomicInteger,实现灵活的原子更新、内存屏障和Opaque/Release/Acquire语义。
StackWalker:高效栈帧遍历与调用者检测
使用StackWalker API代替Throwable.getStackTrace(),以延迟加载和流式处理方式分析调用栈,并过滤特定类。
ScopedValue:超越ThreadLocal的新型上下文传递
利用ScopedValue(JEP 429)在线程范围内传递不可变上下文,支持结构化并发和自动清理。
编译器树API:动态解析与修改Java源码结构
利用com.sun.source.tree和javax.tools.JavaCompiler将源码解析为抽象语法树(AST),实现自定义校验和代码生成。
Vector API:利用SIMD指令实现数据并行计算
使用JDK 16孵化的Vector API编写平台无关的SIMD代码,自动编译为CPU向量指令(如AVX、NEON),加速数组运算。
JVM中的钉住对象与GC引用屏障
深入探讨JVM中通过玄学引用(PhantomReference)配合垃圾回收器实现的钉住对象机制,解决直接内存与堆内存互操作时的安全回收问题。
基于record的模式匹配与密封类型联合
利用Java 21的record模式与密封类,构建类型安全的代数数据类型(ADT),实现编译器级别的穷举检查。
虚拟线程钉死原理:避免synchronized陷阱
分析虚拟线程在synchronized块中被钉死到平台线程的机制,提供使用ReentrantLock或StructuredTaskScope的改造方案。
值类型初探:JEP 401的inline class与聚合优化
通过Project Valhalla的inline class,学习如何定义无标识的值类型,消除对象头开销,实现类似于C#的struct语义。
外部函数与内存API:安全调用C库
使用FFM API(JEP 454)替代JNI,在Java中直接调用C标准库函数并管理堆外内存,避免native方法复杂性。
结构化并发与作用域值:替代ThreadLocal
利用StructuredTaskScope和ScopedValue,实现任务生命周期内的上下文传递,避免内存泄漏与线程池污染。
向量API实战:手写SIMD加速数值计算
利用Vector API(JEP 460)进行Java层面的单指令多数据(SIMD)编程,实现自动向量化的矩阵乘法。
ClassFile API:字节码操纵的现代方式
使用Java 22的ClassFile API(JEP 466)替代ASM/Javassist,在编译时或运行时修改类定义,构建自定义AOP框架。
Gatling编译预览:提前编译与静态镜像
探索Project Gilead(JEP 467)的提前编译(AOT)能力,将Java应用编译为静态二进制文件,启动时间降至毫秒级。
Continuation泄漏检测:虚拟线程的资源管理
深入虚拟线程的Continuation机制,分析ThreadLocal泄漏与固定线程池导致的Continuation残留,使用JFR事件定位。
虚拟线程钉住现象与逃逸分析
深入剖析Java 21虚拟线程在synchronized块中的钉住(Pinning)机制,借助JFR和逃逸分析工具诊断并发性能瓶颈。
内联类型与值语义的内存模型
探索Project Valhalla引入的内联类型(值类)在JVM内存布局中的零开销扁平化存储,对比引用类型的内存对齐与缓存行污染。
外部函数与内存API:手动内存池与所有权转移
使用FFM API的Arena控制堆外内存的生命周期,实现类似C语言的手动内存管理,并安全地跨线程传递所有权。
Vector API与自动向量化降级策略
分析JVM自动向量化失败的原因,并利用Vector API手动编写SIMD代码,实现跨平台(x86/ARM)的高效数值计算。
定制C调用约定:结构体返回与寄存器优化
通过FFM Linker自定义函数描述符,处理C语言中复杂结构体返回(SRet)和寄存器传递规则,绕过默认的SystemV/Windows calling convention限制。
模式匹配穷尽性证明与密封类类型格
深入Java 21模式匹配的编译器穷尽性检查,利用密封类构建类型格(Type Lattice),并通过自定义switch表达式处理嵌套模式。
结构化并发与作用域值传递:超越ThreadLocal
利用结构化并发(JEP 428)和ScopedValue实现不可变上下文自动传递,避免ThreadLocal的内存泄漏和子线程污染。
编译器树API:在注解处理器中修改源代码
利用javac的Tree API和FileManager,在编译期对源代码进行结构化分析、生成、甚至原地修改,实现自定义代码检查器或代码增强器。
jlink自定义运行时镜像与模块层隔离
利用jlink创建最小化JRE,并通过ModuleLayer实现多版本模块隔离,在单个进程中加载冲突类库。
G1预防性GC与NUMA感知内存分配
分析G1垃圾回收器的预防性GC(Preventive GC)策略,并启用NUMA感知优化内存分配,提升多插槽服务器的吞吐量。
Java外部内存访问与Panama API实战
详解Project Panama的Foreign Memory API,绕过JNI直接操作堆外内存与C数据结构。
用Vector API实现SIMD向量化数学运算
使用JDK 16引入的Vector API,在纯Java中编写跨平台SIMD指令。
深度模式匹配:从记录模式到密封类推理
利用JDK 21的最终版模式匹配,实现代数数据类型与解构。
结构化并发:用StructuredTaskScope管理虚拟线程生命周期
基于JEP 428的结构化并发,在作用域内统一管理子任务失败与取消。
顺序集合接口:统一有序集合的增删改查
JDK 21新增SequencedCollection, SequencedSet, SequencedMap,解决倒序遍历与首尾操作缺失。
未命名模式与变量:用下划线优化代码可读性
JDK 21引入的_关键字,在模式匹配与lambda中忽略无关参数。
手写C库FFI桥接:用Linker API代替JNI
通过Panama Linker API直接从Java调用本地C函数,无需任何C代码。
作用域值:替代ThreadLocal的高效上下文传递
利用JEP 446的ScopedValue实现不可变、继承性上下文,零开销于虚拟线程。
运行时字节码生成:用ASM框架动态创建类与方法
不依赖javac,直接在内存中构造字节码并加载,实现AOP与代理。
G1GC调优黑盒:深入理解Region与停顿预测模型
超越-Xms,调整G1的Region大小、混合GC触发阈值与自适应IHOP。