-
静态代码块在类首次被主动使用且JVM执行初始化阶段时执行,仅一次;按源码顺序执行,依赖声明顺序,不可用this或new实例,异常会导致初始化失败。
-
进了,但仅限于编译期能确定的字符串字面量;Java在编译阶段将"abc"等字面量存入class常量池,类加载时载入运行时常量池(JDK7+位于堆中),Strings="abc"直接复用该引用,而newString("abc")总在堆新建对象。
-
Collator是Java提供的本地化字符串比较器,专为中文等多语言排序设计,解决String.compareTo()仅按Unicode码点排序导致的语序错误;需用Collator.getInstance(Locale.CHINA)创建实例并设setStrength(Collator.PRIMARY)以支持拼音且忽略声调。
-
方法区存储类的元数据而非对象实例,Java8后由元空间(Metaspace)实现,使用本地内存;存放类结构、常量池引用等,字符串字面量在堆中但其引用在方法区,staticfinal编译期常量值被内联;PermGen已被Metaspace替代,OOM类型变为Metaspace相关;String.intern()影响方法区引用登记;Class.forName()和defineClass()向方法区注册类元数据;类卸载需满足实例、类加载器及元数据三重回收条件。
-
JRebel热更失效主因是rebel.xml未生成或IDE未传-javaagent参数;需验证文件存在、关闭SpringBootDevTools、配置jrebel.spring-mvc=true,并注意静态字段、字节码增强及远程部署权限问题。
-
Future是Java中用于获取异步任务结果的核心接口,通过ExecutorService提交Callable任务并调用get()方法获取结果,支持超时控制、状态轮询和批量任务处理,但易阻塞,复杂场景推荐使用CompletableFuture。
-
ClassCastException可通过预防措施避免:1.使用instanceof检查类型;2.正确使用泛型避免集合误取;3.合理设计继承体系;4.捕获异常仅作兜底。
-
局部内部类访问外部变量必须为final或事实不可变,因局部变量存于栈帧中、方法结束即销毁,而内部类实例可能存活更久;Java通过值拷贝+禁止修改确保安全,成员变量则通过外部类引用访问,生命周期一致。
-
PriorityQueue默认是最小堆,队首返回最小元素;需显式传Comparator.reverseOrder()才能实现最大堆;自定义对象必须实现Comparable或提供Comparator,否则抛ClassCastException。
-
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;选择依据是项目归属与维护主体性质而非法律注册状态。
-
饿汉式简单但可能浪费资源;2.懒汉式双重检查锁定需volatile保证线程安全;3.静态内部类实现懒加载且线程安全;4.枚举方式最推荐,防反射和反序列化破坏。