《Oracle Java SE编程指南》18-05:throw与throws、层层抛出异常

课程封面-JavaSE-AT阿宝哥

内容导航

  • 前言

  • 1、throw

  • 2、throws


前言

前面我们学习过,异常使用一些特殊类标记的,所谓发生异常,就是抛出一个异常类对象,JVM的异常机制能够识别这样的对象,并进行处理。

运行期异常都是JVM在运行时自行抛出的,而编译期异常都是程序员在编写代码时,通过语句自行抛出的。

本节将学习与抛异常相关的关键字。


1、throw

关键字throw用于显式抛出异常,利用抛出的异常来标记不正常的事件,从而对事件流统一处理。

语法:


throw new 异常类构造方法;

例如:


throw new Exception();

为什么要throw异常呢?主要是要用这种异常类型标记一些不正常的事件,而且希望这些事件发生时,一定能被调用者关注并处理。

throw抛出异常后,可以有两种方式处理:

  • try-catch捕获异常
    因为如果throw后使用try catch自行处理,意义不大。异常只被处理一次,调用者就没法处理该异常。
    如果throw后使用了try catch,往往也会在catch中再使用throw继续抛出。

  • 使用throws声明异常
    将可能出现异常的代码抛出 ,使用throws 指明该方法引发的异常。推荐使用。

示例代码:




2、throws

用于方法声明处,指出方法引发的异常。可以声明多种异常类型,用逗号分开即可。

示例:


public void test  throws  异常1,异常2,异常3{

}

用了throws关键字,相当于给一个方法加上了不安全标签。使得调用这个方法的方法必须处理这些类型的异常,否则将出现编译错误。当然,处理的方法也依然有两种,即try catch或者继续throws。

  • 任何方法都可以使用throws关键字声明异常类型,包括抽象方法。

  • 子类覆盖父类中的方法,子类方法不能声明抛出比父类范围更大的异常。

  • 使用了throws的方法,调用时必须处理声明的异常,要么使用try-catch,要么继续使用throws声明


3、层层抛出异常

catch语句中,处理异常后,再次用throw抛出该异常对象。
继续抛出异常的作用:使得调用该方法的方法,能够再一次捕获并处理异常

图片.png

4、总结

throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常。

throws用于方法声明处,用来声明该方法可能发生的异常类型,可以是多个异常类型,用来强制调用该方法时处理这些异常。

抽象方法也可以使用throws,所以说并不是有throw才有throws。

如果使用throw关键字抛异常,一定不要使用Exception,不能很好标记异常类型。

如果throw要抛出与业务逻辑有关的异常,需要使用自定义异常类,后续学习


持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!


扫描二维码,关注AT阿宝哥

你可能感兴趣的:(《Oracle Java SE编程指南》18-05:throw与throws、层层抛出异常)