-
差分数组是静态预处理+延迟还原的区间操作技术,通过O(1)单点标记实现高频档期变更的常数级更新,避免逐日遍历与重复计算,适用于区间加减型操作,不支持单点赋值、非线性运算或实时中间态查询。
-
Java泛型运行时被擦除,但类定义中的类型变量可通过getTypeParameters()获取;继承关系中父类实参需用getGenericSuperclass()解析;字段泛型需结合继承链映射具体类型,实例getClass()无法获取泛型信息。
-
优先使用组合而非继承,因组合支持运行时替换、降低耦合、符合单一职责;继承仅在满足“是”关系且父类明确设计为可继承时才安全。
-
Checkstyle插件不生效主因是模块未绑定、实时扫描未启用或版本不匹配;需确认Java语言级别、用绝对路径、重载配置、降级至8.36适配P3C,并统一各组件版本。
-
Java不支持直接将“带参方法调用”字符串化后动态存入变量并统一调用,但可通过函数式接口(如Supplier、Function等)配合Lambda实现类型安全、简洁且零反射的延迟调用封装。
-
Java枚举天然具备序列化安全与单例语义,JVM在序列化时仅保存名称和类信息,反序列化时通过Enum.valueOf直接返回已有常量,绕过构造器且禁止反射创建新实例。
-
BigDecimal保留小数位必须显式指定RoundingMode,否则除法或setScale会抛ArithmeticException;常用HALF_UP(展示)、HALF_EVEN(金融)、UP/CEILING(计费)、DOWN/FLOOR(截断)。
-
Java中成员变量不参与多态,编译和运行时均依据引用类型(左边声明类型)访问字段,而非实际对象类型;方法才通过虚方法表实现动态绑定。
-
InvocationTargetException是Java反射调用中封装实际异常的包装类,其真实异常可通过getTargetException()获取。当方法抛出异常时,Java会将其封装在InvocationTargetException中,需通过e.getTargetException()提取原始异常并处理,例如判断类型或打印堆栈信息。若存在嵌套反射调用导致多层包装,可编写工具方法unwrap()递归提取最内层异常。处理建议包括始终捕获InvocationTargetException、避免忽略该异
-
调用start()才算真正启动线程;thread.run()只是普通方法调用,不创建新线程。start()是native方法,触发JVM调用操作系统创建独立执行流;run()在当前线程同步执行,无并发性。
-
对象初始化按内存分配、字段默认初始化、显式初始化和构造方法执行的顺序进行,确保实例状态正确;通过new创建对象后,使用对象名.方法名调用实例方法,支持多态;合理设计构造方法可提升安全性与代码复用,避免在构造器中调用可重写方法;静态方法通过类名调用,不依赖实例;推荐先初始化再调用,结合构造器或初始化块处理共用逻辑,保证程序稳定。
-
增强for循环无法修改ArrayList元素值或结构。因其获取的是元素副本引用,对循环变量赋值不影响原集合;修改对象内部状态(如StringBuilder.append)有效,但替换引用无效;结构性修改需用Iterator.remove()或倒序for循环。
-
System.console()在IDE中返回null是因缺乏底层TTY支持,仅在系统终端运行jar时有效;readPassword()返回char[]为安全设计,需手动清零;Windows中文路径会导致编码问题;多环境部署应放弃该API,改用适配方案。
-
线程池任务异常需特殊处理否则静默消失,可通过任务内try-catch、重写afterExecute、设置UncaughtExceptionHandler或使用Callable+Future捕获,建议内部处理结合全局兜底。
-
package声明必须在文件最顶行,否则javac直接报错Java编译器对package的位置极其严格:它必须是源文件中第一个非注释、非空行。一旦前面有import、类定义、甚至一行带空格的注释,javac就会抛出class,interface,orenumexpected或更隐晦的packagenotfound错误。常见踩坑点:IDE自动生成的licenseheader注释没删,导致package不是首行用IDE快捷键移动类时,把packa