范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

tryfinally和return的执行顺序是什么样的?

  之前看过一篇关于  return   和  finally   执行顺序的文章,仅在 Java 的语言层面做了分析,其实我倒觉得直接看 bytecode 可能来的更清晰一点。
  先看一个只有  try-finally  ,没有  catch   的例子。 public class DemoTryFinlly {         public void tryFinally() {             try {                 tryItOut();             } finally {                 wrapItUp();             }         }                  public void tryItOut() {         }         public void wrapItUp() {          }     } }
  通过  javap -c DemoTryFinlly   来查看它的字节码。 public void DemoTryFinlly();   Code:      0: aload_0      1: invokevirtual #2  // Method tryItOut:()V      4: aload_0      5: invokevirtual #3  // Method wrapItUp:()V      8: goto          18     11: astore_1     12: aload_0     13: invokevirtual #3  // Method wrapItUp:()V     16: aload_1     17: athrow     18: return   Exception table:      from    to  target type          0     4    11   any
  如果没有抛出异常,那么它的执行顺序为 0: aload_0 1: invokevirtual #2  // Method tryItOut:()V 4: aload_0 5: invokevirtual #3  // Method wrapItUp:()V 18: return
  如果抛出了异常,JVM 会在 Exception table:    from    to  target type        0     4    11   any
  中进行控制跳转。如果是位于0到4字节之间的命令抛出了任何类型(any type)的异常,会跳转到11字节处继续运行。 11: astore_1 12: aload_0 13: invokevirtual #3 16: aload_1 17: athrow
  astore_1会把抛出的异常对象保存到local variable数组的第二个元素。下面两行指令用来调用成员方法wrapItUp。 12: aload_0 13: invokevirtual #3
  最后通过 16: aload_1 17: athrow
  重新抛出异常。
  通过以上分析可以得出结
  在try-finally中,try块中抛出的异常会首先保存在local variable中,然后执行finally块,执行完毕后重新抛出异常。
  如果我们把代码修改一下,在try块中直接return。
  try - return - finally public void DemoTryFinlly() {   try {     tryItOut();     return;   } finally {     wrapItUp();   } }
  通过  javap -c DemoTryFinlly   来查看它的字节码。 0: aload_0  1: invokevirtual #2 // Method tryItOut:()V  4: aload_0  5: invokevirtual #3 // Method wrapItUp:()V  8: return  9: astore_1 10: aload_0 11: invokevirtual #3 // Method wrapItUp:()V 14: aload_1 15: athrow
  可以看出finally块的代码仍然被放到了return之前。
  如果try块中有return statement,一定是finally中的代码先执行,然后return。
  给上面的代码加一个catch块 public void DemoTryFinlly() {   try {     tryItOut();   } catch (TestExc e) {     handleExc(e);   } finally {     wrapItUp();   } }  0: aload_0      1: invokevirtual #2      4: aload_0      5: invokevirtual #3      8: goto          31     11: astore_1     12: aload_0     13: aload_1     14: invokevirtual #5                       17: aload_0     18: invokevirtual #3     21: goto          31     24: astore_2     25: aload_0     26: invokevirtual #3     29: aload_2     30: athrow     31: return Exception table:    from    to  target type        0     4    11   Class TestExc        0     4    24   any       11    17    24   any
  通过Exception table可以看出: catch监听 0 ~ 4 字节类型为TextExc的异常。 finally为 0 ~ 4 以及 11 ~ 17 字节任何类型的异常。
  也就说 catch block 本身也在 finally block 的管辖范围之内。
  如果catch block 中有 return statement,那么也一定是在 finally block 之后执行。

