JAVA异常处理 —“使用try、catch、throw、throws关键字的注意事项”

java处理异常的两种机制

一:捕获异常(主动

通常由trycatch来完成

二:声明抛出异常(被动

通常由throwthrows来完成


有关try和catch:

1.功能

①try代码块:包含可能一个或多个异常的代码;
②catch代码块:用于处理try代码块抛出的具体异常类型的异常对象
注意!是具体的

2.用法

①常用语法格式如下:

try{
    
    
}//可能发生异常的代码
 catch(Throwable e){
    
    
}//对异常处理的代码段

②多重catch处理异常:

try{
    
    
}//可能发生异常的代码
 catch(异常类型1 e){
    
    
}//对异常处理的代码段
 catch(异常类型2 e){
    
    
}//对异常处理的代码段
 catch(异常类型3 e){
    
    
}//对异常处理的代码段

★注意:多次使用catch语句时,catch语句的顺序非常重要!
首先应该捕获最特殊的异常,再逐渐一般化
即:先catch子类,再catch父类

③try和catch语句的嵌套使用(嵌套异常处理)

try{
    
    
	try{
    
    
		
		}//内部
	catch(异常类型1 ex){
    
    

		}//内部
}
 catch(异常类型2 ex){
    
    
}//外部

★注意:
在使用嵌套try时 程序先执行内部try块
如果没有遇到匹配的catch块 再检查外部try块的catch块

3:有关"finally"关键字

①使用情景:

在某些特定情况下,不管有没有异常发生,总需要有一些代码必须要被执行
(例如:进行数据库连接时,无论对数据库操作有没有成功,最后都要关闭关闭数据库的连接并释放内存资源)
此时就要利用finally关键字

②用法:

try{
    
    
//可能发生异常的代码
}
catch(异常类型 ex){
    
    
 //对异常处理的代码段
}
finally{
    
    
//总要被执行的代码
}

★注意:finally不能单独使用,必须和try结合使用!
使用方法通常有两种:
try-finally;
try-catch-finally


有关throw和throws:

1:throw语句(编写在方法之中★)

①使用背景
throw语句用来抛出一个“明确的”异常 (已经知道发生异常的具体类型)
需要注意:用户必须得到Throwable类或其他子类产生的对象引用,通过参数传到catch语句,或者用new语句来创建一个异常对象。

②语句通常使用形式:

throw + (异常对象)

2:throws语句(编写在方法签名之后★)

①使用背景
如果一个方法可以引发异常,而他本身不对这个异常进行处理 (当后面调用这个方法时再使用try和catch去处理),那么这个方法必须声明将这个异常抛出。

②语句使用格式:

MethodName()throws ExceptionType1, ExceptionType2

③注意事项
在同一个方法中使用throw和throws时,throws抛出的异常类型比throw抛出的异常类型范围要大或者相同。

★throws关键字用法举例:

public class testThrows(){
    
    
public static void function() throws NumberFormatException {
    
     
	String s = "abc"; 
	System.out.println(Double.parseDouble(s)); 
} 
 
public static void main(String[] args) {
    
     
	try {
    
     
		function(); 
	} catch (NumberFormatException e) {
    
     
		System.err.println("非数据类型不能强制类型转换。"); 
		//e.printStackTrace(); 
	} 
}

此段代码有一个主方法和一个function方法;
首先
我们在编写function()时,预料它可能产生NumberFormatException这个异常,但是我们并不想在这个方法中处理异常,就在方法名后使用关键字throws,将异常抛出。
后来
我们需要在主方法中调用function(),此时我们就要使用try和catch语句块来处理刚才预料到的异常。
必须注意的是——“catch语句中的异常类型和throws后面的异常类型要相同

3:throw和throws的区别(重点)

① throw用在方法中,throws用在方法声明中。
② throw只能用于抛出一种异常,而throws可以抛出多个异常。
③ throw则是抛出了异常,执行throw则一定抛出了某种异常; throws表示出现异常的一种可能性,并不一定会发生这些异常。


来个小总结

try和catch是主动去处理发生的异常(积极)
throw和throws两者都是被动处理异常的方式(消极),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。


//此篇文章是我这个初学小菜鸟的个人拙见,个别知识点理解可能有偏差,欢迎大家批评指正。 另外这是我在CSDN写的第一篇文章,也算是个开始~以后要在这里记录自己成长的点点滴滴,奥利给!

猜你喜欢

转载自blog.csdn.net/qq_47354826/article/details/109849799