异常处理

简介: 异常处理

异常处理

throws关键字

若某个方法可能会发生异常,但是不想在当前方法中来处理这个异常,那么可以将这个异常抛出,然后在调用该方法的代码中进行异常的捕获以及处理。

所以将异常抛出,可以用throws关键字来实现,throws关键字通常被应用在声明方法中,用来指定方法可能抛出的异常,多个异常可以用逗号来分隔。

如果异常的类型是Erro和RuntimeException或是它们的子类,那么可以不使用throws关键字来声明。

将异常通过throws关键字抛给上一级,如果仍然不限处理这个异常,可以继续向上抛出,但是最终必须有能够处理这个异常的代码。

格式:

image.png

异常是否抛出,站在哪个角度思考

如果是因为传参导致异常,应该通过throws将异常抛出去。

抛是抛给调用该方法的函数。

throw关键字

区分throws和throw。

与throws不同的是,throw用于方法体内,并且抛出一个异常类对象,而throws用在方法声明中。

throw抛出异常后,同样需要使用try…catch语句,上述两张情况,若throw抛出的异常Error、RuntimeException或它们的子类,则无须使用throws关键字或者try…catch。

格式:

image.png


为什么要自己抛出异常

有时候传入的参数并不会造成代码报错,但是在现实逻辑上不合理(例如年龄为-1),所以我们要创造一个异常抛出去告诉调用这里存在异常。

image.png

使用异常处理语句的注意事项:

在使用try…catch,finally,throw,throws关键字时,要注意:

(1)不能单独使用try,catch或finall语句块。

(2)try语句块后面既可以只使用catch语句块,也可以只是用finally语句,当它们一起使用时,可以存在多个catch语句块,但是只能有一个finally语句,并且finally只能在catch之后。

(3)try只与finally语句块使用时,可以使程序在发生异常后抛出异常,并继续执行方法中的其他代码。

(4)try只与catch语句使用时,可以使用多个catch语句来捕获try语句块的异常,异常发生后,java虚拟机会由上而下来检测当前catch语句块所捕获的异常是否与try语句块中的发生的异常匹配。如果匹配,则不再执行其他catch语句。如果多个catch语句块捕捉的是同种类型的异常,则捕获子类异常的catch语句要放在父类异常的前面,否则编译出错。

(5)在try语句中声明的变量时局部变量,只在当前try语句中有效,在其后面的catch,finally语句中其他位置不能访问该变量,但在try,catch,finall语句块之外声明的变量,可以在ry,catch,finall语句块之内使用。

(6)对于发生的异常,必须使用try…catch语句来捕获。或者通过throws语句向上抛出,否则出错。

(7)在使用throw语句抛出一个异常对象时,该语句后面代码将不会被执行。

(8)finally 执行的时机是在方法返回之前(try 或者 catch 中如果有 return 会在这个 return 之前执行 finally). 但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return。所以一般不建议在finally语句块中写return语句。

 

 

 

相关文章
|
2月前
|
数据采集 存储 数据库
异常处理
【8月更文挑战第12天】
36 3
|
5月前
|
C++
C++程序异常处理
C++程序异常处理
34 1
|
5月前
|
C++
11. C++异常处理
11. C++异常处理
35 0
11. C++异常处理
|
5月前
|
C++
C++ 异常处理
C++ 异常处理
|
5月前
|
存储 安全 Java
【C++】—— 异常处理
【C++】—— 异常处理
|
5月前
|
C++
C++异常处理详解
C++异常处理详解
31 0
|
5月前
|
存储 C++
63异常处理
63异常处理
27 0
|
C#
C#异常处理
C#异常处理
60 0
|
11月前
|
Java 编译器 C++
C++异常处理
C++异常处理
33 0