10。12DOT行情分析消息面今天下午波卡生态预言机协议Paralink将进行版本更新10月12日消息,波卡生态预言机协议Paralink发布消息称正在进行版本更新相关工作。目前,Paralink团队正在10。13ETH晚间分析日线级别来看和昨天走势差不多,macd多头缩量,kdj三线向下,看来币价还有回落,4小时级别看,目前以太价格在布林带下轨一线上下徘徊,上方5日均线跟布林带中轨一线交叉形成上方阻力区10。14ETH行情分析及观点昨天以太的表现还是很强的收了一跟大阳,比特币和以太方向还是一致的昨日以太同样收了一根下影线比较长的接近光头的阳K线,低点在3410一线,而高点去到了3610一线,目前也已突破昨日收40小时超长续航的蓝牙耳机,SoundcoreLifeNote的体验最初结识Anker(安克),缘于一款60wPD快充套装,这款充电套装在我实际测评过程中,无论是做工细节,还是充电稳定性,都非常的优秀,也让我对安克这个国产品牌有着较好的印象,近期安新天绿能三季度净亏5166万元,460亿高额债务压力空前时代商学院研究员郑少娜在政府存量补贴逐步退出的情况下,新能源高度依赖政府补贴的初期状态已成为过去式,行业进入平价时代,而行业自身成本降低提高效率将成为驱动新能源行业长期成长的驱动因想用到2021,2017你该怎么选手机?这几款可以闭眼入不要笑!假如有一天你穿越回了2017,最大的问题是,应该买什么手机好呢?今天,就让我们介绍几部从现在看,2017年极其值得购买的手机!一荣耀V10当时这部手机找了赵丽颖代言,网上吹PGYTECH快拆四件套这能用那能用都能用摄影摄像行业,发展到今天,除了一些瓶颈外,生产周边的厂商也是非常多,而在方便实用方面,任何配件都不能替代快拆这种配件。有了快拆这个配件,可以轻松的让我们各个设备之间切换。而设备的通久旱之甘霖离合这样踩,科目二科目三早过了汽车增多和路况变得复杂,这都促进了驾照考试的改革,要知道不同时间的驾照考试难度都不同。在之前,驾照考试往往需要人工评判,这也就使得驾照能否考出多了一些人为因素,随后,驾照考试迎来了科三挂科几率高,多半是不注意这三点考驾照有多难?每个人车主的答案都不同,有些车主运气和实力并存,驾考的所有科目一遍过,当然也有一些学员在考试中总是挂科,连续重考了几次才通过。在驾照考试中的四个科目中,科目一和科目四电动车符合这两个标准,需要持证上路,有C1驾照的车主注意了我国拥有了世界上最大的电动车生产销售市场,虽然电动车并不像汽车市场那样繁荣,但是依旧不能小瞧,我国的电动车在国外市场拥有了很高的名气和销量。电动车在这些年中的发展非常迅速,不仅拥有旧电动车置换有猫腻,外行人可能不懂,内行人讲出门道电动车新国标和新交规正在如火如荼进行中,大家在网上可以看到有些地区的过渡期已经结束,这种情况下超标电动车就无法正常使用了。对于不符合新国标电动车的处理方法一共有两个其一就是以旧换新
Python入门题041比较两个列表的异同题目给出2个列表,1,2和2,3。输出他们的相同元素,和不同元素。结果分别为2和1,3pythonlist集合操作异或操作视频教程Python入门题041比较两个列表的异同代码1l我是真的不明白并且非常讨厌,现在的有些手机为什么用玻璃背壳,难道是自信的认为这样很帅?我曾经拿着iphone6,在高铁上电话打不出去,网也上不了。看着身边拿着华为的几位同事上网刷剧打电话都不耽误。我陷入了深深的思考中,装X却被同事取笑,说我买高档手机是拿来当装饰品的java提供的线程池java提供的线程池Java中默认实现好的线程池又有哪些呢?今天就给大家分享一下Java中默认实现了的线程池,废话不多说,我们就一起直接看一下吧。SingleThreadExecu为什么现在打滴滴越来越慢,好长时间打不到?为什么现在打滴滴越来越慢,好长时间打不到呢?我就是兼职跑滴滴的,下图为证,是我这几个月的流水我以滴滴司机的立场来谈谈原因,主要有以下几点司机没利润。由于平台派单规则,3公里以内都得为什么说光刻机难以制作?光刻机是芯片制造中必不可少的精密设备。其难度甚至超过航空发动机。首先是在技术上的难度光刻机可以说每个部件都是科技含量很高,步步困难重重。瓶颈主要集中在透镜掩膜版光源能量控制器等。下过几年计算机专业将烂大街呢,为什么?儿子今年大一计算机专业?计算机专业人才不会饱和,只是分工越来越细,要求越来越高,工资也会随着所从事的具体工作具体岗位而定。拿尖端的来说,华为够牛的吧,它还在不断地说需要芯片人才,需要创新人才。拿日常的来说三星GalaxyS22明年春节前后发布梦幻配置,苹果表示压力很大由于上一代三星GalaxyS21功耗发热问题饱受用户的吐槽,表示骁龙888发热非常严重,不少三星用户表示想等GalaxyS22,根据最新的消息称,三星GalaxyS22预计将在明年LCD永不为奴的背后究竟是什么前段时间,Redmi产品总监王腾在微博上与网友互动时的一句话引起了我的注意想要LCD旗舰可以考虑RedmiK30S至尊版,现在还有货。咋的,都2021年了还在推荐去年的旗舰呢?其实曝Windows11致使游戏性能暴跌,iPhone12让路新机跌至爱疯价Windows11正式发布,你更新了吗?如果您使用的是AMD锐龙处理器并且喜欢玩游戏,那么您应该等待。AMD和微软官方今天宣布了两个AMD处理器在Windows11系统上的兼容性问什么手机实用?过不了过久就是一年一度的双十一,手机厂商么每年都会发布自家双十一当天的从成绩,证明自己,国产手机现在基本都还停留在用出货量证明自己的层面,还没有哪一家开始用利润证明自己。往往在双十助听器只佩戴一个,跟人沟通时有障碍吗?如果你的听力有一只耳朵正常,那就可以戴一个,如果两个耳朵都有听力损失,那就必须要两个耳朵同时佩戴。双耳配戴可以提高语言的清晰度,听声音是立体声,假如你只带一个就好像用一只眼睛看世界