-
Java强制代码写在类里是因OOP契约要求所有功能必须归属明确身份,如User类封装字段与方法;继承重在is-a关系而非复用;多态通过统一接口消除if-else分支;封装虽提升内聚却增加修改风险。
-
while是先判断后执行的循环结构,条件为true时重复执行循环体;需在外部初始化并体内更新循环变量,否则易死循环。
-
Java代码块是用{}括起的独立逻辑段,静态代码块(static{})随类加载执行一次,实例代码块({})每次创建对象时执行且优先于构造方法;执行顺序为父类静态→子类静态→父类实例→父类构造→子类实例→子类构造。
-
Arrays.binarySearch搜不到明明存在的元素是因为它仅对已排序数组有效;未排序或降序数组(未配对应Comparator)会导致结果不可靠,返回负数表示插入点编码而非简单“未找到”。
-
macOS13+需JDK11以上,推荐JDK17/21;安装后用/usr/libexec/java_home动态设置JAVA_HOME,并为IDE手动指定JDK路径,避免环境变量未加载问题。
-
Collections.sort()可直接对实现Comparable的Student对象排序,需在compareTo()中处理分数相等时的二级比较(如学号升序),并用Integer.compare避免溢出;多条件动态排序推荐用Comparator.comparing链式调用,支持reversed()和thenComparing(),null值需用nullsLast处理;排名序号需按实际并列逻辑计算,不可仅依赖索引。
-
ArrayList随机访问为O(1),LinkedList为O(n),因前者基于数组后者为链表;频繁索引遍历时ArrayList快3–10倍;仅头部/中间高频增删且无随机访问需求时才选LinkedList。
-
必须用logger.error(String,Throwable)传异常对象,否则丢失堆栈;日志配置需含%ex或%xEx才输出堆栈;资源关闭异常不可吞没;ERROR仅用于影响稳定性的异常,校验类失败用WARN。
-
Java插件化必须用接口而非抽象类,因类加载器隔离下抽象类易引发NoClassDefFoundError,而接口仅约定签名、跨loader安全;宿主应提供纯接口jar,插件编译依赖但运行时由宿主加载;动态加载需设宿主类加载器为parent并正确管理上下文类加载器;实例化时接口必须由宿主加载,否则强转将触发ClassCastException;卸载本质是丢弃ClassLoader引用并确保无残留引用,否则导致内存泄漏。
-
不推荐用异常控制正常流程,因性能开销大、降低可读性与可维护性、干扰错误诊断;应改用if-else判断、预检或工具类方法。
-
ConcurrentHashMap迭代器不抛ConcurrentModificationException,因其采用弱一致性快照遍历而非modCount检测;forEach是并行分段扫描,iterator是单线程弱一致遍历;需原子复合操作时应手动分段扫描或用原子方法。
-
本文介绍在MapStruct中避免使用@AfterMapping,转而通过expression调用带完整上下文的自定义方法,实现基于多个源字段(如source.pac.temperature和source.range)动态计算目标字段(如containerId)的优雅映射方案。
-
商品类必须实现Comparable接口或提供Comparator,价格字段必须用BigDecimal,多条件排序用Comparator.comparing()链式调用,TreeSet去重需谨慎以防误删同价不同品商品。
-
Java开发无需单独为Java安装Git,只需在系统中安装Git并配置PATH和IDE路径;下载安装Git后验证git--version,配置user.name和user.email,再在IDE中指定Git可执行文件路径即可正常使用。
-
Windows下Java开发环境配置关键在于正确安装JDK(推荐EclipseTemurinJDK17/21)、手动设置JAVA_HOME指向JDK根目录、PATH中添加%JAVA_HOME%\bin并清除旧路径,最后通过java-version、javac-version和HelloWorld编译运行验证。