《Oracle Java SE编程指南》18-05:throw与
内容导航:
-
前言
-
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抛出该异常对象。
继续抛出异常的作用:使得调用该方法的方法,能够再一次捕获并处理异常
4、总结
throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常。
throws用于方法声明处,用来声明该方法可能发生的异常类型,可以是多个异常类型,用来强制调用该方法时处理这些异常。
抽象方法也可以使用throws,所以说并不是有throw才有throws。
如果使用throw关键字抛异常,一定不要使用Exception,不能很好标记异常类型。
如果throw要抛出与业务逻辑有关的异常,需要使用自定义异常类,后续学习
持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!
扫描二维码,关注AT阿宝哥