Exception常见异常类型和处理机制

Exception:意外异常(异常层次结构的父类)


Exception常见异常类型和处理机制_第1张图片

  • Throwable:是异常Exception与Error的父类,直接继承自Object, Error通常指系统发生的严重性的错误,不能通过程序代码解决的问题
  • Exception异常可以通过修改代码解决,分为检查时异常(必须要做出相应的处理)与运行时异常(可以不做处理)。

一、常见的异常类型:

1、ArrayIndexOutOfBoundsException:数组索引越界异常

通常原因:你访问了不存在的索引

2、NullPointerException:空指针异常

通常原因:数组已经不在指向堆内存了,而你还用数组名去访问元素。

3、RuntimeException:运行时异常

通常原因:表示你的代码本身存在BUG

详细解决方案:https://zhidao.baidu.com/question/329849523.html

4、ArithmeticException:算数异常(算术错误情形,如以零作除数)

通常原因 :当我们定义的除数为整数时(short、int、long)会抛出此异常,被除数为整数时不可为零

5、IllegalArgumentException:非法数据异常

通常原因:字面 非法参数 通常情况为找不到文件;有可能是没有通常是没编译,不排除其他情况

6、ClassNotFoundException:类无法加载异常

通常原因:类不能找到,一般原因都是部署的项目文件中没有这个类包

详细解决方案:https://www.cnblogs.com/xiangkejin/p/8798859.html

7、NumberFormatException:字符串到float类型转换异常

通常原因:数字格式异常

8、IOException:输入输出异常

通常原因:读写异常,一般在读写数据的时候会出现这种问题

9、FileNotFoundException:找不到文件异常

通常原因:路径配置错误 ;编译有问题,文件不存在

10、EOFException:文件结束异常

通常原因:当输入过程中意外到达文件或流的末尾时,抛出此异常

详细解决方案:https://www.cnblogs.com/yiwangzhibujian/p/7107084.html

11、InterruptedException:(线程)中断异常

通常原因:请查看下行链接

详细解决方案:https://www.jianshu.com/p/a8abe097d4ed

12、IndexOutOfBoundsException:下标越界异常

通常原因:通常是指数组下标越界异常
13、NegativeArraySizeException:创建一个大小为负数的数组错误异常

通常原因:如果应用程序试图创建大小为负的数组,则抛出该异常

14、ClassCastException:两个类型间转换不兼容异常

通常原因:(1).一个类是数字类,而由于误操作,错误的将数字类向数字类转换改写成了数字类向字符串类的转换,从而产生了异常。
                 (2).大部分原因是因为强制转换或者是SQL映射时发生了这个异常。


Exception参考资料:https://docs.oracle.com/javase/9/docs/api/java/lang/Exception.html

 


二、异常处理机制:

  • try - catch
  • try - catch - finally
  • 多重catch
  • throw
  • throws

1、try-catch-finally结构中try语包块是必须的catchfinally语句块均可选,但两者至少出现之一

1.1、finally的作用

  •     在try-catch块后加入finally块,finally是否发生异常都执行
  •     当在finally之前使用了System.exit(1)时不执行,因为程序已经退出虚拟机 

Exception常见异常类型和处理机制_第2张图片

 

2、引发多种类型的异常
(1)排列catch语句的顺序:先子类后父类
(2)发生异常时按顺序逐个匹配
(3)只执行第一个与异常类型匹配的catch语句

 

3、存在return的try-catch-finally块:

//存在return的try-catch-finally块

public void method(){
    try{ 
    //代码段1
    //产生异常的代码段2
    } catch (异常类型 ex) { //Exception:异常类型匹配,ex:异常的对象---- 异常父类Exception接收异常子类---多态

    //对异常进行处理的代码段3
      return;
    }finally{
    //代码段4
    }
}

3.1、return的try-catch-finally图解:

Exception常见异常类型和处理机制_第3张图片

注:try-catch-finally中使用return的执行流程 --> 遇到异常时,先执行finally后执行return

 

4、throw与throws:

  • throws:在方法上声明抛出异常
  • throw:手动抛出异常

Exception常见异常类型和处理机制_第4张图片

 

4.2、throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
(1)调用者处理异常
(2)调用者继续声明异常
                 main()方法声明的异常由Java虚拟机处理

 

5、自定义异常:

借助代码理解自定义异常的定义和使用

(1)通过继承Exception父类创建自定义的异常类,处理异常情况根据实际应用需求。

步骤:定义异常类 -->  编写构造方法,继承父类的实现 -->  实例化自定义异常对象 -->  使用throw抛出

/**
 * 在setAge(int age)中对年龄进行判断, 如果年龄介于1到100直接赋值,否则抛出异常
 * 在测试类中创建对象并调用setAge(int age)方法,使用try-catch捕获并处理异常
 */
public class Years {
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) throws Exception {
        if (age >= 1 && age <= 100) {
            this.age = age;
        } else {
            /*Exception e = new Exception("年龄必须在1-100之间!");
            throw e;*/
            throw new Exception("年龄必须在1-100之间!");
        }
    }

    // 测试类
    public static void main(String[] args) {
        Years ys = new Years();
        Scanner input = new Scanner(System.in);
        System.out.print("请输入你的年龄:");
        ys.age = input.nextInt();

        try {
            ys.setAge(ys.age);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("谢谢使用");
        }
    }
}

 

(2)IO流异常https://blog.csdn.net/weixin_41540362/article/details/102756500

  自定义异常:

  • 继承自Exception(编译时异常)
  • 继承自RuntimeException(运行时异常)

 

 6、异常链与异常处理原则

(1)异常链

  • 创建了新的异常,但是保留了原有的异常信息
  • 常常会再捕获一个异常后跑出另外一个异常,并且希望把异常原始信息保存下来,这被称为异常链。
  • 详细介绍:https://blog.csdn.net/qq_41026809/article/details/92002635

(2)异常处理原则

  • 异常处理与性能
  • 异常只能用于非正常情况
  • 需要对捕获的异常做处理
  • 不要将过于庞大的代码块放在try中
  • 在catch中指定具体的异常类型
  • 异常处理,谁调用谁处理

 共勉:明日复明日,明日何其多。我生待明日,万事成蹉跎。

你可能感兴趣的:(Java,Exception,Java常见异常)