- 博客(124)
- 收藏
- 关注
原创 【Java杂项】synchronized 锁的到底是谁?this、Class 和 lock 选择详解
本文围绕 Java `synchronized` 的核心问题展开:它到底锁的是方法、对象,还是类?文章从两个线程调用同一个同步方法却不一定互斥的现象切入,讲清普通同步方法锁 `this`、静态同步方法锁 `Class` 对象、同步代码块锁括号里的对象,并用一棵锁选择决策树总结实例锁、类锁和 `private final lock` 的工程用法,帮助你避开“不是同一把锁就保护不住共享数据”的并发坑。
2026-06-18 08:15:00
539
2
原创 【Java基础 | 20】多线程基础详解:线程创建、线程安全、synchronized 与线程池入门
本文面向已经掌握 Java 类、对象、集合和异常处理的读者,系统梳理 Java 多线程基础:进程与线程、并发与并行、线程创建方式、线程生命周期、共享数据带来的线程安全问题,以及 synchronized、Lock、BlockingQueue 和线程池的入门用法。通过卖票、死锁、生产者消费者等示例,帮助读者建立 Java 并发编程的第一层知识框架。
2026-06-18 08:00:00
203
1
原创 【Java杂项】volatile 为什么不能保证 count++ 原子性?可见性与读改写丢失详解
本文从一个 `volatile int count` 的多线程自增示例出发,解释为什么 `count++` 即使用 `volatile` 修饰也可能得到小于预期的结果。文章会拆开读旧值、加一、写回三个步骤,说明可见性和原子性的区别,并对比 `volatile`、`synchronized`、`Lock`、`AtomicInteger` 的适用场景,帮助你避开 Java 并发入门里最常见的线程安全误区。
2026-06-17 08:00:00
407
4
原创 【Java基础 | 19】 图结构入门:邻接矩阵、邻接表、DFS 与 BFS 一文讲清
本文面向已经掌握数组、集合、栈和队列的 Java 初学者,系统梳理图的基本概念、无向图/有向图/带权图区别、邻接矩阵与邻接表的存储取舍,并用 Java 示例讲清 DFS、BFS、visited、防环、无权图最少边数路径和连通分量统计,适合在学习常见数据结构与算法前打牢图遍历基础。
2026-06-17 08:00:00
433
6
原创 【Java杂项】Java 中的 null:空指针、自动拆箱与集合边界详解
本文围绕 Java 中的 `null` 展开,用最小代码解释自动拆箱为什么会触发 `NullPointerException`,并梳理 `Map.get()` 返回 `null` 的歧义、`HashMap`、`ArrayList`、`TreeMap`、`ConcurrentHashMap` 等集合对 `null` 的支持边界。文章最后给出入口校验、空集合返回、`Optional`、Stream 过滤和静态分析注解等工程防御建议。
2026-06-11 08:07:52
385
9
原创 【Java基础 | 18】并查集与堆详解:从路径压缩到 PriorityQueue 和 Top K
本文面向已经掌握数组、链表、栈、队列的 Java 学习者,系统讲解两个常用进阶数据结构:并查集和堆。文章从朋友圈问题引入并查集,拆解 Quick Find、Quick Union、按大小合并、按秩合并和路径压缩;再讲堆的完全二叉树性质、数组下标关系、上浮、下沉、PriorityQueue 默认小顶堆以及 Top K 应用,帮助读者建立“关系”和“优先级”两类问题的解题直觉。
2026-06-11 08:00:00
668
2
原创 【Java杂项】HashMap 为什么不能用可变对象当 key?从 get 返回 null 到集合污染
本文围绕 Java `HashMap` 中“可变对象能不能当 key”展开,用最小代码解释为什么修改 key 字段后 `get()` 可能返回 `null`。文章进一步分析桶定位、`hashCode()`、`equals()`、同引用比较、跨对象相等性污染、逻辑重复 key 和 `remove()` 失败等工程问题,并给出 `entrySet()` 遍历清理、重建 Map、`final class`、`record`、Lombok `@Value` 等防御性设计建议。
2026-06-10 08:00:00
527
6
原创 【Java基础 | 17】Stream 流入门:不可变集合、处理链与方法引用一次讲清
本文面向已经学完 List、Set、Map 的 Java 基础学习者,系统梳理不可变集合、Stream 流和方法引用的核心用法。文章从 List.of、Set.of、Map.of 讲到 Stream 的获取方式、中间操作、终结操作、collect 收集和方法引用选择,重点解释惰性求值、处理链模型、一条 Stream 只能终结一次等易错点,帮助读者把集合数据处理代码写得更清晰。
2026-06-10 00:03:29
418
2
原创 【Java杂项】Arrays.asList、List.of 和 new ArrayList:集合可变性避坑
本文围绕 Java 中 `Arrays.asList()`、`List.of()` 和 `new ArrayList<>(...)` 三种常见 List 创建方式展开,对比固定长度视图、不可修改集合和可变副本的区别。文章通过最小代码示例说明 `add`、`remove`、`set`、`null` 元素、数组联动和基本类型数组展开等常见坑,并补充 Java 9 之前 `Collections.unmodifiableList()` 的版本演进点,适合 Java 集合入门和面试复习。
2026-06-09 23:58:07
1041
2
原创 【Java基础 | 16】集合框架(下):Map、HashMap 与 TreeMap
本文面向已经掌握 Collection、List 和 Set 的 Java 初学者,系统整理 Map 的键值对模型、put 添加与覆盖、常用方法、三种遍历方式,以及 HashMap、LinkedHashMap、TreeMap 的选择场景。文章重点讲清 HashMap 如何依赖 hashCode 和 equals 判断 key 唯一,TreeMap 如何通过比较规则排序并判定 key 是否相同,同时补充 null、扩容、冲突树化和线程安全边界。
2026-06-07 21:48:52
357
14
原创 【Java基础 | 15】集合框架(中):Set、HashSet、TreeSet 与哈希表
本文面向已经学完 Collection 和 List 的 Java 初学者,系统整理 Set 集合的定位、去重特点、遍历方式,以及 HashSet、LinkedHashSet、TreeSet 的选择场景。文章重点讲清 HashSet 如何依赖 hashCode 和 equals 判断重复,TreeSet 如何通过比较规则排序并判定重复,同时梳理哈希冲突、红黑树、null 支持和线程安全等常见边界。
2026-06-07 21:42:27
405
6
原创 【Java杂项】classpath 到底是什么?找不到或无法加载主类一次讲清
本文围绕 Java 中的 `classpath` 展开,解释 JVM 如何根据“classpath 根目录 + package 路径 + 类名.class”定位主类,并用命令行、IDEA、JAR 启动等场景拆解“找不到或无法加载主类”的常见原因。文章重点区分 `ClassNotFoundException`、`NoClassDefFoundError`、`MANIFEST.MF`、`user.dir` 与 module path 的边界,适合 Java 初学者和排查启动问题的开发者快速建立定位思路。
2026-06-07 08:00:00
352
14
原创 【Java基础 | 14】集合框架(上):Collection、泛型与 List 入门
本文面向准备系统学习 Java 集合框架的初学者,围绕 `Collection`、集合泛型、遍历方式、`List`、`ArrayList` 和 `LinkedList` 展开。文章会说明集合相对于数组解决了什么问题,泛型为什么能提升类型安全,迭代器、增强 `for`、Lambda 遍历各自适合什么场景,以及 `List<Integer>` 删除元素、正向遍历删除、`ArrayList` 与 `LinkedList` 选择等常见易错点。
2026-06-07 07:45:00
367
6
原创 【Java基础 | 13】IO 流(下):缓冲流、转换流、序列化与综合案例
本文面向已经掌握 Java IO 基础的初学者,继续梳理缓冲流、转换流、序列化流、打印流、压缩流和综合案例。文章会说明缓冲流如何提高读写效率,`InputStreamReader` / `OutputStreamWriter` 如何指定 UTF-8、GBK 等编码,`ObjectOutputStream` / `ObjectInputStream` 如何保存和恢复对象,以及 zip 压缩流如何按 `ZipEntry` 处理压缩包条目。
2026-06-06 08:00:00
354
7
原创 相对路径到底相对谁?user.dir、IDE、命令行和 jar 一次讲清
本文围绕 Java 普通文件相对路径展开,讲清 `new File("a.txt")`、`Path.of("a.txt")` 默认到底相对谁。文章重点解释 `user.dir`、IDE Working directory、命令行启动目录、`java -jar` 运行时目录的关系,并补充 classpath 资源、jar 所在目录、`Path.of()`/`resolve()`、`toRealPath()` 与 `getCanonicalPath()` 等高频路径处理细节,适合排查“IDE 能跑,jar 后文
2026-06-06 08:00:00
738
6
原创 Java finally 中为什么不要 return?返回值覆盖、异常吞掉与 suppressed 机制
本文围绕 Java finally 中不建议写 return 的原因,拆解 try-catch-finally 的控制流规则、返回值覆盖、异常吞掉、局部变量与引用类型返回细节,并补充 try-with-resources 的 suppressed exception 机制以及 IntelliJ IDEA、Eclipse、SonarQube 等工具的风险提示。适合正在学习 Java 异常处理、准备面试或排查异常丢失问题的读者。
2026-06-05 08:00:00
539
2
原创 【Java基础 | 12】IO 流(上):File、字节流、字符流与文件复制入门
本文面向学完异常处理、准备进入 Java IO 的初学者,系统梳理 `File` 类、绝对路径和相对路径、字节流、字符流、文件复制以及资源关闭。文章会说明 `File` 和 IO 流的职责区别,如何使用 `FileInputStream` / `FileOutputStream` 复制文件,什么时候选择 `FileReader` / `FileWriter` 处理文本,并总结 `try-with-resources` 在 IO 资源关闭中的推荐写法。
2026-06-05 07:45:00
656
原创 【Java JVM】栈、堆、方法区、元空间到底是什么关系?一篇讲清运行时内存区域
本文围绕 Java JVM 运行时内存区域,系统梳理栈、堆、方法区、永久代、元空间之间的关系。文章从线程私有与线程共享、方法调用栈帧、new 对象在堆中的存放、类元数据在方法区/元空间中的管理入手,结合示例和图解讲清“引用变量不等于对象本身”“方法区不是方法执行区”“元空间不等于 Java 堆”等高频误区,适合 Java 初学者补齐 JVM 内存模型基础。
2026-06-04 08:00:00
1466
83
原创 【Java基础 | 11】异常处理进阶:throw、throws、自定义异常与异常链讲清楚
本文面向已经掌握 Java 异常基础的初学者,系统梳理 `throw`、`throws`、自定义异常、异常链和异常包装的使用方法。文章会说明什么时候应该主动抛出异常,方法声明上的 `throws` 有什么意义,自定义异常该继承 `Exception` 还是 `RuntimeException`,以及包装异常时为什么必须保留 `cause`,帮助你把异常处理从“会捕获”提升到“会设计”。
2026-06-04 07:45:00
421
6
原创 【Java基础 | 10】异常处理入门:Throwable、try-catch-finally 与异常调用栈一次讲清
本文面向已掌握方法调用、对象、继承和调用栈的 Java 初学者,系统梳理 Java 异常处理基础:Throwable 体系、Error 与 Exception 的区别、受检异常和非受检异常、try-catch-finally 执行规则、多个 catch 的匹配顺序、异常沿调用栈传播的过程,以及如何阅读异常类型、异常消息和第一处自己代码行号,帮助建立清晰的排错思路。
2026-06-03 13:11:34
425
8
原创 【Java杂项】equals 与 hashCode 为什么必须一起重写?从 HashMap 原理到可变 key 避坑
本文从 Java 对象相等契约出发,讲清 equals() 与 hashCode() 为什么必须一起重写:HashMap/HashSet 会先用 hashCode 定位桶,再用 equals 判断逻辑相等。文章结合 BadStudent、MutableStudent、String key、继承对称性和可变 key 等示例,梳理哈希冲突、逻辑内存泄漏和生产级 key 设计边界。
2026-05-30 08:00:00
1076
48
原创 【Java基础核心知识点全解·09】Java 内存布局与垃圾回收详解:栈、堆、栈帧、GC Roots 与对象回收
本文面向 Java 初学者,系统梳理 Java 内存布局与垃圾回收的核心概念,包括栈、堆、栈帧、方法区/元空间、引用变量、GC Roots、可达性分析、标记-清除、复制算法、分代回收和内存泄漏。通过代码示例解释局部变量、堆对象、方法调用和对象回收之间的关系,帮助读者建立 JVM 内存模型的基础直觉。
2026-05-30 07:30:00
388
6
原创 【Java杂项】final 关键字详解:变量、方法、类限制与引用可变性
本文系统梳理 Java 中 `final` 修饰变量、方法和类时的真实限制:变量不能重新赋值,方法不能被子类重写,类不能被继承。文章重点解释 `final List`、`String`、可变对象字段和防御性拷贝等场景,帮助读者分清“引用不能换对象”和“对象内容不可变”的区别,避免把 `final` 误认为不可变对象设计。
2026-05-29 08:00:00
599
33
原创 【Java基础核心知识点全解·第8篇】抽象类与接口详解:abstract、interface 与面向接口编程
本文面向已经理解继承、方法重写和多态的 Java 初学者,系统讲解抽象类与接口的核心用法。内容包括 abstract class、抽象方法、interface、implements、默认方法、静态方法、接口常量、多接口实现和默认方法冲突,并通过“共同模板”和“能力约定”对比抽象类与接口的适用场景,帮助读者理解面向接口编程的基础思想。
2026-05-29 07:45:00
366
2
原创 【Java基础】5 / 2 为什么等于 2?整数除法、取余和 floorMod 一次讲清
本文围绕 Java 中最容易误解的 / 和 % 展开:为什么 5 / 2 等于 2,为什么 (double)(5 / 2) 只能得到 2.0,为什么 -5 % 2 是 -1,以及循环下标场景为什么更适合使用 Math.floorMod()。文章还补充了 Integer.MIN_VALUE / -1 这个容易被忽略的整数溢出边界,帮助你把整数除法、取余和负数取模一次理清。
2026-05-28 08:09:38
530
45
原创 【Java基础核心知识点全解·第7篇】多态详解:编译时类型、运行时类型与动态绑定一次讲清
本文系统讲解 Java 多态的核心机制,围绕编译时类型、运行时类型、动态方法查找展开,说明父类引用为什么能指向子类对象、为什么只能访问父类视角下的成员,以及重写方法为什么会在运行时执行子类版本。文章还结合向上转型、向下转型、instanceof、字段隐藏、方法重载等常见误区,帮助初学者真正理解多态背后的编译器检查与 JVM 动态绑定规则。
2026-05-28 08:09:08
398
2
原创 【Java杂项】String 为什么不可变?从对象引用、常量池到字符串拼接讲清楚
很多 Java 初学者会把 `String` 不可变误解成“字符串变量不能改”,但真正不可变的是字符串对象内部保存的字符序列,而不是引用变量本身。本文从对象引用、`final` 的真实作用、字符串常量池、线程安全、哈希缓存和字符串拼接几个角度,讲清楚 `String` 为什么设计成不可变,以及什么时候该使用 `StringBuilder` 或 `StringBuffer`。
2026-05-27 08:15:00
824
46
原创 【Java基础核心知识点全解·06】继承详解:extends、super、方法重写与组合取舍
本文系统讲解 Java 继承机制,围绕 extends、父子类关系、super、构造方法链、方法重写、Object 类、equals/hashCode、字段隐藏和 final 展开,并进一步分析继承的工程代价,包括脆弱基类、CountingHashSet 计数问题、组合优先以及 is-a 行为契约判断。适合已经掌握类、对象和封装,准备深入理解 Java 面向对象继承设计的初学者阅读。
2026-05-27 08:00:00
509
2
原创 【Java杂项】Java 参数传递到底是不是引用传递?值传递与引用值副本讲透
本文围绕 Java 参数传递的经典争议展开,讲清 Java 为什么只有值传递,而不是引用传递。文章从形参是方法内部局部变量这一底层视角出发,分别拆解基本类型、对象、数组、String 和 swap 方法的传参表现,重点解释引用值副本、对象内容修改、形参重绑之间的区别,帮助初学者真正理解“能改对象属性”不等于“引用传递”。
2026-05-26 08:00:00
1039
56
原创 【Java基础核心知识点全解·05】封装详解:private、Getter/Setter、DTO 与 API 边界
本文系统讲解 Java 面向对象中的封装机制,围绕 private、public、protected、包级权限、Getter/Setter、数据不变式和 API 边界展开,并补充 DTO、record、返回副本、Collections.unmodifiableList 等真实工程中的权衡场景。适合已经掌握类与对象,想进一步理解封装如何维护对象状态、降低耦合并设计清晰接口的初学者阅读。
2026-05-26 07:45:00
422
原创 【Java杂项】自动装箱、自动拆箱与 IntegerCache:== 比较、空指针和性能坑详解
本文围绕 Java 自动装箱、自动拆箱与 IntegerCache 展开,讲清编译器背后如何调用 valueOf() 和 xxxValue(),为什么 Integer 的 127 用 == 比较可能为 true,而 128 通常为 false。同时结合 Objects.equals()、NullPointerException、包装类缓存范围和 Long 循环累加性能问题,帮助读者真正理解包装类比较、拆箱空指针和频繁拆装箱带来的常见坑。
2026-05-25 08:15:00
1722
28
原创 【Java基础核心知识点全解·04】面向对象基础详解:类与对象、this 与 static 一次讲清
本文围绕 Java 面向对象基础展开,系统讲解类与对象的关系、字段与成员方法、new 创建对象、构造方法与构造器重载、this 关键字、static 静态成员,以及 Java 参数传递和对象引用共享的常见误区。适合已经掌握变量、流程控制和数组,准备进入面向对象编程的初学者阅读。
2026-05-25 08:00:00
380
2
原创 【Java基础核心知识点全解·03】流程控制与数组:从分支循环到数组引用
本文系统讲解 Java 基础中的流程控制与数组,围绕 if-else、switch-case、while、do-while、for、break、continue、return 等语法展开,并结合一维数组、多维数组、数组遍历、数组默认值、数组越界和数组引用共享问题,帮助初学者建立清晰的执行流程和数组使用认知。
2026-05-24 08:00:00
394
3
原创 【Java】String 常量池、== 与 equals 详解:从引用比较到 intern() 一次讲清
本文围绕 Java 字符串比较中的高频误区展开,系统梳理 ==、equals()、字符串常量池、new String()、编译期与运行期拼接、final 常量折叠以及 intern() 的核心规则。通过多个代码示例说明为什么字符串内容比较应优先使用 equals(),以及为什么某些场景下 == 返回 true 只是常量池复用带来的结果,帮助 Java 初学者真正理解 String 比较背后的引用关系与常见踩坑点。
2026-05-24 08:00:00
968
39
原创 【Java基础核心知识点全解·02】数据类型与运算符:从变量存储到类型转换一次讲清
本文是 Java 基础核心知识点全解系列第 2 篇,系统梳理 Java 数据类型与运算符的入门核心内容,包括八种基本数据类型、引用类型、变量赋值规则、字面量默认类型、自动类型转换、强制类型转换、包装类装箱拆箱、字符串 equals 比较、整数除法、复合赋值、短路逻辑和浮点数精度等常见易错点,帮助初学者建立清晰的 Java 类型系统认知。
2026-05-20 08:00:00
447
14
原创 【Java杂项】为什么 long 可以自动转 float?宽化基本类型转换与精度丢失详解
本文围绕 Java 中反直觉的 long -> float 自动转换展开,讲解宽化基本类型转换的判断逻辑:Java 看重的是数值表示范围,而不是简单比较内存位数。文章通过 2^24 + 1、2^53 + 1 等示例说明整数转浮点数可能发生精度丢失,并结合 ID、金额计算等工程场景总结避坑原则。
2026-05-20 08:00:00
1596
56
原创 【Java基础核心知识点全解·01】Java运行机制详解:从 HelloWorld 到 classpath 找类流程
本文是《Java基础核心知识点全解》系列第 1 篇,面向 Java 初学者,从 .java -> javac -> .class -> JVM 这条主线出发,讲清 Java 程序从源码到运行结果的完整过程,并结合 HelloWorld 示例拆解 JDK、JRE、JVM、package、import、classpath 的关系。文章最后整理“找不到或无法加载主类”等常见问题排查方法,帮助读者建立 Java 入门阶段最关键的运行机制认知。
2026-05-19 08:00:00
527
12
原创 【Java杂项】为什么 b += 1 可以,但 b = b + 1 会报错?类型提升与复合赋值详解
本文围绕 Java 中经典问题“为什么 b += 1 可以,但 b = b + 1 会报错”展开,系统讲解 byte、short、char 参与运算时的类型提升规则、复合赋值的隐式转换机制,以及 short 溢出截断风险。通过代码示例和流程图,帮助初学者理解表达式计算阶段与赋值阶段的区别,避免把 += 简单理解成普通赋值缩写。
2026-05-19 08:00:00
5761
90
原创 【Java基础核心知识点全解·第0篇】Java开发环境搭建指南:JDK + IDEA 从安装配置到运行 HelloWorld
本文面向 Java 零基础学习者,基于 Windows 系统讲解 Java 开发环境搭建流程,包含 JDK 8、JDK 17、JDK 21 的版本选择建议,Oracle 官网与网盘下载入口,JDK 安装路径规范,JAVA_HOME 与 Path 环境变量配置,java -version 和 javac -version 验证方式,以及 IntelliJ IDEA 安装、项目创建和 HelloWorld 程序运行,帮助读者完成 Java 学习前的环境准备。
2026-05-18 08:00:38
1560
49
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