-
构造函数中启动线程危险,因this引用可能逸出,导致其他线程看到半初始化对象,引发NullPointerException或逻辑错误;应将线程启动移至工厂方法或init()中确保安全发布。
-
直接newForkJoinPool()易出问题,因其默认共享commonPool且线程数等于CPU核心数,I/O阻塞易致饥饿、堆积或死锁;应显式创建独立实例并合理设置并行度。
-
Java中判断线程是否被中断应检查中断标志而非线程状态;Thread.interrupted()检测并清除当前线程中断状态,isInterrupted()仅检测不修改;阻塞方法响应中断抛出InterruptedException且自动清标志,需手动恢复;不可中断操作不响应interrupt(),getState()与中断无关。
-
父类引用可指向子类对象,本质是类型系统基于is-a关系的强制保障;编译期只允许调用父类声明的方法,子类特有方法需向下转型并检查类型;方法重写在运行时动态调度,字段访问和静态方法则按声明类型绑定。
-
instanceof判断null直接返回false而非抛异常;Java16起支持模式匹配语法,如if(objinstanceofStrings),变量s在if块内自动绑定且非null,但不支持泛型类型、基本类型及作用域外访问。
-
CompletableFuture.allOf不能直接获取结果,因它只返回CompletableFuture<Void>且不收集值;需先allOf.join()等待完成,再对各Future调用join()取值。
-
sealed关键字不支持“只允许指定子类继承”的白名单控制,仅提供彻底禁止继承(类)或终止重写(成员)的黑名单机制;需通过internal构造器、程序集边界或工厂模式等设计手段实现受限继承。
-
贪心算法中break不能实现最优解剪枝,因其无搜索空间和回溯机制;它仅用于提前终止构造过程(如约束满足)或出现在混合算法中。
-
break未生效的根本原因是它未处于直接的for循环体内,常见于嵌套逻辑错误、函数内误用或异步回调中;它仅对最近一层循环有效,需严格检查缩进、大括号配对及作用域。
-
Files.walkFileTree()配合SimpleFileVisitor是统计文件夹磁盘占用最稳妥的方式,支持符号链接处理、权限异常兜底及深度控制,核心重写visitFile累加大小,visitFileFailed忽略错误,preVisitDirectory可过滤目录或检测循环软链。
-
Java遍历数组有三种方式:传统for循环(需索引或修改元素)、增强for循环(简洁遍历)和StreamAPI(支持过滤映射等函数式操作),选择依需求而定。
-
FileReader读取中文文件需确保编码匹配:优先将文件保存为UTF-8并调用readAsText(file,'UTF-8');若为GBK等编码,须用readAsArrayBuffer配合iconv-lite解码。
-
本文详解JavaCleaner无法触发清理动作的典型原因:闭包中意外持有被清理对象的强引用,导致对象无法进入幻象可达状态;并提供符合JVM清理机制的规范实现方案。
-
三元运算符该用在哪儿只适合替换那种「单表达式、无副作用、纯返回值」的if-else。比如给变量赋值、return一个结果、作为参数传入函数。一旦里面出现System.out.println()、list.add()或者多个语句,就该立刻退回去写if。嵌套三元容易出错的写法嵌套三层以上基本等于自找麻烦。Java不强制括号,但a?b:c?d:e的结合顺序是右结合(等价于a?b:(c?d:e)),和直觉可能不一致。稍不注意就会逻辑翻车。实操建议:嵌
-
org和com是Java包命名中沿用互联网域名语义的非强制前缀:com对应商业组织,如com.google.gson;org对应非营利组织,如org.junit.jupiter;选择依据是项目归属与维护主体性质而非法律注册状态。