java教程技术文章
-
文章 · java教程 | 3星期前 | 文件操作 · Java · nio · java nio Files.move ATOMIC_MOVE AtomicMoveNotSupportedException
Java Files.move 搭配 ATOMIC_MOVE 可以避免读者看到半成品,但并非所有文件系统都支持。本文给出异常边界、兼容降级和恢复策略。275 收藏 -
Java pattern matching for switch 遇到 null 时不会自动进入 default。本文用 case null 与 case null, default 对比说明匹配边界、合法组合和实际检查清单。274 收藏 -
虚拟线程可以承载大量阻塞任务,但不会增加数据库连接数。本文用连接池、Semaphore 和等待指标拆开说明 Java 并发上限该怎么设。272 收藏 -
通过一次支付处理中状态被误判为失败的复盘,演示如何用 Java sealed interface、record 与模式匹配 switch 固定结果集合、获得编译期穷尽检查,并设计同模块扩展边界。270 收藏 -
BigDecimal.divide 不指定舍入规则时,遇到 1/3 这类非终止小数会抛出 ArithmeticException。本文按金额小数位、有效数字和严格校验三种场景说明如何选择 scale、MathContext 与 RoundingMode。266 收藏 -
Java sealed interface 通过 permits 限制直接实现者,并要求它们用 final、sealed 或 non-sealed 明确后续扩展边界。本文结合层级、模块包约束和二进制兼容性说明如何正确设计。266 收藏 -
CompletableFuture 异常处理要先定位阶段,再按目标选择 exceptionally、handle、whenComplete 或 exceptionallyCompose,并检查异常包装与线程池。265 收藏 -
Java Stream 分组后保留每组首条记录,先用稳定排序定义首条,再用 toMap 合并函数保留旧值;复杂比较规则则集中到 Collector,并检查并行流、null 与重复键边界。265 收藏 -
Java 的 requires transitive 会把目标模块加入下游的隐式可读性,但不会自动导出所有包。本文用 app、facade、logging 三模块示例,解释下游编译边界、exports 配合关系,以及 javac 和 java 的排查方法。257 收藏 -
Java ReentrantLock 公平模式会优先照顾等待更久的线程,但高竞争下通常吞吐量更低。本文解释排队协调成本、tryLock 边界,并给出可比的公平与非公平锁选择方法。252 收藏 -
Java BigDecimal 的 scale 决定小数位表示,不等同于最终显示格式。本文用 setScale、RoundingMode 和 DecimalFormat 组合,让金额在计算、比较和展示时保持一致。251 收藏 -
Java Spliterator 的 characteristics 写错会影响并行流的拆分、顺序和尺寸优化。本文按 ORDERED、SIZED、SUBSIZED、CONCURRENT 等特征解释风险,并给出自定义 Spliterator 的边界检查清单。250 收藏 -
Java Files.lines 返回的是持有文件资源的惰性 Stream,必须在 try-with-resources 中关闭;本文说明文件句柄为何持续占用、正确写法以及与 readAllLines、BufferedReader 的选择边界。248 收藏 -
用 Java RandomGeneratorFactory.all() 按可拆分、可跳跃和可跃迁能力筛选随机算法,再按稳定规则创建生成器,厘清 getDefault() 与 stateBits 的边界。244 收藏 -
Java 高并发统计计数优先考虑 LongAdder:它通过分散内部计数降低更新竞争,再用 sum 汇总;AtomicLong 则更适合序列号、额度和需要原子读改写的精确状态。本文对比两者的吞吐、读取、重置和迁移边界。243 收藏