-
封装保护数据,通过私有字段和公共方法控制访问,如User类隐藏password并校验密码强度;继承实现代码复用,通过Order基类派生不同订单类型,提升扩展性;多态支持接口统一、行为各异,支付模块通过PaymentService接口实现多种支付方式,新增无需修改原有逻辑。
-
不可变对象是创建后内部状态无法修改的对象,其核心要求包括类为final、字段privatefinal、无setter方法、对可变组件做防御性拷贝,并合理实现equals/hashCode;String通过privatefinalchar[]和全量新建操作实现不可变性;它在并发中无需同步、无副作用、适合缓存与函数式编程;常见误区有final引用不等于不可变对象、不可变类放入可变容器仍不安全、防御性拷贝需权衡性能。
-
在Quarkus自定义扩展中,若需根据构建时属性(如myProperty=true)条件性注册Bean,仅对@IfBuildProperty注解生效的前提是:这些Bean必须被CDI容器识别为可扫描的候选组件——最简方案是在运行时模块的src/main/resources/META-INF/下添加空的beans.xml文件。
-
Java中唯一安全的线程停止方式是协作式中断:通过interrupt()设置中断标志,线程在循环条件、阻塞方法或计算密集型任务的检查点主动检测isInterrupted()或处理InterruptedException并退出。
-
FileLock是Java中基于操作系统实现的进程级文件锁,用于多进程间协调文件访问,分为排他锁和共享锁,需通过FileChannel获取,属建议性锁且不保证JVM内线程安全。
-
数字字典应用是检验Scanner、HashMap、异常处理和基础IO掌握程度的分水岭;须用HashMap<String,String>存词条,注意大小写、空值处理、nextLine()吃回车问题,文件读写需UTF-8编码与健壮异常处理。
-
Java对象协作有三种方式:一是直接方法调用,依赖引用传递与访问权限;二是通过接口解耦,实现依赖抽象而非具体类;三是利用函数式接口回调,支持异步通知与轻量协作;需警惕static工具类导致的隐式协作问题。
-
ScheduledExecutorService是Java中用于定时或周期性任务调度的高效工具,支持线程池管理。通过Executors.newScheduledThreadPool创建实例,提供三种调度方法:schedule用于延迟执行一次;scheduleAtFixedRate以固定频率重复执行,基于开始时间计算间隔,可能产生任务重叠;scheduleWithFixedDelay则在前一个任务完成后等待指定延迟再执行,适用于执行时间不确定的场景。正确关闭需调用shutdown()并配合awaitTerm
-
不能。JVM不自动检测或解除死锁,ThreadMXBean.findDeadlockedThreads()仅诊断并返回死锁线程ID列表,不终止线程;需人工干预或预防,且仅检测synchronized锁,不覆盖ReentrantLock等显式锁。
-
throw用于方法内抛出异常实例,throws用于方法声明处声明可能抛出的异常类型,二者分别表示异常的抛出动作与异常的预先声明。
-
字符串拼接有多种方式:简单场景用+,循环中推荐StringBuilder,线程安全选StringBuffer,集合拼接用String.join或Collectors.joining,格式化用String.format或.formatted,Stream场景用joining收集器。
-
根本异常是引发异常链的最底层异常,通过Exception.getCause()可获取其对象,用于追溯问题源头。
-
ArrayDeque做栈比Stack快,因Stack继承Vector有同步开销,而ArrayDeque是非线程安全、数组实现、无锁的;用push/pop/peek,初始化容量建议设为2的幂。
-
本文详解在JSR-352批处理作业中通过Batchlet执行JPA删除语句失败的根本原因,并提供基于JDBC的可靠替代方案,包括事务控制、资源管理及生产级注意事项。
-
synchronizedMap通过同步方法实现线程安全,但遍历时需手动加锁,适用于读多写少低并发场景,性能不如ConcurrentHashMap。