1.异常的分类
Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。
- 错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。
- 异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。
Java异常层次结构图如下图所示:
为了方便对于这些可传递对象的管理,Java API中专门设计了java.lang.Throwable类,只有该类子类的对象才可以在系统的异常传递体系中进行。该类的两个子类分别是:
1)Error类
该类代表错误,指程序无法恢复的异常情况。对于所有错误类型以及其子类,都不要求程序进行处理。常见的Error类例如内存溢出StackOverflowError等。
2)Exception类
该类代表异常,指程序有可能恢复的异常情况。该类就是整个Java语言异常类体系中的父类。使用该类,可以代表所有异常的情况。 在Java API中,声明了几百个Exception的子类分别来代表各种各样的常见异常情况,这些类根据需要代表的情况位于不同的包中,这些类的类名均以 Exception作为类名的后缀。如果遇到的异常情况,Java API中没有对应的异常类进行代表,也可以声明新的异常类来代表特定的情况。在这些异常类中,根据是否是程序自身导致的异常,将所有的异常类分为两种:
a) RuntimeException及其所有子类
该类异常属于程序运行时异常,也就是由于程序自身的问题导致产生的异常,例如数组下标越界异常ArrayIndexOutOfBoundsException等。 该类异常在语法上不强制程序员必须处理,即使不处理这样的异常也不会出现语法错误。
b) 其它Exception子类
该类异常属于程序外部的问题引起的异常,也就是由于程序运行时某些外部问题导致产生的异常,例如文件不存在异常FileNotFoundException等。该类异常在语法上强制程序员必须进行处理,如果不进行处理则会出现语法错误。
2、常见的error类
异常类名 | 用途 |
LinkageError | 动态链接失败 |
VirtualMachineError | 虚拟机错误 |
AWTError | AWT错误 |
3、常见运行时异常类
异常类名 | 用途 |
ArithmeticException | 数学运算异常,比如除数为零的异常 |
IndexOutOfBoundsException | 下标越界异常,比如集合、数组等 |
ArrayIndexOutOfBoundsException | 访问数组元素的下标越界异常 |
StringIndexOutOfBoundsException | 字符串下标越界异常 |
ClassCaseException | 类强制转换异常 |
NullpointerException | 当程序试图访问一个空数组中的元素,或访问一个空对象中的方法或变量时产生的异常。 |
4、常用的非运行时异常
异常类名 | 用途 |
ClassNotFoundException | 指定类或接口不存在的异常 |
IllegalAccessException | 非法访问异常 |
Ioexception | 输入输出异常 |
FileNotFoundException | 找不到指定文件的异常 |
ProtocolException | 网络协议异常 |
SocketException | Socket操作异常 |
MalformedURLException | 统一资源定位符(URL)的格式不正确的异常 |