java教程技术文章
-
Java 模式 switch 不会让 null 自动落入普通类型模式。本文用 case null 和 case null, default 说明空值分支、default 兜底及非法组合边界,并给出一组最小反向验证清单。220 收藏 -
Java 25 的紧凑源文件可以省略显式 class 声明,配合实例 main 直接运行单文件程序。本文说明最小写法、java 启动命令、参数选择规则和何时恢复普通类结构。461 收藏 -
Java String.lines() 适合读取真实文本行,但不会把结尾换行符自动变成额外空记录。本文说明行结束符、连续换行和末尾空元素的差异,并用 split(regex, -1) 保留协议需要的尾部空记录。337 收藏 -
Java WatchService 的 OVERFLOW 表示事件可能已被丢弃,不能把它当成具体文件名处理。本文说明如何按监听目录重扫、用快照和业务索引对账,并正确 reset WatchKey 与关闭 WatchService。360 收藏 -
Java 文本块可以写得整齐,但源码排版带来的公共缩进不一定适合最终字符串。本文用 HTML 和 SQL 片段说明 String.stripIndent 如何去掉偶然公共缩进、保留内部相对层级,并比较 strip 与 indent 的使用边界。320 收藏 -
Java NIO 的 PathMatcher 可以由 FileSystem.getPathMatcher 创建,用 glob 规则匹配 Path 的字符串表示。本文从常见模式、目录遍历、路径层级和大小写边界出发,整理一套可直接放进文件筛选代码的写法。246 收藏 -
区分 Java 模块系统中 exports 与 opens 的职责,结合 module-info.java、setAccessible、trySetAccessible 和 Module API,给出框架反射排障与最小开放配置方法。478 收藏 -
Java 线程池队列一直变长,通常不是把容量调得更大就能解决。本文用有界队列、最大线程数和 CallerRunsPolicy 组成简单背压,并说明拒绝策略、指标与任务类型的取舍。311 收藏 -
Java GC 日志不能只看最大耗时。本文以 JDK 25 HotSpot/G1 为例,说明统一日志采集、GC 编号关联、暂停与并发阶段区分,以及安全点、CPU 时间和分配压力的判读边界。306 收藏 -
用 ValueSource、CsvSource 和 MethodSource 组织 JUnit 5 参数化测试输入,覆盖单值、表格与动态对象场景。110 收藏 -
Java record 和 Lombok @Data 都能减少数据类样板代码,但它们表达的对象契约不同。本文从不可变语义、访问器、继承、框架绑定和迁移成本比较两种方案,并给出 DTO、配置对象与领域实体的选择规则。422 收藏 -
Gradle configuration cache 不复用时,先用 help 区分配置阶段和任务阶段,再根据问题报告修复 Project、监听器、外部进程和任务状态依赖;暂时无法迁移的任务只做局部 opt-out。281 收藏 -
Jackson 多态 JSON 需要稳定类型字段和明确子类型映射。本文用通知对象的往返示例说明 Id.NAME 的用法,区分缺失类型、未知类型、集合泛型和旧数据迁移边界。126 收藏 -
Java Maven BOM 可以把一组相关依赖的版本集中到一个 POM,再由项目通过 dependencyManagement 和 import 引入。本文用原创示例说明 BOM 的写法、子模块声明、effective POM 排查,以及多个 BOM 重叠时的显式覆盖边界。279 收藏 -
文章 · java教程 | 3星期前 | Java · 异常处理 · try-with-resources IOException Java InputStream.transferTo Java 字节流复制 OutputStream
用 Java InputStream.transferTo 把输入流复制到 OutputStream,理解返回字节数、流关闭责任、IOException 与部分写入边界,并给出文件、响应流和进程流的处理方式。455 收藏