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的处理的更多相关文章

  1. js中退出语句break,continue和return 比较 (转载)

    在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 首先:break和continue两个一 ...

  2. js中退出语句break,continue和return 比较

    js中退出语句break,continue和return 比较 在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是 ...

  3. JS中break continue和return的用法?

    在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 break和continue: 退出循环 ...

  4. js中退出语句break,continue和return 比较(转)

    原链接:http://blog.163.com/ued_er/blog/static/199703159201210283107315/ js中退出语句break,continue和return 比较 ...

  5. js中的break,continue和return到底怎么用?

    为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...

  6. [转帖]Shell脚本中的break continue exit return

    Shell脚本中的break continue exit return 转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 cont ...

  7. 【疑点】js中的break,continue和return到底怎么用?

    转: [疑点]js中的break,continue和return到底怎么用? 为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在 ...

  8. js中退出语句break,continue和return 比较 (转)

    在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 首先:break和continue两个一 ...

  9. js中的break,continue和return的用法及区别

    为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...

  10. 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 ...

随机推荐

  1. Jersey RESTful WebService框架学习(八)maven搭建

    一.pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...

  2. 队列<一>

    这里用的递归法,采用两种版本,一种是C语言,一种是C++:但是,用C语言没有“引用”,所以采用的是指向指针的指针:而C++具备“引用”,所以直接用&引用,简洁: 先看C++的代码: BiTre ...

  3. multiprocessing、threading、gevent区别

    1. 进程是资源分配的单位 2. 线程是操作系统调度的单位 3. 进程切换需要的资源很最大,效率很低 4. 线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下) 5. 协程切换任务资源很小 ...

  4. mac终端的命令都失效的解决方法

    step1. 在terminal里面输入: export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin&qu ...

  5. 通过request获取网页资讯 通过BeautifulSoup剖析网页元素

    import  requests newsUrl ='http://news.sina.com.cn/china/' res = requests.get(newsUrl) res.encoding ...

  6. spoj high

    matrixtree定理裸体,学了行列式的n^3解法,(应该是能应用于所有行列式): 代码是参考某篇题解的... #include<iostream> #include<cstrin ...

  7. Android之TextView灵活使用

    Android之TextView灵活使用 在项目中有无遇到过这样一种程况,例如文字"王明今年10岁了", 但是数字10是从网络返回的数据, 而你又想把这个文字写在xml中, 过往我 ...

  8. 国内代码托管平台(Git)

    可以说GitHub的出现完全颠覆了以往大家对代码托管网站的认识.GitHub不但是一个代码托管网站,更是一个程序员的SNS社区.GitHub真正迷人的是它的创新能力与Geek精神,这些都是无法模仿的. ...

  9. 代码面试集锦 2 - Google

    Given the root to a binary tree, implement serialize(root), which serializes the tree into a string, ...

  10. 质量能量等效的泛化--物理学定律方程与等效原理的对应关系 Generalization of Mass-Energy Equivalence--Corresponding Relations between Equations of Physical Laws and Equiva

    前文所述,质能方程E=Mc^2可知质能等效,即可设计实验,使得实验无法分辨是何者变化. 泛化:所有的物理学定律方程都可看作方程两边的概念是等效的. 举几个栗子: 例一:F=ma--伊萨克爵士的代表作. ...