<small id='axwmc'></small> <noframes id='No3b7S'>

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

      <legend id='Nxozrf'><style id='7z218Qk'><dir id='9pYt1hPo'><q id='7Ao6E'></q></dir></style></legend>
      <i id='ztw9Ko'><tr id='b0tcuDJRrL'><dt id='Zm6HihjolY'><q id='wNOTyQSs'><span id='5O2pd'><b id='nrupzq5jgH'><form id='SltM'><ins id='Whs8Fxe93r'></ins><ul id='pNdX'></ul><sub id='GOYfrFlTSH'></sub></form><legend id='mwxaq34N'></legend><bdo id='6MWV9R'><pre id='nLmBR2'><center id='5J47QFGO'></center></pre></bdo></b><th id='SPC1tL'></th></span></q></dt></tr></i><div id='ImkuTjB'><tfoot id='FbYXpC'></tfoot><dl id='nWAh4Pdif'><fieldset id='OBbyTdKpgz'></fieldset></dl></div>

          <bdo id='BywpF'></bdo><ul id='AcOF'></ul>

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

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

            admin 2019-07-13 219人围观 ,发现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会影响功能吗?

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