异常
一、概念
程序在运行过程中发生的错误称为异常,在Java中将异常封装成了一种数据类型
Exception异常处理的必要性:如果发生了异常,那么JVM就会终止运行。这意味着异常后的代码都不会再执行了
常见异常:
1.ArithmeticException:算术异常 2.StringIndexOutOfBoundsException:字符串下标越界异常 3.ArrayIndexOutOfBoundsException:数组下标越界异常 4.IndexOutOfBoundsException:下标越界异常 5.NullPointerException:空指针异常 6.ClassCastException:数据类型转换异常 7.ConcurrentModificationException: 8.NumberFormatException:数字格式异常 9.InputMismatchException:输入不匹配异常 10.IllegalArgumentException:非法参数异常 11.ParseException:解析异常 12.FileNotFoundException:文件找不到异常 13.NotSerializableException:读写内容没有序列化 14.RejectedExecutionException:拒绝的异常
二、异常的体系结构
Throwable:错误/异常类的父类,
Throwable类是 Java 语言中所有错误或异常的超类。两个子类的实例,
Error和Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。Error:错误
Exception:异常
三、异常的处理
3.1、捕获异常
关键字:
try、catch、finally// 1.一个异常一次处理 try{ // 可能发生异常的代码 }catch(异常类 变量名){ // 异常处理 } // 逻辑:先执行try代码块,如果try中没有发生异常,则不会进入catch代码块;如果try中发生了异常,那么系统会根据发生的异常创建出该异常类型的对象,立即进入catch代码处理异常 // 2.多个异常一次处理 try{ // 可能发生异常的代码 }catch(Exception 变量名){ // 异常处理 } // 3.多个异常分别处理 try{ // 可能发生异常的代码 }catch(异常类1 变量名){ // 异常处理 }catch(异常类2 变量名){ // 异常处理 }catch(Exception e){ // 处理其他异常 } // 注:父类异常必须写在子类异常之后try{ // 可能发生异常的代码 }catch(异常类 变量名){ // 异常处理 }finally{ // 一定会执行的代码 } // finally用于释放资源细节:
public static int f(){ try{ int i = 1/1; return 1; }catch(Exception e){ return 2; }finally{ return 3; } } // 注:一个方法有返回值并且方法中的finally代码块中有return语句,那么这个方法的返回值一定是finally中的返回
3.2、抛出异常
关键字:
throw、throws
throws:用于抛出异常类,写在定义方法时
throw:用于抛出异常类的对象,写在方法体中的语句注:如果抛出的异常类是RuntimeException及其子类,那么异常可以不做处理;
如果抛出的异常类不是RuntimeException及其子类,那么异常必须处理
// 下载违章记录 public static void g() { try { FileInputStream fis = new FileInputStream(""); }catch (FileNotFoundException e){ System.out.println("您没有违章记录"); // 跳转 } } // 通过下标输出数组中的元素 public static void f(int[] arr ,int index){ if(index >= 0 && index < arr.length){ System.out.println(arr[index]); }else{ throw new ArrayIndexOutOfBoundsException("你的下标:"+index+"越界了"); } }