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

_凤求凰_ 发布于 2015/05/19 20:38
阅读 3K+
收藏 0

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语句没有了。

加载中
0
Force武装卫队
Force武装卫队
后面没有代码break就没必要了 优化的时候搞掉了
0
struct
struct

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

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

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