-
Java对象头MarkWord存储哈希码、GC年龄、锁状态等,用JOL配合HotSpot源码可解析其二进制结构:无锁为001、偏向锁101、轻量级锁000、重量级锁010、GC标记111。
-
Java初学者应先用命令行验证JDK版本一致性,再手动编译运行Hello.java,严格遵守类名与文件名一致、main方法签名及访问修饰符要求,通过故意出错理解类加载与字节码机制。
-
Java访问修饰符决定可见性与封装强度:public开放接口需谨慎;protected支持安全继承;默认(包级私有)实现模块隔离;private保护实现细节。
-
父类构造方法先于子类执行,Java创建子类对象时会先调用父类构造方法,确保继承链中每层初始化。若子类未显式调用super(),编译器自动插入对父类无参构造方法的调用;若父类无无参构造方法则需显式调用super(参数)。构造方法调用顺序为:自上而下执行父类构造方法至Object类,再自下而上执行各层构造方法体内容。字段初始化发生在super()返回后、构造方法体执行前,因此在构造方法中调用可被重写的方法可能导致子类字段未初始化,输出null等异常结果。应避免在构造方法中调用可被重写的方法。
-
java-version是最可靠的Java安装验证方式,它不依赖IDE或项目配置,只检验系统能否调用java可执行文件;输出包含版本号、JDK类型、架构和运行时信息,且能暴露PATH与JAVA_HOME不一致等问题。
-
@ControllerAdvice拦不住404/500是因它仅捕获控制器层异常,非容器级错误需通过自定义ErrorController或ErrorPageRegistrar统一处理。
-
偏向锁撤销是JVM在安全点自动触发的锁状态降级过程,将“绑定线程ID”的偏向状态安全恢复为可竞争的轻量级锁初始态,以应对竞争、线程退出、wait/notify调用等场景。
-
应使用ArrayList替代数组存储员工对象,重写Employee的equals()和hashCode(),用Stream过滤查询,Iterator安全删除,HashMap按部门索引,Comparator链式排序,CSV文本持久化并异常兜底。
-
Java转义字符的核心作用是让编译器将特殊字符视为普通字符或插入控制字符,均以单个反斜杠\开头;基础有\n、\t、\r、\b、\f、\"、\'、\\八种;需在字符串、字符字面量、正则、路径等场景规避语法冲突;还可通过\uXXXX和\ddd编码表示任意字符;使用时须注意转义层级与上下文。
-
Java只支持值传递。基本类型传递值副本,方法内修改不影响原变量;引用类型传递地址副本,可修改对象状态但无法改变原引用指向,String等不可变类重新赋值仅改变局部引用。
-
静态分派在编译期根据引用变量声明类型选择重载方法,动态分派在运行时依据实际对象类型查找重写方法;invokestatic/invokespecial指令不查表,invokevirtual指令触发虚方法表查找。
-
内部类是定义在类内部的类,能访问外部类所有成员,主要用于封装辅助逻辑、提升代码组织性。1.成员内部类用于与外部类强关联的场景;2.局部内部类封装方法内的复杂逻辑;3.匿名内部类常用于事件监听等临时实例;4.静态嵌套类适用于无需外部实例绑定的逻辑。通过private修饰可隐藏实现细节,增强封装性。典型应用如ArrayList的Itr类实现迭代器模式,直接访问内部数据,保证安全高效。内部类是解决类与辅助逻辑组织的有效手段,使代码更清晰、安全、易维护。
-
本文详解为何在嵌套循环中直接使用增强for循环(for-each)删除ArrayList元素会导致程序异常终止或漏删,并提供从后往前索引遍历、迭代器删除等安全方案,附可运行示例与关键注意事项。
-
TreeMap能保证Key有序,根本原因是其底层采用红黑树结构并强制Key可比较;Key必须实现Comparable或传入Comparator,否则put()时抛ClassCastException;红黑树通过着色规则保障O(logn)高度与BST性质。
-
Java开发中所谓“插件”实为IDE(如IntelliJ、VSCode)扩展或构建工具(Maven/Gradle)组件,JDK/JRE本身不安装插件;IntelliJ需启用Java、BytecodeDecompiler、Lombok(配注解处理)、SpringBoot插件;VSCode需安装ExtensionPackforJava并正确配置java.home;Maven/Gradle插件用于编译、测试等构建流程,配置在pom.xml或build.gradle中;版本兼容性至关重要,如SpringBoot3