异常相关知识点

一、异常的概念

   异常: 就是不正常的意思;
     在生活中,病人身体的某个部分有异常,这个部分的功能就会受到影响
     在编程中,程序在执行过程中,出现了非正常情况,最终 会导致 JVM非正常停止

二、异常的体系

   1、异常机制

       异常机制: 辅助程序员准确找到非正常代码的所在处

   2、异常体系

     (1)异常体系的根类:
         java.lang.Throwable
     (2)根类的两大子类:
         java.lang.Errorjava.lang.Exception
     (3)注意:
         平常所说的异常,是指java.lang.Exception

三、异常的分类

   1、异常的分类

				 Error(错误)
				 Exception(编译期异常),指真正Exception异常中RuntimeException异常之外的异常
				 RuntimeException(运行期异常),属于真正Exception异常的一种

      Error:错误,编译不会报错,但是运行时会报错,并且是 JVM 无法解决的报错,只能修改源码
      Exception: 编译会报错,可进行处理,处理后就可以运行后面的代码(但是异常信息还是会在控制台输出)
      RuntimeException: 编译不会报错,但是在运行时出现报错,只要抛出,不用处理,交给JVW处理(中断处理)。

   2、注意

      平常所说的Exception异常是指 编译期异常不包括 运行期异常(RuntimeException)

四、异常产生过程解析

在这里插入图片描述

五、异常的throw关键字

   1、throw的作用

        在使用了throw关键字的指定方法中 抛出 指定的异常

   2、throw的使用格式

       throw new XxxException("异常产生的原因");

   3、注意

     (1)throw关键字必须写在 方法内部
     (2)throw关键字后面 new 出来的对象必须真正Exception异常 或者 真正Exception异常子类 对象
     (3)throw关键字 抛出了 指定异常,就 必须 处理这个异常(程序员处理或者JVM处理)
       1)抛出的异常对象是 RuntimeException异常 或者 RuntimeException异常子类 对象,则程序员可以不处理,默认让JVM处理
       2)抛出的异常对象是 编译期异常 或者 编译期异常子类 对象,则 程序员必须处理 ,要么用 throws,要么用 try…catch…

六、异常处理(throws关键字)

   1、throws的作用

        处理异常;
        会将异常对象声明抛出给方法的调用者,有调用者来处理,最终会到 JVM 上进行中断处理
     注:中断处理,可见本博客的 第四点异常产生过程解析

   2、throws的使用格式

修饰词 返回值类型 方法名(参数列表) throws XxxException, ...{
		throw new XxxException("该异常的产生原因");
}

   3、注意

     (1)throws关键字必须写在 方法声明处
     (2)throws关键字后面声明的异常必须是 Exception异常 或者 Exception异常子类
     (3)方法内部如果 抛出多个 异常,那么throws后面也必须 声明多个 异常
       1)如果抛出的多个异常有 父子类 关系,可以 只声明父类 异常
     (4)调用了声明抛出异常的方法,就 必须处理 声明抛出的异常
       1)要么用 throws 继续声明 抛出, 最终 交给JVM处理
       2)要么用 try…catch… ,自己处理异常

七、异常处理(try…catch…finally…)

   1、try语句块

        作用:放置可能存在异常的语句,对异常进行捕获

   2、catch语句块

        作用:放置捕获到异常后所要进行的操作

   3、finally语句块

        作用:放置无论是否发生异常都要执行的代码

   4、注意

     (1)catch中的语句执行完后, 不会 回到try执行语句
     (2)finally不能单独使用,只能和 try…catch… 一起使用或者 只与try 一起使用
     (3)finally并不是异常处理,跟 try…catch 处理异常没有关系,只是保证 必然运行 的代码块
       1)所以就算使用finally,也得要 至少 一个catch
     (4)finally语句处理后会返回try或者catch
       1) 无异常: try — finally — try; 有异常: try — catch — finally — catch;
     (5)finally语句块的运行是在 try或catch 语句块的 return当中
       1)return关键字的执行 ,主要分为两部分; 一为 将需要返回的数据存放到固定的容器中, 二为 将该容器返回给调用者
       2)finally语句块就是在return的 两个步骤之间 执行的
       3)如果没有return,就 执行完 再执行 finally
     (6)finally 中应该 避免出现 return关键字,以免其他语句块的 return 无法生效
     (7)finally更多是被使用于 资源释放 (如IO流资源释放)

八、父子类异常的注意事项

     (1)如果父类 抛出了多个 异常,子类 重写父类方法 时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常
     (2)如果父类没有抛出异常,子类重写父类方法时,也不可抛出异常
       1)此时,子类产生异常,只能捕获处理,不能声明抛出
     (3)父类异常时是怎么样,子类异常时就是怎么样

发布了54 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41970025/article/details/90241915