-
增强for循环用于简洁遍历数组或Iterable集合,隐藏索引与迭代器细节;但不可修改集合结构、无法获取索引,适用于只读遍历场景。351 收藏 -
继承适用于is-a关系,如Animal派生Dog;组合适用于has-a关系,如Car包含Engine。优先使用组合,避免过度继承导致耦合,提升可维护性与扩展性。351 收藏 -
接口更适合解耦,因其仅声明行为契约、无状态和实现细节,避免抽象类隐式引入共用字段或模板方法导致的高耦合;支持多实现、Spring自动装配更安全,且利于测试与替换。351 收藏 -
统一Java开发环境的核心是建立可复现、可协作、可交付的一致性基础,关键在于通过JDK版本锁定、项目级构建配置、IDE配置版本化及容器化初始化,确保任何人拉代码即可编译运行且行为一致。351 收藏 -
纯Java播放OGG音频必须依赖JOrbis或VorbisSPI等第三方库,因JDK直到Java21仍不支持Vorbis解码;JOrbis轻量仅解码,VorbisSPI封装为AudioSystemSPI但需注意依赖管理和Java9+模块化适配。351 收藏 -
该用ForkJoinPool时是处理可递归拆分的纯CPU计算任务,如归并排序、数组求和;它通过工作窃取提升多核利用率,但不适用于I/O或阻塞操作,且需合理设置阈值与并行度。351 收藏 -
JavaAgent的premain不执行主因是JVM未正确加载代理,需通过-javaagent指定jar路径且MANIFEST.MF中声明Premain-Class;-javaagent必须置于java命令最前,MANIFEST文件不能含BOM或多余空行。351 收藏 -
Java数组下标越界时JVM直接抛出ArrayIndexOutOfBoundsException,因索引5超出长度为5数组的合法范围[0,4];该异常是运行时异常,编译通过但执行即崩溃。351 收藏 -
Collections.sort()可用于List的自然排序与自定义排序,支持Comparable对象的默认排序及Comparator指定规则,如按长度、属性排序,并可通过reverseOrder()实现逆序,方法修改原列表且需注意空值与溢出问题。351 收藏 -
static修饰的成员属于类而非实例,包括静态变量(所有对象共享)、静态方法(只能访问静态成员)、静态代码块(类加载时执行一次)和静态内部类(不依赖外部类实例)。350 收藏 -
Class.forName()默认初始化类(执行static块),ClassLoader.loadClass()默认不初始化;Proxy要求接口因代理类已固定继承Proxy且Java不支持多重继承;CGLIB报错多因版本冲突或非必要使用。350 收藏 -
自定义RuntimeException可明确表达业务错误,避免通用异常丢失上下文,如库存不足时抛出带商品信息的异常,提升代码可读性与系统健壮性。350 收藏 -
throw用于方法体内主动抛出异常对象,throws用于方法签名声明可能抛出的异常类型;二者分工明确,常配合使用:底层用throw抛出异常,上层用throws声明并向上传递。350 收藏 -
Executor框架通过解耦任务提交与执行提升并发性能,其核心为线程池机制;Java提供Executors工厂类创建不同类型的线程池,底层基于ThreadPoolExecutor实现;推荐直接使用ThreadPoolExecutor构造函数以精确控制核心线程数、最大线程数、存活时间及任务队列等参数;任务调度遵循优先级:先创建核心线程,再入队,队满则创建非核心线程,最终触发拒绝策略;常见拒绝策略包括AbortPolicy、CallerRunsPolicy和DiscardPolicy;CPU密集型任务建议线程350 收藏 -
Java的复合赋值运算符(如+=)在执行时会自动插入窄化转换(narrowingcast),而普通赋值配合+运算符则不会,因此编译器对二者施加的类型检查规则不同。350 收藏