够用但仅限单机玩具级场景;需用BigDecimal防精度丢失、重写toString便于调试、选JSON而非ObjectOutputStream持久化、HSQLDB比MySQL更适配轻量需求。
用 ArrayList 存交易记录够不够用?
够,但只适合单机、无持久化、不关心历史回溯的玩具级记账。每次重启程序,所有数据就清空。如果你只是想练手对象建模或理解 Account、Transaction 类怎么设计,ArrayList 是最轻量的起点。
注意别把金额用 float 或 double 存——会出现 0.1 + 0.2 != 0.3 这类问题。一律用 BigDecimal,哪怕多写几行 new BigDecimal("12.50")。
常见错误:直接用 System.out.println(list) 查数据,结果看到一串 Transaction@1a2b3c。记得重写 toString() 方法,否则调试时根本看不出哪笔是支出、哪笔是餐饮。
想保存数据到文件,该选 ObjectOutputStream 还是 JSON?
选 JSON(比如用 com.fasterxml.jackson.databind.ObjectMapper)。ObjectOutputStream 生成的是 Java 专属二进制,换 JDK 版本或改个字段类型就可能反序列化失败,而且没法用文本编辑器打开检查数据是否写对了。
立即学习“Java免费学习笔记(深入)”;
用 Jackson 更稳妥:
-
ObjectMapper默认不序列化null字段,避免配置项干扰 - 加
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")能统一时间格式 - 文件损坏时,JSON 至少能肉眼看出哪一行出错;而
.ser文件坏了一字节,整个读取就抛StreamCorruptedException
示例写法:
mapper.writeValue(new File("records.json"), transactionList);