大家好我是程序员二叉。简介本文整理Java异常体系高频面试考点涵盖Error与Exception区分、常用异常、throw/throws、try-catch-finally执行逻辑、经典异常辨析等内容知识点精简易懂适合面试复习与日常学习查阅。欢迎点赞收藏关注。1. Error 和 Exception 的区别核心区别ErrorJVM 层面严重错误程序无法捕获、无法恢复出现后程序直接崩溃。Exception程序逻辑/运行时异常可捕获、可处理、可恢复是开发重点处理对象。继承关系二者均直接继承自ThrowableError包含虚拟机错误、类链接错误等Exception分为受检异常编译异常、非受检异常运行时异常2. 常见的 Error / Exception常见 Error不可处理OutOfMemoryError内存溢出StackOverflowError栈溢出NoClassDefFoundError类定义缺失NoSuchMethodError方法不存在LinkageError类链接错误常见 Exception可处理非受检异常RuntimeException无需强制捕获NullPointerException空指针异常IndexOutOfBoundsException下标越界IllegalArgumentException非法参数ClassCastException类型转换异常ArithmeticException算术异常除零等受检异常编译异常必须捕获或抛出IOExceptionIO 流异常SQLException数据库异常ClassNotFoundException类未找到FileNotFoundException文件未找到3. throw 和 throws 的区别特性throwthrows作用方法内部手动抛出异常对象方法声明上标识可能抛出的异常位置方法体内部方法签名后数量一次只能抛出一个异常可声明多个异常处理要求受检异常需上层处理受检异常必须捕获或继续向上抛出代码示例publicvoidtest()throwsIOException,NullPointerException{thrownewIOException(文件读取失败);}4. try-catch-finally 执行顺序优先执行try代码块若出现异常执行匹配的 catch代码块无论是否发生异常、是否捕获成功最后都会执行 finally口诀try → catch → finally5. finally 中的代码一定会被执行吗不一定出现以下场景不会执行执行System.exit(0)主动退出 JVM线程被强制终止、JVM 崩溃系统断电、硬件故障等物理问题正常运行环境下finally 一定会执行。6. finally 块中存在 return 语句的效果finally 中的return会覆盖 try /catch 中的返回值方法最终以 finally 里的 return 结果返回开发规范禁止在 finally 中使用 return*代码示例publicinttest(){try{return1;}finally{return2;}}// 最终返回结果27. NoClassDefFoundError 和 ClassNotFoundException 的区别异常类型所属分类产生原因典型场景ClassNotFoundException受检 Exception运行时找不到对应 class 文件Class.forName、动态加载类NoClassDefFoundErrorError编译期存在类运行时缺失类定义Jar 包丢失、版本冲突、类依赖缺失简单总结ClassNotFoundException类从头到尾没找到NoClassDefFoundError编译有运行丢了8. OutOfMemoryError StackOverflowError 成因StackOverflowError 栈溢出原因方法调用栈深度超出 JVM 栈容量限制常见场景无限递归、方法嵌套调用过深OutOfMemoryError 内存溢出 (OOM)原因JVM 堆内存耗尽无法分配新对象常见场景创建海量对象、内存泄漏、大对象持续占用内存总结速记版Error 是虚拟机级错误无法处理Exception 是业务异常可捕获处理。throw 抛异常对象throws 声明异常。try-catch-finally 顺序固定正常情况下 finally 必执行。finally 内 return 会覆盖前面返回值不建议使用。ClassNotFoundException 是找不到类文件NoClassDefFoundError 是编译存在、运行缺失。无限递归易引发栈溢出对象过多 / 内存泄漏易引发堆内存溢出。