java类编译成class文件以后,反编译class,有的语句看不懂了。

发布于 2021-11-22 16:27:09 字数 1436 浏览 902 评论 3

java相关代码


 int result = 0;
 int i = 0;
 String eMsg = "";
 while (i < 3) {
 try {
     result = this.mobileActionService.createRecord(info, model);
     break;
     } catch (Exception e) {
      if (e instanceof StaleObjectStateException ||  e instanceof StaleStateException ) {
         eMsg = e.getMessage();
         i++;
     } else {
         break;
     }
    }
 }




编译后的class文件

     int result = 0;
      int i = 0;
      String eMsg = "";
      label161: while (i < 3) {
        try {
          result = this.mobileActionService.createRecord(this.info, model);  code = true;
           //不明白这里,为什么没有break了。
        }
        catch (Exception e) {
          if ((e instanceof StaleObjectStateException)) break label161;  }
          if (!(e instanceof StaleStateException)) break;
        i++;
      }

编译后的语句让我有点看不懂了。为什么 while循环里的那个break语句没有了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尐偏执 2021-11-25 08:15:01

http://my.oschina.net/wensiqun/blog/117382。 里面的
“查看Class文件”可以解释

琴流音 2021-11-23 04:52:59

因为那个 break 是没用的,所以被编译器优化掉了。

如果那个 try-catch 代码块后,还有有效的代码 break 就不会被优化掉。 

孤独患者 2021-11-23 00:50:36

后面没有代码break就没必要了 优化的时候搞掉了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文