本篇文章主要介绍了
- Java 中的异常
- 如何处理函数抛出的异常
- 处理异常的原则
- 异常处理时,性能开销大的地方
-
Java 语言在设计之初就提供了相对完善的异常处理机制。
我们首先介绍一下 Java 中的异常。
-
介绍 Java 中的异常
异常是程序在运行过程中出现的程序异常事件,异常会中断正在执行的正常指令流 。
Java 中的异常分为两大类:Exception 和 Error。
-
下面是 Exception 和 Error 的类定义
public class Exception extends Throwable {} public class Error extends Throwable {}
Exception 和 Error 都继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者被捕获(catch)。
Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。
下面我们逐一介绍 Error 和 Exception。
介绍 Error
Error 类对象一般是由虚拟机生成并抛出,绝大部分的 Error 都会导致虚拟机自身处于不可恢复的状态,是程序无法控制和处理的。当出现 Error 时,一般会选择终止线程。
Error 中最常见的是虚拟机运行错误(VirtualMachineError 抽象类)。
虚拟机运行错误中最常见的有:
- 内存溢出(OutOfMemoryError):由于内存不足,虚拟机没有可分配的内存了,垃圾回收器也不能释放更多的内存,那么虚拟机抛出 OutOfMemoryError
- 栈溢出(StackOverflowError):如果一个线程已用的栈大小 超过 配置的允许最大的栈大小,那么虚拟机抛出 StackOverflowError
介绍 Exception
Exception 有两种类型「编译时异常」和「运行时异常」
- 「编译时异常」对应 Java 的 Exception 类
- 「运行时异常」对应 Java 的 RuntimeException 类(RuntimeException 类继承 Exception 类 )
下面是 Exception、RuntimeException 类的定义
public class Except