java教程技术文章
-
Java Files.find 可以在遍历文件树时直接接收 BasicFileAttributes 做过滤。本文用普通文件、大小和修改时间三个条件说明属性匹配写法,并用 try-with-resources 及时关闭返回流。345 收藏 -
Java Pattern 减少正则编译开销的关键是按规则生命周期复用编译对象。本文给出固定规则与配置规则写法,说明共享 Pattern、隔离 Matcher 及发布回退的注意事项。279 收藏 -
Java record 的字段是 final,但可变 List 仍可能通过共享引用被外部修改。本文用 compact constructor 和 List.copyOf 处理集合防御性复制,并说明它不等于深拷贝。494 收藏 -
Java MethodHandles.Lookup 的权限不是全局开关:本文用私有实例方法、publicLookup 和模块 opens 关系说明句柄创建时的访问检查,以及如何收窄和管理句柄能力。320 收藏 -
文章 · java教程 | 2星期前 | Java · 集合 · 资源管理 · Stream · Java教程 · supplier Java Stream Files.lines Stream生命周期 重复遍历
Java Stream 不是可反复读取的集合视图:一次终止操作后,继续使用同一个 Stream 可能抛出 IllegalStateException。本文从昂贵数据源的生命周期出发,说明何时保存集合、何时保存 Supplier>,并给出 Files.lines 的资源关闭写法。 146 收藏 -
用 Java ClassValue 按 Class 延迟缓存元数据,理解 get、computeValue、remove 的生命周期、失效方式与并发边界。165 收藏 -
Java Files.probeContentType 返回 null 并不等于文件损坏,而是当前文件类型探测器无法确定 MIME 类型。本文区分 null 与 IOException,解释扩展名、平台和 FileTypeDetector 的影响,并给出上传场景的受控兜底策略。218 收藏 -
Java 使用虚拟线程后,可以通过 jcmd Thread.dump_to_file 导出包含虚拟线程的文本或 JSON 线程转储。本文从目标 JVM、格式选择、输出边界和诊断材料整理四个方面说明用法,并提醒它不是暂停 JVM 的一致快照。366 收藏 -
Java ArrayDeque 适合在队列两端进行插入、删除和查看。本文用首尾语义拆开 add、offer、poll、peek、push、pop 的选择,并说明空队列、null 元素和线程安全边界。312 收藏 -
虚拟线程支持 ThreadLocal,但继承策略不能靠默认值猜测。本文用 Thread.Builder 关闭不需要的 InheritableThreadLocal 继承,并用 Java 25 ScopedValue 管理只读上下文的生命周期。126 收藏 -
使用 JDK 自带 jcmd 定位 Java 进程,执行 Thread.print 查看线程栈、状态与锁信息,并学习如何把快照落盘及正确解读 RUNNABLE、BLOCKED 和 WAITING。339 收藏 -
Java ProcessHandle.Info 可以读取进程的可执行命令、参数、命令行、启动时间、用户和 CPU 时间,但这些字段都可能因平台和权限返回空 Optional。本文用一段可复用的诊断代码解释字段差异和安全处理方式。205 收藏 -
讲清 JDBC 语句关闭与 ResultSet 的联动关系,以嵌套 try-with-resources 管理读取作用域,并说明借用连接、游标逃逸及主体异常与 suppressed 关闭异常的处理边界。208 收藏 -
Java Matcher 可以通过 region(start, end) 把搜索限制在原字符串的半开区间内。本文用具体示例说明 find、matches、lookingAt 的范围变化,并解释 anchoring bounds、transparent bounds 与 lookaround 的边界差异。247 收藏 -
Java Instant 按分钟截断时直接使用 truncatedTo(ChronoUnit.MINUTES),结果会把秒和纳秒置零。本文说明 UTC 时间线、不可变返回值、可用单位和本地时区边界。322 收藏