-
ArrayList.add()触发扩容是因为size等于elementData.length时调用grow(),首次add分配10容量,后续按1.5倍且不低于最小需求扩容,依赖延迟初始化与System.arraycopy优化。
-
Future不触发get()的常见原因有三:线程池已关闭导致任务被拒绝;CachedThreadPool中快速任务被误判为未执行;Runnable提交后get()恒返回null。
-
在Java8+中,单次拼接推荐用+(编译器优化为StringBuilder),concat()仅适合小字符串;循环拼接必须用StringBuilder;split()默认丢弃末尾空串,需传-1保留;replace()用于字面量替换,replaceAll()和replaceFirst()走正则;substring()在JDK7u6+已修复内存泄漏,但大字符串截取仍需谨慎。
-
遍历ArrayList时调用remove()会抛ConcurrentModificationException,因其迭代器为fail-fast机制,通过modCount检测非迭代器途径的结构性修改。
-
应优先用List.copyOf确保底层数据彻底不可变,它复制新列表并返回JDK10+内置不可变实现;Collections.unmodifiableList仅包装视图,原始列表变更会影响视图。
-
EnumMap的get/put是O(1)且无哈希开销,因其直接用枚举ordinal()作数组下标访问内部values数组,省去HashMap全套哈希计算与结构维护流程。
-
Java源文件必须满足:最多一个public类且文件名严格匹配;package声明须在最顶部;import紧随其后;可含多个非public顶层类。
-
首先确保JDK已安装并正确配置JAVA_HOME环境变量,接着在Eclipse中添加JDK路径;其次选用EclipseJava开发版或手动安装JDT等插件;然后通过新建JavaProject或添加JavaNature启用Java支持;最后可选安装M2E、Buildship、SpringTools等插件提升效率。
-
向上转型是父类引用指向子类对象,编译期按父类类型检查,运行期动态绑定方法调用;字段访问无多态性,子类特有方法不可见,需向下转型并校验类型。
-
Java中控制循环结束的核心是设计清晰的退出路径。需确保条件表达式随循环体操作动态变化,变量在循环内被修改,避免无限循环;推荐条件直白、集合操作谨慎。
-
配置Java多版本共存需设置JAVA_HOME和PATH变量,安装多个JDK后,通过修改JAVA_HOME指向不同版本并重启终端即可切换。
-
本文介绍如何在Spring应用启动阶段,通过BeanFactoryPostProcessor或InitializingBean实现对配置文件中引用的Bean名称是否存在于预定义枚举中的自动化校验,避免运行时因Bean不存在导致的NoSuchBeanDefinitionException。
-
Files.walkTree为什么总抛出AccessDeniedException因为Files.walkTree默认不处理权限拒绝,遇到无读权限的子目录或文件直接中断遍历。这不是bug,是设计使然——它把错误当作“遍历失败”而非“跳过继续”。必须传入自定义FileVisitor实现,在visitFileFailed方法里显式返回FileVisitResult.CONTINUE别用SimpleFileVisitor的默认实现,它的visitFileFailed直接抛异常
-
tryTransfer是TransferQueue的核心能力,主动发起同步传输而非入队;它仅在有线程正阻塞于take时立即传递并返回true,否则返回false且不入队、不阻塞。
-
Java反射是JVM提供的标准API,用于运行时动态操作类信息,但性能差、破坏封装且易出错,应优先用接口、工厂、注解处理器等替代方案。