-
Java执行顺序为:类加载时先父类后子类初始化static变量和块;new对象时先父类构造器、再本类实例块、最后构造器体;main方法非最先执行,其所在类static初始化可能早已完成;方法内语句自上而下执行,表达式按优先级与从左到右求值。
-
Java分批应优先用subList或GuavaLists.partition,避免Stream.collect硬凑;需注意视图修改风险、空值校验及并发安全。
-
try-with-resources中close()异常会被抑制而非覆盖主异常;主异常始终抛出,close异常可通过getSuppressed()获取;应主动检查处理被抑制异常,优化close实现以减少异常,并在必要时改用手动finally管理。
-
标记整理算法是老年代碎片整理的标准实现路径,通过标记存活对象、计算新地址、移动并更新引用三步闭环,将存活对象紧凑排列至堆一端,生成连续空闲空间,从而高效支持大对象分配。
-
迪米特法则强调对象只与“朋友”通信,避免火车式调用;应通过委托方法封装嵌套访问、返回不可变/抽象结果,并用协调者解耦多对象协作。
-
应优先使用NumberFormat.getCurrencyInstance(Locale)获取区域敏感的货币格式器,而非直接使用DecimalFormat;因后者不绑定Locale且无视币种小数规则,易导致符号错误或非法小数位。
-
应先检查list!=null&&!list.isEmpty()再用get(size()-1),或改用ArrayDeque.getLast()等更安全高效的方式,避免空指针、越界及性能问题。
-
必须用localRepository配置本地仓库路径,它位于settings根节点下且不可被profiles或mirrors嵌套;路径推荐绝对英文路径,改后需清理\_remote.repositories文件;容灾依赖缓存和mvn-o离线模式。
-
Java全局参数管理核心是解耦配置与代码,需统一抽象为含key、defaultValue、value(volatile)、desc及监听器的结构,推荐轻量容器+配置加载或SpringBoot的@ConfigurationProperties方案。
-
newLinkedBlockingQueue()线程安全因其内部使用ReentrantLock和两个Condition(notEmpty、notFull)对所有关键操作加锁,无需额外同步;但迭代器弱一致,遍历时修改会抛ConcurrentModificationException。
-
Javarecord与模式匹配结合可简化不可变数据结构的类型判断和字段提取:instanceof支持直接解构、switch支持按类型和字段值分支、替代Visitor模式、构建类型安全解析流水线。
-
String不可变性由private、final引用、无修改方法三重防护协同实现,缺一不可;JDK9改用byte[]是为内存减负,依赖不可变性保证编码稳定;常量池复用、线程安全、hashCode缓存等均为其自然红利。
-
用System.getProperty("os.name")获取系统名,如“Windows10”“Linux”“MacOSX”;判断Windows用startsWith("windows"),Linux用contains("Linux"),Mac用contains("mac")或equals("Darwin")。
-
本文详解如何使用Jackson的@JacksonXmlElementWrapper(useWrapping=false)配合@JacksonXmlProperty,实现POJO转XML时跳过默认集合外层标签(如<childs>),直接将列表元素平铺为同级XML节点。
-
SLF4J本身是日志门面,不提供多输出或基于Marker的日志路由能力;实际功能需由底层绑定实现(如Log4j2、Logback)。本文详解如何通过Log4j2实现控制台+文件双输出、按Logger名称/Marker分流至不同日志文件,并附可运行配置示例与关键注意事项。