package com.****.test1;
/**
* try-finally的执行
* @author jame
* @date 2011年9月1日11:14:01
*/
public class ReturnTest {
public static void main(String[] args) {
System.out.println("main method:"+ReturnTest.test());
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
System.out.println("finally:"+x);
}
}
}
Compiled from "ReturnTest.java"
public class com.skyon.test1.ReturnTest extends java.lang.Object{
public com.skyon.test1.ReturnTest();
//初始化工作
Code:
0: aload_0 //将局部变量0位置对象取出来,压入栈push
1: invokespecial #1; //Method java/lang/Object."<init>":()V //调父类构造函数
4: return //返回本函数
public static void main(java.lang.String[]);
Code:
0: getstatic #2; //Field a/lang/System.out:Ljava/io/PrintStream;
//取出静态成员变量push入栈,常量解析池中的#2位置
3: invokestatic #3; //Method test:()I
//调用test()方法
6: invokevirtual #4; //Method java/io/PrintStream.println:(I)V
//调用println()方法
9: return
static int test();
Code:
0: iconst_1 //将x变量的初始值1放入操作数栈
1: istore_0 //将栈顶元素保存到局部变量位置0,pop
2: iload_0 //将局部变量0位置对象取出来,压入栈push
3: istore_1 //将栈顶元素保存到局部变量位置1,pop
4: iinc 0, 1 //将栈顶元素自加1再入栈
7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_0
11: invokevirtual #4; //Method java/io/PrintStream.println:(I)V
14: iload_1
15: ireturn
16: astore_2
17: iinc 0, 1
20: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
23: iload_0
24: invokevirtual #4; //Method java/io/PrintStream.println:(I)V
27: aload_2
28: athrow
Exception table:
from to target type
2 4 16 any
16 17 16 any
常见指令:
1、putstatic #5;
--putstatic当栈顶元素出栈放到常量解析池中的#5位置
2、iconst_1
--int常量1放入操作数栈
3、aload_0
--将局部变量0位置对象取出来,压入栈push
4、invokespecial #1; //Method java/lang/Object."<init>":()V
--调用父类构造方法,并出栈pop
5、putfield #2; //Field A:[I
--putfield指把栈顶对象pop,然后赋值给常量解析池中的#2位置
6、getstatic #3; //Field/lang/System.out:Ljava/io/PrintStream;
--取出静态成员变量push入栈,常量解析池中的#3位置
7、 dup
--复制当前栈顶对象,再压入栈push
8、astore_1
--将返回对象放到局部变量位置1,pop
9、istore_2
--将栈顶元素保存到局部变量位置2,pop
10、iinc 2, 1
--将栈顶元素自加1再入栈
11、invokevirtual #8; //Method java/io/PrintStream.println:(I)
--调用打印方法
12、 bipush 6
--bipush将(byte)字节形转换成(int)整形,并且压入栈push
13、iastore
--数据元素操作指令:在位置上放入刚存入的值pop 1 ;pop 0; pop 数组对象
分享到:
相关推荐
NULL 博文链接:https://shansun123.iteye.com/blog/658120
NULL 博文链接:https://josephmok.iteye.com/blog/813774
如何使用javap反编译字节码
源文件 ---javac编译--> 字节码文件. 字节码文件 --javap反编译--> 源文件.
在遇到一些小问题的时候我们经常会使用Javap反编译取得字节码来分析,虽然Javap能完成这个工作,但是有两个缺点,一方面操作麻烦,需要很多步骤,一方面没有文档注释,对新手来说看起字节码来比较麻烦。 这里推荐...
java class和源码 deep-in-jvm ...运行javap分析Class文件字节码 javap -verbose Main > Main.bytecode 分析包含内部类的源码编译出的Class文件 javap -verbose 'Main$Box.class' > 'Main$Box.bytecode'
在遇到一些小问题的时候我们经常会使用Javap反编译取得字节码来分析,虽然Javap能完成这个工作,但是有两个缺点,一方面操作麻烦,需要很多步骤,一方面没有文档注释,对新手来说看起字节码来比较麻烦。这里推荐一个...
Java提供了javap工具来反汇编和检查Java字节码。 这使作者可以查看其代码如何在较低级别上运行,了解如何对高级Scala概念进行编码以及潜在地发现性能问题。 使用javap一个挑战是正确指定类路径。 由于SBT知道您项目...
javap2p 技术内幕javap2p 技术内幕javap2p 技术内幕javap2p 技术内幕
总结javaP2P 编程中遇到的问题,以及P2P技术的核心问题,希望大家提出宝贵建议互相进步
Java运行原理 javap命令运行结果
本篇文章给大家分享了关于JAVA中关于javap命令的使用技巧以及相关代码分享,有需要的朋友参考学习下。
用java写的记事本,程序很完整,有字体的格式和字体颜色这两大功能,界面采用javax里面的swing组件,很好看。
介绍常用的JVM诊断和分析工具,并以死锁和OOM为例,展示这些工具的使用。 第八课 分析Java堆 MAT的使用案例 Jvisualvm介绍使用 介绍了Java堆的分析方法,以一个实例为基础,展示对堆的分析过程。 第九课 锁 ...
使用Java编程语言,对.class文件进行解析,类似于javap -v filename指令的效果,但是没有对attibutes属性进行解析,需要学习的可以下载,程序运行的效果在本人的博客的附录中
字节码到源代码映射器这是ExtendJ的扩展,它允许字节码到源代码的映射具有更好的粒度,这意味着可以找到生成特定字节码指令的Java代码的精确部分。如何使用ExtendJ 在主文件夹中,运行: ./gradlew --rerun-tasks...
JavaP7架构师课程
NULL 博文链接:https://bolinyang.iteye.com/blog/1830472
这是一个快速查看插件,可让您将Java .class文件预览为字节码。 它使用javap -c命令。 要求 苹果系统 已安装Java 安装 编译目标并将二进制文件复制到/Library/QuickLook或~/Library/QuickLook 。
cancelTrans() 该方法用于取消传输 confirmReceiveFile() 该方法用于确认传输文件 ...该方法写数据到Socket输出流中,它有三个重载版本,分别是写入整型数,写入长整型数和写入字节数组数据。