• Java中异常的处理及捕获


    Java中异常的处理及捕获

    一、异常的概述

    (1)Java中异常的作用:增强程序的健壮性
    (2)在Java中所有的Error(错误)和异常(Exception)都继承了同一个父类Throwable
    在这里插入图片描述

    二、异常产生的原因(Java异常的种类)

    在Java中异常产生主要有三种原因:
    (1)程序内部错误所产生的异常。比如数组越界(ArrayIndexOutOfBoundsException)、空指针异常(NullPointerException)等,这种异常叫做非受检异常,这类异常不需要在代码中声明抛出,但需要在类中处理这些异常。
    运行时异常(RuntimeException)下的各类异常都属于非受检异常
    (2)通过throw(抛出异常)语句手动生成的异常,这种异常叫做受检异常。受检异常这种异常在编译时就可以被检测出来,必须在代码中进行处理或者声明抛出,否则编译不通过。例如:IOException,FileNotFoundException,ClassNotFoundException,SQLException等。
    (3)Error:这类异常通常是由Java虚拟机(jvm)或硬件引起的。比如:OutOfMemoryError,StackOverFlowError等。

    三、异常的处理

    3.1异常的抛出(throw)

    1、throw是将异常抛给调用者,由其调用者来对异常信息进行处理。在编写程序时,如果程序中出现错误,这就需要将异常信息通知给调用者,这里就可以借助关键字throw,抛出一个指定的异常对象,将错误信息告知给调用者。
    2、throw必须写在方法体内,且一旦出现异常后面的代码就不会执行。
    在这里插入图片描述
    在这里插入图片描述

    3、如果抛出的是编译时异常(受检异常),咱就必须得处理掉这个异常,否则无法通过编译。
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    如果抛出的是运行时异常(非受检异常),则可以不用处理,直接交给jvm来处理。(其实最好要是能处理的话还是处理一下子!!!!)
    在这里插入图片描述
    在这里插入图片描述

    3.2异常的捕获

    3.2.1 throws捕获异常

    throws处在方法声明参数列表之后,当方法抛出编译时异常,而你又不想处理该异常,此时就可借助throws将异常抛给方法的调用者来处理。
    1、格式:
    修饰符 返回值类型 方法名(参数列表) throws 异常类型 {
    }
    在这里插入图片描述

    2、如果说方法内抛出多个异常,throws之后就必须跟多个异常类型,用逗号进行分隔
    在这里插入图片描述

    3、如果抛出多个异常有父子关系,直接声明父类
    在这里插入图片描述

    4、调用声明抛出异常的方法时,调用者必须对该异常进行处理,或者继续使用throws抛出。
    在这里插入图片描述

    3.2.2、try-catch捕获异常并处理

    1、当程序抛出异常的时候,我们可以通过try-catch对异常进行捕获处理。
    在这里插入图片描述
    在这里插入图片描述

    2、需要明确如果程序抛出的异常不做处理,那就会交给jvm来处理,jvm处理就会把程序立即终止。这样我们就明白了,使用try-catch进行异常捕获时必须捕获对应的异常,如果捕获的不是对应的异常,也会让jvm进行处理。
    在这里插入图片描述
    在这里插入图片描述

    4、如果try抛出多个异常就必须用多个catch进行捕获,这里注意,用多个catch进行捕获不是同时进行捕获,因为不能同时抛出不同的异常。
    在这里插入图片描述

    也可简写成如下:
    在这里插入图片描述
    在这里插入图片描述

    5、如果异常之间有父子关系,那就必须子类异常在前,父类异常在后catch,不然会报错。
    在这里插入图片描述

    3.2.3、finally

    1、finally不管程序正是否抛出异常,finally都会被执行。
    2、finally用于进行资源回收或是一些收尾的操作,无论程序正常进行,还是退出都需要回收资源。
    情况一:引发异常时,finally会被执行。
    在这里插入图片描述
    在这里插入图片描述

    情况二:程序段正常结束后,finally下的语句也会被执行
    在这里插入图片描述
    在这里插入图片描述

    3、即使有return,finally也会被执行。
    在这里插入图片描述
    在这里插入图片描述

    4、总结:
    throw抛出异常,throws声明异常并捕获,try-catch捕获异常
    finally语句一定会执行

    3.3自定义异常类

    虽然Java中有很多异常类,但是在开发中我们会遇到很多异常,不能完全表示,这就需要我们通过自定义的异常类进行解决。
    上代码:
    首先:自定义异常类MyException
    在这里插入图片描述

    抛出自定义异常类,并进行捕获处理
    在这里插入图片描述
    在这里插入图片描述

    自定义异常类的总结:
    自定义异常类默认会继承Exception或者RuntimeException
    继承于Exception的异常默认是受检异常
    继承于RuntimeException的异常默认是非受检异常

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    注意,处理继承Exception(受检的)自定义异常时,必须对抛出的异常进行捕获处理,否则无法编译通过。

  • 相关阅读:
    社区买菜系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
    【ArcGIS】11 河道断面提取
    高中数学:三角恒等变换-两角和与差的变形公式
    for...of与for...in
    Python21天学习挑战赛Day(12-13)·requests模块全解
    mysql的mysql_store_result函数调用问题(C的API)
    解决javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V异常
    PTA 7-72 成绩分析表
    µC/OS-II---两个系统任务
    如何制作并运行 jar 程序
  • 原文地址:https://blog.csdn.net/weixin_43950588/article/details/130798493