Java语言中,将程序执行中发生的不正常情况称为“异常”(开发过程中的语法错误和逻辑错误不是异常)
- 执行过程中所发生的异常事件可分为两类
- Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况;StackOverflowError(栈溢出)和OOM(out of memory).Error是严重错误,程序会崩溃
- Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如:空指针访问,试图读取不存在的文件,网络连接中断等等。Exception分为两大类:运行时异常(程序运行时,发生的异常)和编译异常(编译时,编译器检查出的异常)
-
常见的运行异常
1.NullPointerException 空指针异常
当程序试图在需要对象的地方使用null时,抛出该异常
2.ArithmeticException 数学算数异常
当出现异常的运算条件时,抛出此异常。如:一个整数“除以零”时
3.ArrayIndexOutOfBoundsException 数组下标越界异常
用非法索引访问数组时抛出的异常。如果索引为负或者大于等于数组大小,则该索引为非法索引
4.ClassCastException 类型转换异常
试图将对象强制转换为不是实例的子类,抛出该异常
5.NumberForamtException 数字格式不正确异常
当程序试图将字符串转换成一种数字类型,但该字符不能转换为适当格式时,抛出该异常
-
编译异常
介绍:编译异常是指在编译期间,就必须处理的异常,否则代码不能通过编译
常见的编译异常:
1.SQLException //操作数据库时,查询表可能发生的异常
2.IOException //操作文件时,发生的异常
3.FileNotFoundException //当操作一个不存在的文件时,发生的异常
4.ClassNotFoundException //加载类,而该类不存在时,发生的异常
5.EOFException //操作文件,到文件末尾,发生的异常
6.IIIegalArguementException //参数异常
-
异常处理
五个关键字:try、catch、throws、throw、finally
1.try-catch异常处理
Java提供try和catch块来处理异常,try块用于包含可能出错的代码。catch块用于处理try块中发生的异常。可以根据需要在程序中有多个数量的try……catch块基本语法
try {
//可疑代码
//将异常生成对应的异常对象,传递给catch块
} catch(Exception e) {
//对异常的处理
}
//如果没有finally,语法上时可以通过的
- 注意事项
1.如果异常发生了,则异常后面的代码块不会执行,直接进入到catch块
2.如果异常没有发生,则顺序执行try的代码块,不会进入到catch
3.如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等),则使用如下代码——finally { }
try {
//可疑代码
} catch(Exception e){
//……
} finally {
//释放资源等……
}
4.可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如Exception在后,NullPointerException在前,如果发生异常,只会匹配一个catch
try {
} catch(NullPointerExcetpion e){
} catch(Exception e){
} finally {
}
5.可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉
try {
//代码
}
finally {
//总是执行
}
2.throws异常处理
如果一个方法(语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示的声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
3.自定义异常类
class OverException extends Exception {
public OverException () {
}
public OverException(String message) {
super(message);
}
}