异常的分类
Java异常是程序运行时出现的非正常情况,合理处理异常能提升程序健壮性。Java异常体系以Throwable为顶层父类,主要分为两大类,各有明确特性与应用场景。
一、受检异常(Checked Exception)
受检异常继承自Exception类(除RuntimeException及其子类外),编译时必须处理,否则无法通过编译。这类异常通常由外部环境或用户操作引发,程序员可预见并处理。常见类型包括IOException(文件读写异常)、SQLException(数据库操作异常)、ClassNotFoundException(类加载异常)等。例如,读取文件时需捕获FileNotFoundException,避免文件不存在导致程序崩溃。处理方式有两种:一是用try-catch块捕获并处理,二是在方法声明处用throws关键字抛出,交由上层调用者处理。受检异常强制程序员重视潜在风险,规范代码编写。
二、非受检异常(Unchecked Exception)
非受检异常继承自RuntimeException,编译时无需处理,多由程序逻辑错误导致。常见类型有NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组下标越界)、ClassCastException(类型转换异常)、ArithmeticException(算术异常)等。这类异常通常是程序员编码疏忽造成,比如调用空对象的方法、数组访问超出范围等。虽然编译时不强制处理,但实际开发中需通过规范逻辑(如判空、参数校验)主动规避,必要时也可捕获处理,提升用户体验。
三、错误(Error)
错误继承自Error类,属于系统级异常,表示程序无法恢复的严重错误,如OutOfMemoryError(内存溢出)、StackOverflowError(栈溢出)等。这类异常由JVM抛出,程序员无法通过代码处理,通常是硬件资源不足或虚拟机故障导致,需通过优化程序或调整系统配置解决。
Java异常分类清晰划分了不同异常的责任边界:受检异常强调“必须处理”,应对可预见的外部问题;非受检异常提醒“规范逻辑”,减少编码错误;错误则警示“系统风险”,需从架构层面规避。合理运用异常分类,能让程序更稳定、易维护,是Java开发的核心技能之一。
