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 ...
随机推荐
- 在window平台下,自己DIY编译OpenSSL,Libcurl ,来支持HTTPS传输协议
1 缘起 原来就了解些libcurl,一直没有机会在项目实际使用libcurl. 恰好最近一个云存储的项目,服务器使用openstack 恰好我负责现在的一个云存储SDK c++版本的开发中. 与 ...
- C++获取当前进程绝对路径
获取进程的绝对路径(代码同时操作字符串获取了文件目录): 第一种代码: wstring GetProgramDir() { TCHAR exeFullPath[MAX_PATH]; // Full p ...
- C#版ObjectId
近来在准备弄一个开源的HIS,但一周过去了几乎没有进度.就卡在ID如何生成.HIS的数据库压力大,如何多数据库支持,减轻压力一直想去实现.拿不准纯数字ID段还是GUID一类的文本ID.最终在mongo ...
- matlab矢量场数值可视化(动态数值模拟)
https://blog.csdn.net/eric_e/article/details/81294092 D3.js实现数据可视化 三维可视化 风场可视化(数据插值):风场是动态变化的,实时刷新的, ...
- form表单提交时action路劲问题
项目总出现window上部署可以访问,linux下部署不能访问的问题 linux下访问action必须是全路径,可以加上“${pageContext.request.contextPath}” 便可 ...
- 《mysql必知必会》学习_第12章_20180801_欢
第12章:汇总数据 P76 avg()函数求平均值 select avg(prod_price) as avg_price from products; #计算prod_price的平均值,并且命名为 ...
- zoj2607
题意:如左图,给定A,B,C,D的面积分别为大于等于a,b,c,d,求最小的面积 思路:因为a,b肯定有一个是满的(不然还可压缩到更小),同理,ac,bd,cd都只有一个是满的,所以有可能是对角满的, ...
- 9.json和jsonpath
数据提取之JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适 ...
- MVVM 简化的Messager类
看MVVMLight的Messager源码,自己实现了一个简单的Messager类. Messager类可以在MVVM中,实现View与VM.VM与VM.View与View的通信. public cl ...
- JavaScript基础(3)-JS中的面向对象、定时器、BOM、位置信息
一.创建对象的几种常用方式. 1.使用Object或对象字面量创建对象: a.使用Object()内置的构造函数来创建对象,例如: var student = new Object(); // 创建一 ...