11、异常

150 阅读2分钟

异常

一、概念

程序在运行过程中发生的错误称为异常,在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 语言中所有错误或异常的超类。

两个子类的实例,ErrorException,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。

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+"越界了");
 }
}