Java中的异常(Exception)是程序执行期间发生的事件,它中断正常指令流,用于处理运行时的错误或意外情况。
异常产生的原因
Java中的异常主要分为三类:
- Java内部错误:由Java虚拟机(JVM)产生,例如系统资源耗尽或虚拟机内部故障。这类异常通常无法恢复,程序需终止或依赖系统处理。
- 程序代码错误:由未检查异常(Unchecked Exception)引发,如空指针异常(NullPointerException)、数组越界异常(IndexOutOfBoundsException)等。这类异常源于程序逻辑错误,需通过代码修正或集中处理避免。
- 手动抛出异常:通过throw语句主动生成检查异常(Checked Exception),用于向调用者传递必要信息,例如文件未找到(FileNotFoundException)。这类异常需在方法签名中声明或捕获。
异常处理机制
Java采用面向对象的方式处理异常:
- 抛出异常:当方法内发生异常时,会创建异常对象并提交给运行时系统。
- 捕获异常:运行时系统沿方法调用栈查找匹配的catch块,若找到则执行处理逻辑,否则终止程序。
- 处理原则:
使用try-catch块捕获当前方法的异常。
方法覆盖时,子类方法抛出的异常必须是父类异常的子集或相同类型。
异常处理应专注于错误恢复,而非控制正常流程。
异常类型层次结构
所有异常类继承自java.lang.Throwable,分为两大分支:
- Error:表示严重系统错误(如堆栈溢出),通常无需捕获,程序无法恢复。
- Exception:用户程序可能遇到的异常,进一步分为:
运行时异常(Unchecked Exception):继承自RuntimeException,如NullPointerException。程序可选择处理,但应通过逻辑优化避免。
非运行时异常(Checked Exception):如IOException,必须在编译时处理(捕获或声明抛出),否则无法通过编译。
常见异常类型
- NullPointerException:访问空对象成员时触发。
- IndexOutOfBoundsException:数组或集合索引越界。
- IOException:输入输出操作失败(如文件未找到)。
- ClassNotFoundException:类加载失败。
总结:Java异常机制通过强制处理检查异常和灵活处理未检查异常,增强了程序的健壮性。开发者需合理设计异常处理逻辑,区分错误类型,并优先通过代码优化减少异常发生。