<small id='8UofK'></small> <noframes id='sE7X6fN'>

  • <tfoot id='PUe6'></tfoot>

      <legend id='OKX9'><style id='fF2S'><dir id='myGMth3'><q id='6x27owk'></q></dir></style></legend>
      <i id='QqOTI'><tr id='6Puhw9ZVs'><dt id='p9WZ'><q id='1MUXcdb8gq'><span id='fOypwC'><b id='fOAPrK7R0'><form id='9l4g6OqwRX'><ins id='hzldjR'></ins><ul id='aGPstC702'></ul><sub id='brZa'></sub></form><legend id='s5akTKSC'></legend><bdo id='MUGVho'><pre id='CzxUHNXro'><center id='jVT7r8O6J'></center></pre></bdo></b><th id='A2Ssj'></th></span></q></dt></tr></i><div id='v0doxi'><tfoot id='CQaOWSFvnw'></tfoot><dl id='kdnpRjW'><fieldset id='6YOoCy2'></fieldset></dl></div>

          <bdo id='iG0fTdS'></bdo><ul id='8y4gqT'></ul>

          1. <li id='rgD1GTE0e'></li>
            登陆

            章鱼彩票app-从字节码开端讲JVM是怎么进行Java反常处理的(上)

            admin 2019-07-13 164人围观 ,发现0个评论

            Java开发的朋友关于Java中的Exception必定不生疏,在日常开发中也必定常常运用到Exception,许多朋友也总结出许多运用经历。今日咱们不说用法、不讲经历,咱们从一个别的一个视点来剖析Java中的反常处理:JVM是怎么完成Java的反常处理的。

            一小段示例代码

            要想剖章鱼彩票app-从字节码开端讲JVM是怎么进行Java反常处理的(上)析JVM是怎么完成Java的反常处理的,咱们就需要写一小段简略的代码,然后剖析它的字节码:

            这段代码十分简略:界说了一个add办法,完成了两个数相加的逻辑,不过在这个基础上,咱们还加了一点料,运用try-catch进行包裹,尽管这个catch底子进不去。

            经过javap指令咱们能够得到如下内容:

            其间0-3对应的便是[return a + b]这个句子,4-8则对应的是catch中的代码。

            在Java指令之后,咱们能够看到一个Exception table(红框所示),这儿记载了一切的try-catch的信息(反常信息记载表)。

            • from: try开端的当地。
            • to:try完毕的当地。
            • target:catch句子快开端方位
            • type:catch的类型

            多个catch的状况

            上面的代码只要一个catch,那么假如一个try对应多个catch又会怎么样呢?先看样例代码:

            然后用javap指令检查它的classfile:

            经过成果能够发现发现,章鱼彩票app-从字节码开端讲JVM是怎么进行Java反常处理的(上)多个catch和单个catch比较,仅仅多出来了相应的代码段和一条反常记载信息,并没有什么特别。

            所以能够得出定论:单个catch和多个catch的完成原理是相同的,没什么特别。那么try-finally又是怎么样的呢?

            try-finally的状况

            老规矩,先上样例代码:

            经过javap指令咱们能够得到如下的反常记载表:

            这次咱们发现和上面有一点点不相同了,多了两条type为any的反常记载信息。毫无疑问这两条记载是和finally的参加是有直接的联系的。经过调查咱们也能够发现,他们的from和to别离对应着try和catch句子块的开始方位,而target都指向了finally句子块。

            所以咱们能够得出如下的定论:finally的参加会为try以及每一个catch句子块都加上一个type为any的反常记载信息。

            JVM中try-catch-finally的基本原理

            经过上面临不同代码的字节码的剖析,咱们能够发现,JVM关于catch和finally的处理本质上是一模相同的。它把finally当成一种特别的catch来处理。大体逻辑为:

            • 履行Try句子块。
            • 假如抛章鱼彩票app-从字节码开端讲JVM是怎么进行Java反常处理的(上)出反常,就从反常处理表中查找对应的反常处理程序(经过抛出反常的方位和类型来确认)。
            • 最终不管是try仍是catch履行完今后,再一次从反常处理表中查g7126找一遍类型为any的记载,假如有就再进入其对应的代码。

            这篇文章先到这儿,从原理上讲了JVM关于Java反常的处理,下一篇文章将会介绍JVM是怎么完成Java反常的throw和catch的。

            小问题:一段没有抛出反常的代码被try-catch包裹,try-catch会影响功能吗?

            章鱼彩票app-中安科股份有限公司第十届监事会第七次会议决议公告

            2019-09-16
          2.   本公司及董事会全体成员

          3. 章鱼彩票app-北京新兴东方航空装备股份有限公司关于聘任证券事务代表的公告

            2019-09-16
          4.   本公司及董事会全体成员

            华塑控股股份有限公司关于财务报表格式变更的公告

            2019-09-16
          5.   2019年第五次临时股东大会决议公告

              本公司及董事会全体成员

            华西能源工业股份有限公司2019年第五次临时股东大会决议公告

            2019-09-16
          6. 请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP