第44.1篇Java常用工具类与异常处理速查表2026版系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第44篇jd-gui反编译class文件 |➡️ 下一篇第44.2篇Java泛型与NIO易混淆概念对比️ 本文阅读地图2 分钟速览工具类和异常处理是日常开发中使用频率最高的代码也是面试中容易被忽视的考点。本文汇总 10 组实用速查覆盖 Objects、Collections、Arrays、异常处理、序列化等所有高频场景编号速查主题一句话总结1Objects 核心方法速查null 安全三板斧equals、hashCode、toString2Collections 核心方法速查排序、反转、不可变集合、同步包装3Arrays 核心方法速查排序、二分查找、拷贝、转 List4try-with-resources 标准模板自动关闭资源AutoCloseable5自定义异常规范继承 RuntimeException 多构造方法6序列化/反序列化标准写法Serializable serialVersionUID transient7Objects 与普通方法的对比null 安全 vs 可能 NPE8Collections.unmodifiableXxx 陷阱原集合改变只读视图也跟着变9Arrays.asList 陷阱返回的是固定大小 List不能增删10异常链与异常包装保留原始异常信息文章目录第44.1篇Java常用工具类与异常处理速查表2026版️ 本文阅读地图2 分钟速览一、核心速查表二、逐组速查详解速查1Objects 核心方法速查2Collections 核心方法速查3Arrays 核心方法三、逐陷阱详解❌ 陷阱1Arrays.asList 返回固定大小 List❌ 陷阱2Collections.unmodifiableXxx 是视图❌ 陷阱3binarySearch 前未排序四、标准模板模板1try-with-resources模板2自定义异常模板3序列化/反序列化五、避坑要点六、练习题 你的学习进度 下一篇文章预告一、核心速查表本篇文章涵盖工具类与异常处理中 10 组最高频的实用速查来源于第32~35篇的全部内容篇号涉及内容数量第32篇Objects/Collections/Arrays 工具类3组第34篇序列化/反序列化1组第35篇try-with-resources、自定义异常、异常链3组行业补充工具类陷阱3组二、逐组速查详解速查1Objects 核心方法方法作用示例Objects.equals(a, b)null 安全比较Objects.equals(null, a)→ falseObjects.hashCode(obj)null 安全取哈希Objects.hashCode(null)→ 0Objects.toString(obj, default)null 安全转字符串Objects.toString(null, 默认)→ “默认”Objects.requireNonNull(obj)检查非 nullnull 时抛 NPEObjects.isNull(obj)判断是否为 nullObjects.isNull(null)→ true速查2Collections 核心方法方法作用时间复杂度Collections.sort(list)排序自然顺序O(n log n)Collections.reverse(list)反转O(n)Collections.shuffle(list)随机打乱O(n)Collections.unmodifiableList(list)返回只读视图O(1)Collections.synchronizedList(list)返回线程安全包装O(1)速查3Arrays 核心方法方法作用注意Arrays.sort(arr)排序原地修改Arrays.binarySearch(arr, key)二分查找必须先排序Arrays.copyOf(arr, newLength)拷贝并扩容返回新数组Arrays.toString(arr)转字符串适合打印调试Arrays.asList(arr)数组→List返回固定大小 List三、逐陷阱详解❌ 陷阱1Arrays.asList 返回固定大小 List// ❌ 错误ListIntegerlistArrays.asList(1,2,3);list.add(4);// UnsupportedOperationException// ✅ 正确ListIntegerlistnewArrayList(Arrays.asList(1,2,3));list.add(4);// 正常❌ 陷阱2Collections.unmodifiableXxx 是视图// ❌ 错误理解认为 unmodifiableList 是独立的ListIntegeroriginalnewArrayList(Arrays.asList(1,2,3));ListIntegerunmodCollections.unmodifiableList(original);original.add(4);// unmod 也会变// ✅ 正确不可变集合是视图原集合改变它跟着变// 需要真正不可变用 List.of()Java 9ListIntegerimmutableList.of(1,2,3);// immutable.add(4); // 抛异常❌ 陷阱3binarySearch 前未排序// ❌ 错误未排序直接二分查找int[]arr{5,3,8,1};intindexArrays.binarySearch(arr,3);// 结果不确定// ✅ 正确先排序Arrays.sort(arr);intindexArrays.binarySearch(arr,3);// 正确四、标准模板模板1try-with-resourcesimportjava.io.*;publicclassTryWithResourcesDemo{// 单个资源publicStringreadFile(Stringpath){try(BufferedReaderbrnewBufferedReader(newFileReader(path))){returnbr.readLine();}catch(IOExceptione){thrownewRuntimeException(读取失败,e);}}// 多个资源自动按声明逆序关闭publicvoidcopyFile(Stringsrc,Stringdest){try(InputStreaminnewFileInputStream(src);OutputStreamoutnewFileOutputStream(dest)){byte[]bufnewbyte[8192];intlen;while((lenin.read(buf))!-1){out.write(buf,0,len);}}catch(IOExceptione){thrownewRuntimeException(拷贝失败,e);}}}模板2自定义异常// 运行时异常推荐publicclassBusinessExceptionextendsRuntimeException{privatefinalStringerrorCode;publicBusinessException(Stringmessage){super(message);this.errorCodenull;}publicBusinessException(Stringmessage,StringerrorCode){super(message);this.errorCodeerrorCode;}publicBusinessException(Stringmessage,Throwablecause){super(message,cause);this.errorCodenull;}publicBusinessException(Stringmessage,StringerrorCode,Throwablecause){super(message,cause);this.errorCodeerrorCode;}publicStringgetErrorCode(){returnerrorCode;}}模板3序列化/反序列化importjava.io.*;publicclassSerializationDemo{// 序列化publicstaticvoidserialize(Objectobj,Stringpath)throwsIOException{try(ObjectOutputStreamoosnewObjectOutputStream(newFileOutputStream(path))){oos.writeObject(obj);}}// 反序列化publicstaticObjectdeserialize(Stringpath)throwsIOException,ClassNotFoundException{try(ObjectInputStreamoisnewObjectInputStream(newFileInputStream(path))){returnois.readObject();}}}五、避坑要点陷阱后果正确做法Arrays.asList增删UnsupportedOperationException用new ArrayList(Arrays.asList())binarySearch前未排序结果错误先Arrays.sort()unmodifiableList是视图原集合变它跟着变用List.of()不可变集合自定义异常不继承 RuntimeException调用者被迫处理继承 RuntimeException序列化没有 serialVersionUID类修改后反序列化失败显式定义 serialVersionUID异常只打 e.getMessage()丢失堆栈用log.error(msg, e)六、练习题代码题Arrays.asList(1, 2, 3).add(4)会怎样为什么改错题下面的代码有什么问题int[]arr{5,3,8,1};intindexArrays.binarySearch(arr,3);场景题一个方法需要返回不可变列表但原列表可能被其他地方修改。如何实现真正的不可变 你的学习进度当前第44.1篇 ·基础篇外挂工具类与异常处理速查表✅ 已完成基础篇第1~44篇 第4.1篇 第20.1~20.4篇 第31.2篇 第44.1篇 正在学第44.1篇⏳ 待学习第44.2篇 第45~108篇进阶篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 下一篇文章预告下一篇《第44.2篇Java泛型与NIO易混淆概念对比》内容简介泛型类 vs 泛型方法、T vs ?、PECS 原则、BIO vs NIO vs AIO。《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送