• java异常处理笔记


    异常的分类:

    java.lang.Throwable 是java中所有错误或异常的超类。

    Exception:编译期异常、RuntimeException 运行期异常。

    Error:错误

    处理异常的方式:

    1、抛出异常throws,给jvm处理,异常中断后程序中断。

    2、捕获异常try..catch,异常捕获后接着执行后续代码。

    异常产生的过程:

    main方法里,调用方法1,方法1里访问数组元素arr[3],如果越界,jvm就会检测出程序会出现异常。

    jvm会做2件事情:

     a、JVM会根据异常产生的原因创建一个异常对象,这个异常对象包含了一次产生的(内容、原因、位置)

           new ArrayIndexOutOfBoundsException(“3”)

    b、被调用的方法中,如果没有异常的处理逻辑(指try..catch),那么JVM会把异常对象抛出给方法的调用者(main方法)来处理这个异常。main方法也处理不了,就交给了JVM处理。

    c、JVM会在控制台打印异常对象(内容、原因、位置),并且终止正在执行的java进程,中断处理。

    举例如下:

     异常的处理:

    0、throw关键字

          注意:a、throw关键字必须写在方法的内部。

                    b、throw关键字后面new的对象必须是Exception或Exception的子类对象。

                    c、throw关键字抛出的异常对象,我们必须处理这个异常对象。
                          throw后创建的是运行期异常:RuntimeException或RuntimeException子类对象,我们可以不处理,交给jvm处理(打印异常对象,中断程序)
                          throw后创建的是编译异常(写代码时报错,例如FileNotFoundException,IOException属于编译异常),必须处理这个异常,要么throws,要么try..catch

    举例: 方法入参校验,如果方法入参有数组,这个数组碰巧是null,那就throw NullPointException(NullPointException属于运行期异常,可以不处理,自动交给jvm中断)

               索引<0或>数组的最大索引,也会抛出异常ArrayIndexOutOfBoundsException(属于运行期异常,可以不处理,自动交给jvm中断)

    使用技巧:判断一个入参对象是否为空,直接调用Objects.requireNonNull(对象名,"异常信息提示")

     1、throws声明异常关键字  ,交给别人处理异常

          使用格式:方法声明时候使用   

          抛出的异常与声明的异常要一一对应。

          修饰符 返回值类型  方法名(参数列表) throws AAException,BBException..{

          throw new AAException(“异常产生原因”)

          throw new BBException(“异常产生原因”)

           ...

           }

         注意: 

                1、throws关键字必须写在方法声明处。

                2、throws关键字后边声明的异常必须是Exception或它的子类。

                3、方法内部如果抛出了多个异常对象,那么throws后边也必须声明多个异常。 如果抛出的多个异常对象有子父类关系,那么直接声明父类异常即可。(FileNotFoundException,IOException,Exception父类,这三个只要声明Exception)

                4、方法A调用了一个声明抛出异常的方法B,就必须处理声明的异常。要么继续使用throws声明抛出,交给方法的调用者处理,最终交给jvm;要么try..catch处理异常。

                5、因为异常被jvm中断处理,异常之后的代码不会被执行

    2、try...catch,自己处理异常

               try{

                  可能出现异常的代码

                }catch(异常类型  变量名){

                  }

                catch(异常类型  变量名){

                  }

           注意:

                1、try可能出现多个异常对象,可以使用多个catch处理这些异常。

                2、如果try中产生了异常,就会执行catch中的异常处理逻辑,执行完catch中的处理逻辑,继续执行catch之后的代码。如果try中没产生异常,就不执行catch中的代码,直接执行catch之后的代码。

                3、try中抛出什么异常对象,catch就定义什么样的异常变量,用来接收这个异常对象。

    Throwable处理异常的三个方法

    public string getMessage();

    public string tostring();

    public void printStackTrace();默认方法,信息最全面。

    finally代码块

    无论是否出现异常都会执行。

       注意:

          1、finally一般用于资源释放,无论程序是否异常,最后都要执行释放。

          2、finally不能单独使用,必须和try一起使用。

    多个异常一个try捕获,多次catch处理:catch里定义的异常变量如果有子父类关系,那么子类的异常变量必须写在最上面,否则会报错。

    多个异常多个try捕获,多次catch处理

    多个异常一个try捕获,一次catch处理

  • 相关阅读:
    window.onresize绑定事件以及解绑事件
    jqGrid中select带可编辑的
    ROS(机器视觉)
    Python(time模块)
    Python(random模块)
    Python迭代器
    Python生成器
    Python装饰器(函数)
    ROS(URDF机器人建模)
    ROS基础
  • 原文地址:https://www.cnblogs.com/zmyx2018/p/14507930.html
Copyright © 2020-2023  润新知