java类编译成class文件以后,反编译class,有的语句看不懂了。
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
http://my.oschina.net/wensiqun/blog/117382。 里面的
“查看Class文件”可以解释
因为那个 break 是没用的,所以被编译器优化掉了。
如果那个 try-catch 代码块后,还有有效的代码 break 就不会被优化掉。
后面没有代码break就没必要了 优化的时候搞掉了