finally关键字:和try块使用,一般做资源释放操作,比如关闭流、关闭数据库连接,释放锁。
return:用于返回值。
finally块可保证一定执行,当逻辑处理有返回值时,会首先执行finally再执行return返回值。看这个规律我们可以推断如下代码的执行顺序为:
test1
finally
1publicstaticinttest1(){
2inti = 0;
3try{
4System.out.println("test1");//1
5returni;
6}finally{
7System.out.println("finally");//2
8}
9}
再看如下代码执行顺序是怎样的
1 publicstaticinttest1(){
2inti = 0;
3try{
4System.out.println("test1");//1
5}finally{
6System.out.println("finally");//2
7}
8System.out.println("finally behind");//3
9returni;
10}
经过测试结果为 test1、 finally、 finally behind .
在测试该段代码之前根据我之前了解的判断执行顺序应该是132,这是错误的。所以我们需要注意这种写法的执行顺序。正确的结果是123。这一点在使用同步代码的时候一定要注意 。主要在finally中使用lock.unlock方法时,return要写在try中,避免return前已经释放锁,将数据暴露给了其它任务。
领取专属 10元无门槛券
私享最新 技术干货