-
数组与集合转换需注意类型和可变性:Arrays.asList()将数组转为固定大小List,不支持增删;基本类型数组需通过Stream转换;集合转数组推荐使用带参数的toArray(T[])避免类型错误。
-
本文讲解如何在Java中通过if-else或算术运算,将个体鸡蛋数量(如15个)智能拆分为“整打数+剩余单个数”,并基于不同单价(整打$1.00、单个$0.10)实现无误差总价计算。
-
StringJoiner类用于灵活拼接字符串,支持自定义分隔符、前缀和后缀。1.创建时指定分隔符、前缀和后缀,如newStringJoiner(",","[","]");2.使用add()方法添加元素,支持链式调用;3.未添加元素时默认返回前缀+后缀,可通过setEmptyValue()设置空值输出;4.可与Stream结合,通过Collectors.joining()实现流式拼接,底层基于StringJoiner,语义清晰,适用于构建JSON、SQL等格式化字符串。
-
DecimalFormat.format()不显示两位小数是因为模式中使用了“#”而非“0”、setMinimumFractionDigits()被错误设置,或double精度问题未预先舍入;正确做法是用"0.00"模式、避免干扰设置,并用BigDecimal或Math.round预处理数值。
-
ImageIO.read()返回已解码的BufferedImage,直接调用getWidth()/getHeight()获取真实像素宽高;需判空防NPE,因损坏文件、不支持格式等会导致返回null。
-
Thread.stop()被弃用是因为它强行注入ThreadDeath异常,破坏锁状态与对象一致性,导致中间态暴露和逻辑损坏;安全停止应依赖volatile标志与interrupt()协作退出。
-
条件性必填应使用逻辑表达式而非if判断:!phone||(phone&&isCodeFilled(code)),确保短路求值、可扩展;校验函数须返回布尔值,避免非布尔值导致静默失败;前后端规则必须严格一致。
-
CopyOnWriteArrayList遍历时不用加锁因其迭代器基于底层数组的不可变快照,写操作通过原子替换引用更新数组,读写互不阻塞;但写操作本身使用ReentrantLock,仅读操作无锁。
-
VerifyError是JVM在类加载连接阶段强制校验字节码失败时抛出的致命错误,发生在ClassLoader.defineClass()阶段,因类型不匹配、栈不平衡等违反JVM规范的问题导致,属不可恢复的Error而非Exception。
-
Object.notifyAll()必须在synchronized(obj)块内调用,否则抛IllegalMonitorStateException;需配合while循环重检条件以防虚假唤醒和信号丢失;多条件场景应改用Condition而非Object。
-
Java中类使用class定义,首字母大写,包含属性和方法;2.成员变量封装数据,构造方法初始化对象;3.方法包括普通成员方法和静态方法,前者通过对象调用,后者通过类名直接调用;4.使用getter/setter实现数据封装,建议字段私有化以增强安全性。
-
要配置JavaFX开发环境,需手动下载并引入JavaFXSDK。从JDK11起,JavaFX不再内置,需访问Gluon官网下载对应系统的SDK并解压。在IntelliJIDEA中创建Java项目后,通过ProjectStructure添加JavaFX的lib目录为库依赖,并在运行配置中设置VM选项:--module-path和--add-modules指定路径与模块。推荐使用Maven或Gradle自动管理依赖,如Maven添加org.openjfx:javafx-controls和javafx-fxml
-
JRE是运行Java程序的最小环境,含JVM、类库和部署技术;JDK包含JRE及开发工具;Java11起Oracle停供独立JRE,推荐用JDK裁剪运行时。
-
putIfAbsent能避免竞态,因其是单次CAS操作,而非containsKey+put的两次独立操作;它仅对单key生效,不保证value构造无副作用,大开销场景应改用computeIfAbsent。
-
DoubleAdder不支持统计桶,需封装数组或Map持有多个实例;推荐预设固定大小的DoubleAdder[]数组,避免动态扩容和哈希开销;写入须线程局部路由,读取宜批量调用sum()并注意精度与清理。