1.1异常概念
异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导 致的。在Java等面向对象的编程语言中异常属于对象。
异常(Exception)都是运行时的。编译时产生的不是异常,而是错误(Error)。
最开始大家都将程序设计导致的错误(Error)不属于异常(Exception)。
所有的异常都是由 Throwable 继承而来,但在下一层立即分解为两个分 支:Error 和 Exception。
一个分支派生于 RuntimeException ; 另一个分支包含其他异常。
划分两个分支的规则是:由程序错误导致的异常属于 RuntimeException ; 而程序本身没有问题, 但由于像 I/O 错误这类 问题导致的异常属于其他异常。
派生于 RuntimeException 的异常包含下面几种情况:
错误的类型转换。
数组访问越界。
访问 null 指针。
不是派生于 RuntimeException 的异常包括:
•试图在文件尾部后面读取数据。
•试图打开一个不存在的文件。
•试图根据给定的字符串查找 Class 对象, 而这个字符串表示的类并不存在。
“ 如果出现 RuntimeException 异常, 那么就一定是你的问题” 是一条相当有道理的规则。
应该通过检测数组下标是否越界来避免 ArraylndexOutOfBoundsException 异常;应该通过在使用变量之前检测是否为 null 来杜绝 NullPointerException 异常的发生。
1.2 异常处理
抛出异常
Java 语 言 规 范 将 派 生 于 Error 类 或 RuntimeException 类的所有异常称为非受查 ( unchecked ) 异常,所有其他的异常称为受查( checked) 异常。
如果遇到了无法处理的情况, 那么 Java 的方法可以抛出一个异常。这个道理很简单:一 个方法不仅需要告诉编译器将要返回什么值,还要告诉编译器有可能发生什么错误。
需要记住在遇到下面 4 种 情况时应该抛出异常:
1 ) 调用一个抛出受査异常的方法, 例如, FilelnputStream 构造器。
2 ) 程序运行过程中发现错误, 并且利用 throw语句抛出一个受查异常(下一节将详细地 介绍 throw 语句)。
3 ) 程序出现错误, 例如,a[-l] =0 会抛出一个 ArraylndexOutOffloundsException 这样的 非受查异常。
4 ) Java 虚拟机和运行时库出现的内部错误。
如果出现前两种情况之一, 则必须告诉调用这个方法的程序员有可能抛出异常。
处理异常的关键词有:
try catch finally throw throws
try{}catch(){}
try{}catch(){}finally{}
try{}catch(){ }catch(){}catch(){}
try{}catch(){ }catch(){}catch(){}finally{}
finally 在异常处理时,代表最终有没有异常,有没有return continue break 都要执行代码段
1.3 异常类型
异常类型 | 说明 |
---|---|
Exception | 异常层次结构的根类 |
RuntimeException | 运行时异常,多数 java.lang 异常的根类 |
ArithmeticException | 算术谱误异常,如以零做除数 |
ArraylndexOutOfBoundException | 数组大小小于或大于实际的数组大小 |
NullPointerException | 尝试访问 null 对象成员,空指针异常 |
ClassNotFoundException | 不能加载所需的类 |
NumberF ormatException | 数字转化格式异常,比如字符串到 float 型数字的转换无效 |
IOException | I/O 异常的根类 |
FileNotFoundException | 找不到文件 |
EOFException | 文件结束 |
InterruptedException | 线程中断 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 类型转换异常 |
SQLException | 操作数据库异常 |