`
truwarior
  • 浏览: 11749 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

java有用编译指令

    博客分类:
  • java
阅读更多
类A:
public class Test{
	public static void main(String[] arts){
		byte[] o = new byte[0];
		Object o1 = new Object();
	}
}



编译指令
javac的主要作用是把java源代码转化成相应的jvm指令,另外还会帮我们做一些如添加构造默认构造函数的工作等等。http://dreamhead.blogbus.com/logs/5999838.html
1,javac -d <目录> A.java
指定生成的A.class的位置

2,javac -verbose A.java
显示生成类文件时需要加载哪些类


反编译指令
javap可以帮助我们查看编译器生成的字节码与源代码的不同,以了解java编译器的工作原理
1,javap A(不带参数)
E:\Workspace>javap Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
    public Test();
    public static void main(java.lang.String[]);
}



打印类的成员变量和方法,如果类没有显示的从其他类派生,则默认为从Object类继承。如果没有显示的构造函数,则编译器会生成一个缺省的构造函数。

2,javap -c A
E:\Workspace>javap -c  Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   iconst_0
   1:   newarray byte
   3:   astore_1
   4:   new     #2; //class java/lang/Object
   7:   dup
   8:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   11:  astore_2
   12:  return

}

显示了方法的具体字节码,例如:默认构造函数Test()调用了父类Object的构造函数。

3,javap -l A
E:\Workspace>javap -l Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
  LineNumberTable:
   line 1: 0

public static void main(java.lang.String[]);
  LineNumberTable:
   line 3: 0
   line 4: 4
   line 5: 12

}

显示了字节吗与源代码对应的信息,例如 line 3:0 表示源代码中的第三行对应与字节码中的 0:   iconst_0,也就是源代码编译时指令的开始位置。生成一个0长度的字节数组对象需要执行3条操作指令,生成一个Object对象需要执行7条操作指令。

4,javap -p A
E:\Workspace>javap -p Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
    public Test();
    public static void main(java.lang.String[]);
}

额外地打印private成员和方法的信息。该类不存在private,所以没有打印。
4
0
分享到:
评论

相关推荐

    java初学者必看

    尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,不妨过来讨论一下哦! 第1章 Java概述 1.1 Java的发展史 1.1.1 Java起源 1.1.2 Java发展 1.2 Java是什么 1.2.1 Java语言 1.2.2 Java平台 1.2.3 ...

    java 面试题 总结

    (可以正确编译) 26、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor. 27、String s = new ...

    Despector:Java Kotlin反编译器和AST库

    尽管对于修改源代码和重建Java类文件没有帮助,但fill AST对于反编译和代码分析非常有用,在这些代码分析中,您希望在语句而不是操作码级别上搜索模式。 有关支持和讨论,请参见#decompiler频道上irc.esper.net上...

    超级有影响力霸气的Java面试题大全文档

    (可以正确编译) 29、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor. 30、String s = new ...

    c#学习笔记.txt

    委托实例的一个有趣和有用的属性是它不了解或不关心它所封装的方法的类;真正重要的只是方法要与委托的类型兼容, 这使委托非常适合“匿名”调用。可选的形参表指定委托的参数,而返回类型则指示委托的返回类型。如果...

    深入剖析Nginx

    《深入剖析Nginx》不是一本关于Nginx配置指令如何使用的介绍手册。《深入剖析Nginx》重点在于通过剖析Nginx的源代码,探究其功能结构及其内部实现原理。...附录部分提供了Nginx的编译模块、运行配置等有用信息。

    WAM:沃伦抽象机的实现

    编译器:这包含标记文件/字符串并将标记编译为 WAM 指令的所有代码。 gui:这里是 GUI 文件。 指令:这里是存储的各种 WAM 指令类。 main:WAM 的主接口加上一个测试主类。 从这里开始。 解析器:我使用 ANTLR ...

    ist的matlab代码-vortrag-haskell:有关Haskell的介绍性演讲的幻灯片(德语)

    Haskell是一种现代创新的编程语言,在很多方面与已知的命令式语言有很大不同:Haskell程序不是由要执行的指令序列组成,而是由声明的集合组成,声明的顺序无关紧要。 也没有可变的变量,只有真正需要的才被评估。 ...

    C#微软培训资料

    &lt;&lt;page 1&gt;&gt; page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    1、将业务层与表示层分离:使用JSP技术,网络开发人员可充分使用HTML来设计页面显示部分(如字体颜色等),并使用JSP指令或者JAVA程序片段来生成网页上的动态内容; 2、能够跨平台:JSP支持绝大部分平台,包括现在...

    基于J2EE框架的个人博客系统项目毕业设计论...

    1、将业务层与表示层分离:使用JSP技术,网络开发人员可充分使用HTML来设计页面显示部分(如字体颜色等),并使用JSP指令或者JAVA程序片段来生成网页上的动态内容; 2、能够跨平台:JSP支持绝大部分平台,包括现在...

    PERL语言编程

    比如你用不着知道什么特殊的指令就可以编译 Perl 程序--只要把它当做批处理或者 shell 脚本执行就可以了。Perl 的类型和结构很容易使用和理解。Perl 对你的数据没有任何限制--你的字串和数组可以要多长就多长(只要...

    RED HAT LINUX 6大全

    9.5.3 基本SSI指令 165 9.5.4 流控制 167 9.6 启动和停止服务器 167 9.6.1 手动启动服务器 167 9.6.2 /etc/rc.d httpd脚本 168 9.7 配置文件清单 170 9.8 小结 185 第10章 Internet新闻 186 10.1 Linux与新闻组 186 ...

    Oracle9i的init.ora参数中文说明

    ), interpreted (然后 PL/SQL 模块将被编译为 PL/SQL 字节代码格式), debug (PL/SQL 模块将用探测调试符号来编译), non_debug。 默认值: " interpreted, non_debug " plsql_native_linker: 说明: 此参数指定链接...

    校内API开发. pdf

    或者通过名字或者通过列号来查找在通过列名字访问数据情况下如果在这些名字中有个typo在编译时就不会被 检测出来当列名散布在你代码中时就很难在以后改变它们名字了如果你通过列号来访问数据代码更难读而且你 需要...

    C语言入门经典(第4版)--源代码及课后练习答案

    IvorHorton还著有关于C、C++和Java的多部入门级好书,如《C语言入门经典(第4版)》和《C++入门经典(第3版)》。 译者  杨浩,知名译者,大学讲师,从事机械和计算机方面的教学和研究多年,发表论文数篇,参编和翻译的...

    informix 实用大全

    36.7 使用编译时指令 36.8 与用户交互 36.9 了解流控制语句 36.10 准备游标与更新语句 36.11 使用表单、窗口处理和屏幕框 36.12 了解函数 36.13 中断sql语句 36.14 使用环境变量 36.15 了解sqlca...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    CruiseYoung提供的带有详细书签的电子书籍目录 ... 该资料是《Oracle SQL高级编程》的源代码 对应的书籍资料见: Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐) 基本信息 原书名: Pro Oracle SQL ...

Global site tag (gtag.js) - Google Analytics