error和exception均为throwable直接子类,但error表示jvm级不可恢复的严重错误(如outofmemoryerror),不应捕获;exception表示程序可处理的异常,分必须处理的检查型(如ioexception)和可选处理的非检查型(如nullpointerexception)。

定位不同:一个归 JVM 管,一个归程序员管
Exception 是为应用程序逻辑服务的——它代表程序运行中**可预期、可干预、可恢复**的问题。比如文件找不到、网络超时、数组越界,这些都可以通过补救措施(重试、提示用户、换路径)让程序继续跑下去。
Error 是 JVM 自己抛出来的“求救信号”——它表示底层环境已严重失常,比如堆内存彻底耗尽(OutOfMemoryError)、调用栈压爆(StackOverflowError)、类加载器崩溃(NoClassDefFoundError)。此时 JVM 本身都快扛不住了,代码再怎么 try-catch 也无力回天。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
是否强制处理:编译器只盯 Exception,不管 Error
- 受检异常(Checked Exception,如 IOException)必须显式处理:要么 try-catch,要么 throws 声明,否则编译失败
- 非受检异常(Unchecked Exception,即 RuntimeException 及其子类)编译器不强制,但建议修复逻辑缺陷
- Error 全部是非受检的,编译器完全不管;即使你写
catch(Error e),也不解决根本问题,还可能掩盖真实故障
能否合理恢复:Exception 可恢复,Error 基本不可恢复
捕获 NullPointerException 后,你可以判空再执行;捕获 SQLException 后,可以切换数据源或降级返回。这些都是有意义的恢复动作。
但捕获 OutOfMemoryError 后,你几乎无法分配新对象;捕获 StackOverflowError 后,连方法调用栈都满了——此时任何业务逻辑都难以执行。所谓“处理”,其实是日志记录 + 快速退出,给运维留线索,而不是靠代码续命。
典型子类举例:一眼识别归属
- Exception 常见子类:IOException、SQLException、ClassNotFoundException、IllegalArgumentException、NullPointerException、ArrayIndexOutOfBoundsException
- Error 常见子类:OutOfMemoryError、StackOverflowError、NoClassDefFoundError、LinkageError、VirtualMachineError
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










