JAVA-finally子句

当代码抛出一个异常时,就会终止这个方法中剩余代码的处理,并退出这个方法的执行。如果方法获得了一些本地资源。并且只有这个方法自己知道,又如果这些资源在退出方法之前必须被回收,那么就会产生资源回收问题一种解决方案时捕获异常并重新抛出所有异常,但是这种方法比较乏味,这是因为需要在两个地方清除所分配的资源,一个在正常的代码中,一个在异常代码中。

java有一种更好的解决方案

finally子句

下面介绍如何恰当的关闭一个文件,在发生异常时恰当的关闭所有数据库连接是非常重要的。
如果catch语句抛出一个异常,异常将被抛回这个方法的调用者

不管是否有异常被捕获,finally子句中的代码都被执行。

finally语句不写在catch里,因为没有异常时是不会执行catch的

try语句可以只有finally语句而没有catch语句

InputStream in=...;
try{
	code that might throw exceptions
}
finally{
in.close();
}

无论在try语句块中是否遇到异常,finally子句中的in.close()语句都会被执行

InputStream in=...;
try{
	try{
		code that might throw exceptions
	}
	finally{
	in.close();
	}
}
catch(IOException e){
show error message
}

当finally子句包含return语句时,将会有一种意想不到的结果。假设利用return语句从try语块中退出,在方法返回前,fianlly子句的内容将会被执行。如果finally子句中也有一个return语句,这返回值将会覆盖原始的返回值。

例如

public static int f(int n){
try{
	int r=n*n;
	return r;
}
fianlly{
if(n==2)
return 0;
}
}

在上述代码中调用f(2),在try语句中语句块的计算 结果r=4,并执行return语句,但是在真正返回前,还要执行finally语句,finally语句使得方法返回0,这个值将覆盖原来的返回值,所以返回0.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值