2026-10-23 11:31:16
在Java中,异常与错误的核心区别如下:
1. 异常(Exception)
继承自Throwable,分为运行时异常(RuntimeException及其子类)和非运行时异常(编译时异常)。
运行时异常(如NullPointerException、ArrayIndexOutOfBoundsException)由程序逻辑错误引发,编译器不强制处理,但建议通过逻辑优化避免。
非运行时异常(如IOException、SQLException)必须在编译时通过try-catch或throws处理,否则无法通过编译。
2. 错误(Error)
继承自Throwable,但与Exception不同,错误不可恢复(如OutOfMemoryError、NoClassDefFoundError)。
由JVM或外部环境导致(如内存耗尽、虚拟机崩溃),而非代码逻辑错误。
无需处理:即使捕获,通常也无法有效解决,程序应终止或依赖外部干预(如重启JVM)。
VirtualMachineError:JVM内部故障。
LinkageError:类加载或链接失败(如版本冲突)。
关键总结
学习建议:深入理解异常链(Throwable.getCause())和自定义异常的最佳实践,可参考《Java核心技术》或Oracle官方文档。