日记大全

日记大全 > 句子大全

跟我学java编程—Java异常处理语句finally的用法

句子大全 2023-10-06 06:17:01
相关推荐

前面讲过,如果try语句块中存在异常,则异常之后的代码将不再执行。但在某些特定的情况下,不管是否有异常发生,总是要求某些特定的代码必须被执行。例如,程序中执行数据库连接的代码,不管对数据库的操作是否成功,最后都要关闭数据库的连接以释放内存资源,这就需要用到finally语句。

finally语句的语法规则如下:

try {

…….. //代码段(可能发生异常的代码)

} catch( 异常类型 ex ) {

…….. //对异常进行处理的代码

} finally {

…….. //总要被执行的代码

}

……… //代码段

下面通过示例演示throws的用法,代码如下:

代码为了演示finally语句的效果,在try语句块中设置了除零异常。当代码执行到语句i= 12/0时,程序抛出异常。控制台显示结果如下图所示:

从上面的代码可以看出,出现异常还是没出现异常,都不会影响到finally语句的执行。只有一种情况会阻止finally语句的执行,就是JVM被关闭。不管try是以何种方式结束的(正常结束、异常结束、通过return或break控制流语句结束),finally语句也总是恰好在成员函数返回前执行。

下面通过示例ReturnExceptionDemo讲解return语句的作用:

运行程序,输出结果如下图所示:

从输出结果可以看出,不管什么情况下,finally语句都会被执行。

在代码methodB方法try语句块中,程序执行到return语句时,程序会产生一个局部展开,finally语句块的代码会被插入到return语句之前执行。不过注意的是,finally语句块的代码虽然在return语句之前执行,但是finally语句块的代码不能够通过重新赋值的方式来改变return语句的返回值。

看如下的示例代码:

例子代码中,本来是想在finally语句块中通过改变temp的值,来影响testFinally方法最终返回值,但是真的影响了吗?testFinally方法并没有返回我们需要的值。虽然finally语句块的代码不会影响try语句块中return语句的返回值。但是可以在finally内部使用return语句。如果把上列的finally语句块的代码改为如下所示:

由于finally语句块的代码优于return语句执行,如果此时在finally语句块中内部也有return语句,这将会导致该方法直接返回,而使try语句块中的return语句得不到执行机会,所以返回结果为2。

对上述情况,其实更合理的做法是,既不在try语句块中使用return语句,也不在finally语句块中使用return语句,而应该在finally语句块之后使用return语句来表示方法的结束和返回。修改后的代码如下:

■ 知识点拨

finally语句一般和try......catch......连用,用来做一些善后清理工作,可以把文件关闭,关闭数据库连接等操作放置到finally语句块内,避免程序出现异常时,不能及时执行关闭文件等释放系统资源操作。

阅读剩余内容
网友评论
相关内容
拓展阅读
最近更新