Gen对于break、continue与return的处理
void tryItOut () {}
void wrapItUp () {}
void tryFinally() {
for (int i = 0; i < 2; i++) {
try {
tryItOut();
} finally {
wrapItUp();
return;
}
}
}
生成的class文件的内容如下:
void tryFinally();
flags:
Code:
stack=2, locals=3, args_size=1
0: iconst_0 // 将0压入栈顶
1: istore_1 // 将0存入本地变量表1的位置
2: iload_1
3: iconst_2
4: if_icmpge 22
// 进入try的body体
7: aload_0
8: invokevirtual #2 // Method tryItOut:()V
// 进入finally的body体
11: aload_0
12: invokevirtual #3 // Method wrapItUp:()V
15: return
16: astore_2 // 将throwable异常存储到本地变量表2的位置
17: aload_0
18: invokevirtual #3 // Method wrapItUp:()V
21: return
22: return
Exception table:
from to target type
7 11 16 any
16 17 16 any
public void t(boolean a, int b) {
E: {
while (a) {
if (b == 1) {
continue;
}
if (b == 2) {
break;
}
if (b == 3) {
break E;
}
}
int c=2;
}
}
class文件内容如下:
public void t(boolean, int);
flags: ACC_PUBLIC
Code:
stack=2, locals=4, args_size=3
0: iload_1
1: ifeq 28 // 当栈顶int型数值等于0 时跳转
// continue的处理
4: iload_2 // 将形式参数变量b压入栈顶
5: iconst_1 // 将常量1压入栈顶
6: if_icmpne 12 // 比较栈顶两int型数值,当且仅当不相等时结果为真,为真后跳转到12
9: goto 0
// break的处理
12: iload_2
13: iconst_2
14: if_icmpne 20
17: goto 28
// break的处理
20: iload_2
21: iconst_3
22: if_icmpne 0
25: goto 30
28: iconst_2
29: istore_3
30: return
本地变量表的内容如下:
0:this
1:方法形式参数a
2:方法形式参数b
Gen对于break、continue与return的处理的更多相关文章
- js中退出语句break,continue和return 比较 (转载)
在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 首先:break和continue两个一 ...
- js中退出语句break,continue和return 比较
js中退出语句break,continue和return 比较 在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是 ...
- JS中break continue和return的用法?
在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 break和continue: 退出循环 ...
- js中退出语句break,continue和return 比较(转)
原链接:http://blog.163.com/ued_er/blog/static/199703159201210283107315/ js中退出语句break,continue和return 比较 ...
- js中的break,continue和return到底怎么用?
为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...
- [转帖]Shell脚本中的break continue exit return
Shell脚本中的break continue exit return 转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 cont ...
- 【疑点】js中的break,continue和return到底怎么用?
转: [疑点]js中的break,continue和return到底怎么用? 为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在 ...
- js中退出语句break,continue和return 比较 (转)
在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 首先:break和continue两个一 ...
- js中的break,continue和return的用法及区别
为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...
- break continue exit return 的区别
[root@localhost day1]# cat ss.sh #!/bin/bash for ((i=0;i<5;i++)) do if [ $i -eq 3 ] then break #c ...
随机推荐
- Nodejs的测试和测试驱动开发
测试是保证软件质量必不可少的一环.测试有很多形式:手动.自动.单元测试等等.这里我们只聊使用Mocha这个框架在Nodejs中实现单元测试.单元测试是测试等重要组成,这样的测试只对于一个方法,这样的一 ...
- python编写producer、consumer
自主producer.consumer 首先在不同的终端,分别开启两个consumer,保证groupid一致 ]# python consumer_kafka.py 执行一次producer ]# ...
- node-lessons
教程:https://github.com/alsotang/node-lessons 0 nvm 的全称是 Node Version Manager,之所以需要这个工具,是因为 Node.js 的各 ...
- shell 中的 && 和 ||
shell 中的 && 和 || 简言之,shell 中 && --左边的命令执行成功才会执行右边的命令. || -- 左边的命令执行失败才会执行右边的命令.
- iOS开发中与库相关的术语
动态库 VS 静态库 Static frameworks are linked at compile time. Dynamic frameworks are linked at runtime
- iOS笔记之UIKit_UINavigationController
//设置导航条的样式 self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent; //默认是白色 B ...
- 敏捷Scrum框架最全总结! [转载]
[原文链接] 2016-05-03 Sting 敏捷开发作为目前流行的开发方法,为快速迭代提供了足够的理论支持,但敏捷开发方式不应该成为忽略文档和需求分析的过程,注意每个sprint的引入,任务燃烧, ...
- 国内代码托管平台(Git)
可以说GitHub的出现完全颠覆了以往大家对代码托管网站的认识.GitHub不但是一个代码托管网站,更是一个程序员的SNS社区.GitHub真正迷人的是它的创新能力与Geek精神,这些都是无法模仿的. ...
- Javascript 金额、时间格式化
一晃2017年已经过去了,2018年已经悄然而至.回首过去的2017年,工作还是一如既往,但生活却有了翻天覆地的变化.尚还觉得自己还小的自己,在过去的一年中却完成了两件人生大事,回想起来还是一脸懵逼, ...
- C#基础——C#中问号的使用
1. 可空类型修饰符(?): 引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空. 例如:string str=null; 是正确的,int i=null; 编译器就会报错. 为了使值 ...