-
getItems()返回原始引用导致内部状态被篡改,因Java集合默认不拷贝、final仅锁引用不锁内容;安全做法是返回不可变视图或独立副本。
-
Java服务器中可通过jstat、jinfo、jstack及JMX/HTTP端点查看JVM信息:jstat实时监控GC与内存,jinfo查看并动态修改启动参数,jstack分析线程与锁,JMX或Actuator提供结构化指标用于监控告警。
-
本文详解如何为Circle类设计add(Circleother)方法,使其将当前圆与传入圆的面积之和,映射为一个等效的新圆,并原地更新当前圆的半径,支持链式调用。
-
Scanner读取输入时卡住或跳过是因为nextInt()等不消费换行符,nextLine()会读到残留\n;应统一用nextLine()后解析,或在nextInt()后加nextLine()清缓存。
-
防止NullPointerException的核心是在使用引用变量前确保其不为null;需明确空值契约、用注解声明意图、参数校验、语义化命名、安全访问链式调用、合理使用Optional和工具方法、构造器强制初始化、利用现代API与静态检查工具。
-
ArrayList和LinkedList允许存null但易致NPE;HashMap允一个nullkey和任意nullvalue,ConcurrentHashMap禁止nullkey/value;TreeSet/TreeMap不接受null;Optional.of(null)立即抛异常,须用ofNullable。
-
Collections.copy()用于将源列表元素复制到已有目标列表中,要求目标列表长度≥源列表。示例中通过预填充默认值确保容量,调用copy后完成覆盖复制。常见错误包括目标列表长度不足或未初始化,会抛出IndexOutOfBoundsException或NullPointerException。注意其与addAll()区别:copy是替换原有元素位置,不改变结构;addAll是追加元素,增加长度。需提前设置目标列表大小,可用Collections.nCopies初始化。该方法适用于复用列表对象的场景,
-
LockSupport.park()不阻塞是因为其依赖线程的permit状态:若此前已调用unpark(),permit存在则park()直接返回;多次unpark仅保留一个permit,且不保证唤醒顺序或内存可见性。
-
final类不能被继承,用于保障安全性、不可变性及性能优化。如String类防止篡改,不可变类确保状态固定,JVM可对final类方法内联优化,工具类通过final明确禁止扩展意图。
-
Scanner可通过useDelimiter()方法用正则表达式自定义分隔符,需注意双重转义、空token处理及nextXXX()的类型校验;推荐先用next()获取字符串再手动解析。
-
DTO是专用于层间数据传输的精简无逻辑POJO,本质区别在于其明确职责:仅含必要字段且禁止业务方法;而POJO是泛称,无功能约束。
-
try-finally用于确保关键操作(如资源清理)无论是否发生异常都执行,finally在try退出时无条件运行,但System.exit()或JVM强制终止时除外;推荐优先使用try-with-resources。
-
Arrays.sort不能直接对任意对象数组排序,必须让对象实现Comparable接口或传入Comparator,否则抛ClassCastException;未实现Comparable时可用Comparator灵活定制排序规则,如按金额降序:Arrays.sort(orders,(a,b)->Double.compare(b.amount,a.amount))。
-
URL类用于表示和操作URL,专注地址解析、构造与标准化,不发送请求;可拆解协议、主机等字段,支持相对路径解析和自动编码,通过openConnection()配合URLConnection发起请求,但不可变且功能基础。
-
方法引用不能替代反射调用静态方法,它是编译期绑定的函数式语法糖,与运行时反射机制本质不同;强行混用会导致类型不兼容和编译错误,真正提升可读性的是优先使用方法引用而非反射。