首页 > 其他分享 >finally语句的执行时刻

finally语句的执行时刻

时间:2023-04-20 11:32:26浏览次数:31  
标签:语句 执行 return ++ int finally 时刻


评:语义上 finally 在return之后执行
以前虽然知道在try finally语句中,即使try块里有return语句,finally语句也会在return语句执行之前执行,却不知道return表达式与finally语句的执行顺序。

public class Test { 

 public static int a() { 

 int i = 0; 


 try { 

 i++; 

 return ++i; 


 } finally { 

 i++; 

 [b]System.out.println("finally:" + i);[/b] 

 } 

 } 


 public static void main(String[] args) { 

 System.out.println(a()); 

 } 

}


这个语句的输出是 2 而不是 3。
当执行到 return ++i;

jvm是先执行 ++i,把结果 2 存到临时变量,然后在执行finally语句里的 ++i,所以最终的i的值虽然是 3,但方法返回的值却是 2。

其实以前的理解没有错,因为 return ++i; 是一个复合语句了,相当于:

int j = ++i; 

 return j;

标签:语句,执行,return,++,int,finally,时刻
From: https://blog.51cto.com/u_16080829/6209281

相关文章

  • 关于DB2数据库基本信息查询语句
    1.1数据库的启停启动数据库:db2start关闭数据库:db2stop(在关闭前先执行db2forceapplicationall(关闭所有正在执行的连接))或者直接执行db2stopforce(不是优先选择))#--有时候db2forceapplicationall关闭不了一些active的连接时可以使用db2stopforce1.2数据库的创建及删......
  • 超实用的 MySQL 语句写法
    1.插入或替换有时候,在向数据库中插入数据时,你可能会想要更新一行数据,而不是添加一行新数据。这时候,可以使用INSERTORREPLACE语句来实现这个目的。示例:INSERTORREPLACEINTOtable_name(id,name,age)VALUES(1,'Jack',28);在这个例子中,如果表中已经存在id......
  • 站不住就准备加仓,这个pandas语句该咋写?
    大家好,我是皮皮。一、前言前几天在Python白银交流群【还有多远】问了一个Pandas处理的问题,这里拿出来给大家分享下。看上去不太好理解,这里继续给个样式。只有一个条件为真,i<3300andi+1>3300 就为真,其余都为假。二、实现过程这里【甯同学】给了一个代码,如下所示:df.open.roll......
  • C# 中break 和 continue 和 return在if语句和for循环中的区别
     break是跳出当前循环就是最近的一次循环,继续执行外循环,continue是指结束本次循环,这次循环后边的不执行了,继续最内层循环的循环break是跳到了外层循环,return则终止该方法,后边的都不执行 可以使用switch iffor进行测试......
  • PromQL的一个QPS语句的分析
    这里以一个请求count指标为例,该指标是随时间增长的瞬时向量,如何用这个指标计算QPS,可以参照如下:req_sum_total瞬时向量,valueandtimestamp,当然返回的数据是一个集合req_sum_total{Project=~"vlm.+",uri!~"/status|.*prometheus"}筛选后瞬时向量req_sum_total{Project=~"......
  • sql with语句查询 递归查询
    with语句查询可以将一个子查询作为一个结果,相当于一个i临时表多次使用WITHt1AS(SELECT1ASid,'bird'AScname),t2AS(SELECT1ASid,'123'ASinfo)SELECTt1.cname,t2.infoFROMt1,t2WHEREt1.id=t2.id;t1和t2两个临时结果,后续查询可以使用。最后的查询也可以再......
  • 用一个 Python 语句换取你的第一份 DolphinDB 周边
    因子投研中最常用的技术栈之一,就是Python了。作为一款同时支持面向过程和面向对象的编程语言,Python简单易学,操作方便,具有成熟的数据分析生态,因此在量化投研、中低频交易中有非常高的普及率。Python还有丰富的库包,常用的如通过 pandas、numpy 进行复杂数据分析和因子挖掘,用 py......
  • SQL 跨数据库处理 语句
    1.插入数据SETIDENTITY_INSERT数据库A.dbo.FI_FloExpenseDailyON--设置为允许手动插入值INSERTINTO数据库A.[dbo].[表1](ID,[FlowNo])SELECTID,ExpenseNoFROM数据库B.[dbo].[表1]WHEREAppType=0SETIDENTITY_INSERTMixOne_DB_Seind.dbo.FI_FloExpenseDaily......
  • sql语句优化
    问题查找及措施问题查找需要找到具体的代码,对其进行一对一优化,而非一直把关注点放在服务器和sql平台降低简化每个事务中处理的问题,尽量不要让一个事务拖太长的时间例如文件上传时,应将文件上传这一步放在事务外面微软建议  4.启动sql定时执行计划怎么启动sqlserver......
  • Mybatis 批量更新(foreach成多条sql) 为什么比 java 中反复执行单条插入语句效率高?
    使用MyBatis的批量更新功能可能比逐行更新更高效。使用批量更新可以将多个更新操作合并为一个批处理操作,并将所有操作发送给数据库一次(只需建立一次连接),从而减少了数据库的IO操作和网络开销,提高了系统的性能。mybatis批量更新的方法:https://cloud.tencent.com/developer/arti......