异常产生后,如果不做任何处理,程序就会被终止。Java的异常处理使程序不会因为一个异常而影响整个程序的执行。
Java捕获异常
Java的异常捕获结构由try、catch和finally3部分组成。
try { //代码段(可能发生异常的代码) }catch(异常类型1 ex) { //对异常处理的代码段 }catch(异常类型2 ex) { //对异常处理的代码段 }catch(异常类型3 ex) { //对异常处理的代码段 } . . .catch(异常类型n ex) { //对异常处理的代码段 }finally { //总要执行的代码段 }
通常,异常处理常用一下3个函数来获取异常的有关信息:
- getMessage()函数:输出错误性质
- toString()函数:给出异常的类型与性质
- printStackTrace()函数:指出异常的类型、性质、栈层次及出现在程序中的位置
以下4种情况下,finally块不会被执行
- 在finally语句块中发生异常
- 在前面的代码中使用System.exit()退出程序
- 程序所在的线程死亡
- 关闭cpu
Java常见异常
异常类 | 说明 |
---|---|
ClassCastException | 类型转换异常 |
ClassNotFoundException | 未找到相应类异常 |
ArithmeticException | 算术异常 |
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
ArrayStoreException | 数组中包含不兼容的值抛出的异常 |
NullPointerException | 空指针异常 |
NoSuchFieldException | 字段未找到异常 |
SQLException | 操作数据库异常 |
NoSuchMethodException | 方法未找到抛出的异常 |
NumberFormatException | 字符串转换为数字抛出的异常 |
NegativeArraySizeException | 数组元素个数为负数抛出的异常 |
StringIndexOutOfBoundsException | 字符串索引超出范围抛出的异常 |
IOException | 输入输出异常 |
IllegalAccessException | 不允许访问某类异常 |
InstantiationException | 当应用程序试图使用Class类中的newinstace()方法创建一个累的实例,而指定的类对象无法被实例化时,抛出该异常 |
EOFException | 文件已结束异常 |
FileNotFoundException | 文件未找到异常 |
自定义异常
Java内置的异常类可以描述在编程时出现的大部分异常情况,除此之外,用户只需集成Exception类即可自定义异常。
自定义异常的步骤:
- 创建自定义异常类。
- 在方法中通过throw关键字抛出异常对象
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常。
- 再出现异常方法的调用者中捕获并处理异常。
代码示例:
1 public class MyException extends Exception{ //创建自定义异常,继承Exception类 2 public MyException(String ErrorMessage) {//构造方法 3 super(ErrorMessage); //父类构造方法 4 } 5 }
1 public class Tran{ 2 //定义方法,抛出异常 3 static int avg(int number1, int number2) throws MyException { 4 if (number1<0 || number2<0) { //判断方法中的参数是否满足指定条件 5 throw new MyException("不可以使用负数"); //错误信息 6 } 7 if (number1>100 || number2>100) { 8 throw new MyException("数值太大了"); 9 } 10 return (number1 + number2)/2; 11 } 12 public static void main(String[] args){ 13 try{ 14 int resullt = avg(102, 150); 15 System.out.println(resullt); 16 } catch(MyException e){ 17 System.out.println(e); 18 } 19 }