-
静态成员属类、共享且类加载时初始化;实例成员属对象、独立且每次new时创建;静态方法不能访问实例成员;静态块先于实例块执行;静态内部类不持外部引用,非静态则持有;静态集合易致内存泄漏。
-
StructuredTaskScope是Java21实现结构化并发的核心机制,通过作用域自动强制子任务生命周期与父作用域绑定,解决ExecutorService边界模糊、错误传播手动、资源清理不可靠等问题。
-
Java内存模型(JMM)是定义多线程下共享变量可见性、有序性、原子性的抽象规范,与JVM堆栈等内存布局无关;volatile保证单次读写可见性和禁止重排序,但不保证复合操作原子性;happens-before规则是判断操作间可见性的唯一依据;final字段在正确发布前提下具有初始化完成的内存语义。
-
JavaFX凭借GPU加速、SceneGraph统一管理和帧同步线程模型,在动画、高刷、3D和WebView等场景显著优于Swing;Swing依赖CPU软渲染、缺乏内置异步抽象且布局维护成本高,适合简单界面或JDK≤8的老旧环境。
-
Java变量初始化是编译强制要求:局部变量必须显式初始化,成员变量虽有默认值但不推荐依赖,final变量须且仅能初始化一次,初始化顺序遵循严格规则以避免隐式依赖。
-
Java数组统计有三种方式:①for循环手动遍历,需注意整除精度、空数组判空;②StreamAPI用summaryStatistics()一行获取全部统计值,但空集合返回默认值;③Collections工具类需防异常,HashMap频次统计要预处理大小写和空白。
-
Log4j2依赖需同时引入log4j-api和log4j-core,否则运行时报错;配置文件log4j2.xml须置于src/main/resources下且命名准确;RootLogger级别与Appender绑定必须正确;多模块中可用log4j2.component.properties指定配置优先加载。
-
List.of和Map.of是Java9引入的不可变集合工厂方法,不支持null元素或键值,返回私有不可变类实例,调用add/remove抛UnsupportedOperationException;适用于默认参数、配置项、测试断言等只读场景。
-
newChild()先打印Grandparent静态块,因为JVM类初始化遵循父类优先原则:触发Child初始化前必须先完成Parent和Grandparent的初始化,且静态内容按源码声明顺序执行。
-
确定循环次数用for,不确定用while:for适用于可预知次数的遍历或计数,while适用于依赖状态变化的场景;for变量作用域受限更安全,while变量可后续复用;for-each适合纯遍历,需索引或修改集合时应回退传统for或使用迭代器。
-
安装JDK并配置环境变量,再选择IDE完成Java开发环境搭建。1.安装JDK17或21版本,记录安装路径;2.设置JAVA_HOME系统变量并添加%JAVA_HOME%\bin到Path;3.命令行执行java-version和javac-version验证安装;4.安装IntelliJIDEA、Eclipse或VSCode进行开发。确保路径正确,验证无误即可开始编写Java程序。
-
根本异常是引发异常链的最底层异常,通过Exception.getCause()可获取其对象,用于追溯问题源头。
-
本文介绍在多JDK版本兼容构建场景下,如何通过MavenProfile实现对jakarta.xml.bind-api等模块化API依赖的精准控制:JDK8构建时完全排除,JDK11+构建时按需显式引入。
-
自旋锁通过让线程在用户态空转避免上下文切换,节省1000+时钟周期;仅适用于临界区极短场景,JVM对synchronized默认启用自适应自旋,而ReentrantLock需手动实现。
-
应使用卫语句提前拦截null而非重复判断,JDK版本决定switch用法,布尔条件直接用if(flag)避免冗余和空指针,嵌套过深需拆分职责或改用策略模式。