-
Java继承是一把双刃剑:它提升复用与结构清晰,但易引发紧耦合、脆弱基类、语义失真和测试爆炸等问题;推荐优先使用组合+接口、策略模式等更可控的替代方案。
-
Collections工具类提供静态方法操作集合,如排序(sort)、反转(reverse)、查找(max/min/binarySearch)、替换(replaceAll)、同步(synchronizedList)和只读视图(unmodifiableList),以及填充(fill)、交换(swap)、旋转(rotate)等,所有方法直接通过类名调用,位于java.util包中,不可实例化,合理使用可简化代码、提升效率并支持线程安全与不可变集合处理。
-
Java反射无法真正修改final字段:编译期常量被内联,staticfinal字段在JDK9+模块化下不可写,非staticfinal字段虽可临时覆盖但受JIT优化和线程可见性影响,生产环境严禁使用。
-
Console类仅在真实终端有效,IDE中System.console()返回null;需判空降级;Scanner无终端限制但缓冲区易出错;Console.readPassword()是唯一安全密码输入方式。
-
hasQueuedPredecessors是公平锁的关键判据,因其在tryAcquire中严格检查当前线程是否队列最前:仅通过head和head.next判断有无前置等待者,返回false才允许CAS抢锁,精准保障先到先得。
-
ReentrantReadWriteLock的锁降级是读多写少且需强一致性的唯一可靠路径;锁升级不可行,会阻塞或抛异常。降级通过写锁未释放时获取读锁、再释放写锁实现强一致性,但须同线程、写锁重入数为1、显式释放读锁。
-
Collections.list()将Enumeration转为ArrayList,实现新旧API平滑过渡,简化代码并支持现代集合操作。
-
需继承Exception或RuntimeException,因所有异常必须是Throwable子类,且编译器强制要求;前者用于必须处理的检查型异常(如IO失败),后者用于无需强制处理的非检查型异常(如业务校验失败)。
-
答案:通过定义Student、ScoreRecord和PerformanceTrend类构建数据模型,使用ArrayList或HashMap存储并按时间排序成绩数据;采用差分法或线性回归判断趋势,利用JFreeChart可视化折线图,并支持CSV导入与异常提醒,实现轻量级学生成绩趋势分析工具。
-
Java初学者做待办清单,核心是用ArrayList<String>串起Scanner、字符串操作和类设计,实现增删查改且不崩溃;任务用“[]”“[x]”标记状态,输入数字须try-catch防异常,逻辑应拆分为addTask、listTasks、markDone等小方法并加注释。
-
Java中线程间通信最基础方式是wait()、notify()、notifyAll()配合synchronized使用,三者属Object类方法,必须在同步上下文中调用,否则抛IllegalMonitorStateException;wait()释放锁并等待,notify()唤醒一个等待线程,notifyAll()唤醒全部;需用while循环检查条件防虚假唤醒,且须确保监视器对象一致。
-
Java包装异常需封装原始Throwable为cause并补充业务消息,避免暴露敏感信息;日志和API响应中须剥离敏感字段,禁用递归序列化堆栈;ExceptionUtils可简化链式处理但不自动脱敏;异步场景需手动传入cause以保留准确堆栈。
-
jrunscript因依赖的Nashorn引擎在JDK11被弃用、JDK15彻底移除而无人使用,仅限JDK8–11且不支持ES6+、性能差、无调试;替代方案包括GraalVMContextAPI、Node.js外调或Java原生方法。
-
当在SpringDataJPA中用@Query执行原生SQL或JPQL查询并返回多列结果时,若直接使用List<Tuple>且未正确配置查询类型(如误用原生SQL但未指定nativeQuery=true),易触发IndexOutOfBoundsException;推荐改用构造器表达式返回自定义DTO或Tuple实例。
-
Java方法定义核心是“修饰符+返回类型+方法名+形参列表+方法体”,包含访问修饰符、其他修饰符、返回类型、方法名、形参列表五部分,是封装逻辑与复用代码的基本单元。