Java代码

\\A.java
public class A{}
  • 1
  • 2
  • 1
  • 2

javac A.java \\得到 A.class 
javap -v A.class

下面是javap工具帮我们生成的文本的字节码文件

Classfile /home/yao/test/javap/A.class
Last modified Aug 30, 2016; size 176 bytes
MD5 checksum f35fe1f44d02cd491e6561a30327ceb5
Compiled from "A.java"
public class A
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #3.#10 // java/lang/Object."<init>":()V
#2 = Class #11 // A
#3 = Class #12 // java/lang/Object
#4 = Utf8 <init>
#5 = Utf8 ()V
#6 = Utf8 Code
#7 = Utf8 LineNumberTable
#8 = Utf8 SourceFile
#9 = Utf8 A.java
#10 = NameAndType #4:#5 // "<init>":()V
#11 = Utf8 A
#12 = Utf8 java/lang/Object
{
public A();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 1: 0
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

不过瘾?自己按照java规范翻译一遍~

\\通过linux hexdump -C A.class 可以以16进制方式查看文件
00000000 ca fe ba be 00 00 00 34 00 0d 0a 00 03 00 0a 07 |.......4........|
00000010 00 0b 07 00 0c 01 00 06 3c 69 6e 69 74 3e 01 00 |........<init>..|
00000020 03 28 29 56 01 00 04 43 6f 64 65 01 00 0f 4c 69 |.()V...Code...Li|
00000030 6e 65 4e 75 6d 62 65 72 54 61 62 6c 65 01 00 0a |neNumberTable...|
00000040 53 6f 75 72 63 65 46 69 6c 65 01 00 06 41 2e 6a |SourceFile...A.j|
00000050 61 76 61 0c 00 04 00 05 01 00 01 41 01 00 10 6a |ava........A...j|
00000060 61 76 61 2f 6c 61 6e 67 2f 4f 62 6a 65 63 74 00 |ava/lang/Object.|
00000070 21 00 02 00 03 00 00 00 00 00 01 00 01 00 04 00 |!...............|
00000080 05 00 01 00 06 00 00 00 1d 00 01 00 01 00 00 00 |................|
00000090 05 2a b7 00 01 b1 00 00 00 01 00 07 00 00 00 06 |.*..............|
000000a0 00 01 00 00 00 01 00 01 00 08 00 00 00 02 00 09 |................|
000000b0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

下面就按java规范来翻译一下, 
java官方字节码规范 https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.24

->ca fe ba be
magic u4
->00 00 00 34
minor_verion u2;major_version u2,jkd8
->00 0d ->13
constant_pool_count
->#1 0a 00 03 00 0a
[CONSTANT_METHOD] u1 tag; u2 class_index; u2 name_and_type_index
->#2 07 00 0b
[CONSTANT_CLASS] u1 tag; u2 name_index
->#3 07 00 0c
[CONSTANT_CLASS] u1 tag; u2 name_index
->#4 01 00 06 3c 69 6e 69 74 3e
[CONSTANT_Utf8] u1 tag; u2 length; u1[length] literal <init>
->#5 01 00 03 28 29 56
[CONSTANT_Utf8] u1 tag; u2 length; u1[length] literal ()V
->#6 01 00 04 43 6f 64 65
[CONSTANT_Utf8] u1 tag; u2 length; u1[length] literal Code
->#7 01 00 0f 4c 69 6e 65 4e 75 6d 62 65 72 54 61 62 6c 65
[CONSTANT_Utf8] u1 tag; u2 length; u1[length] literal LineNumberTable
->#8 01 00 0a 53 6f 75 72 63 65 46 69 6c 65
[CONSTANT_Utf8] u1 tag; u2 length; u1[length] literal SourceFile
->#9 01 00 06 41 2e 6a 61 76 61
[CONSTANT_Utf8] u1 tag; u2 length; u1[length] literal A.java
->#10 0c 00 04 00 05
[CONSTANT_NAEMANDTYPE] u1 tag;u2 name_index;u2 descriptor_index; 00 04-><init> 00 05>()V
->#11 01 00 01 41
[CONSTANT_Utf8] u1 tag; u2 length; u1[length] literal A
->#12 01 00 10 6a 61 76 61 2f 6c 61 6e 67 2f 4f 62 6a 65 63 74
[CONSTANT_Utf8] u1 tag; u2 length; u1[length] literal java/lange/Object
->00 21
access flag u2, ACC_PUBLIC,ACC_SUPPER
->00 02
u2 this_class
->00 03
u2 super_class
->00 00
u2 interfaces count
->00 00
u2 fields count
->00 01
u2 methods count
{ method info #1
->00 01
u2 access flag public
->00 04
u2 name index <init>
->00 05
u2 descriptor index ()V
->00 01
u2 attributes_count
->00 06
u2 attribute_name_index Code
->00 00 00 1d
u4 attribute_length
->00 01
u2 max_stack
->00 01
u2 max_locals
->00 00 00 05
u4 code_length
->2a b7 00 01 b1
u1 code[length]
->00 00
u2 exception_table_length;
->00 01
u2 attributes_count
->00 07
u2 attributes_name -> LineNumberTable
->00 00 00 06
u4 attributes len
->00 01
u2 line_number_table_length
->00 00
u2 start pc
->00 01
u2 linue number
}
->00 01
u2 attributes count
->00 08
u2 attribute_name_index > SourceFIle
->00 00 00 02
u4 attribute_length
->00 09
u1 info[attribute_length] 00 09 -> #9 A.java

java字节码文件 helloworld的更多相关文章

  1. @使用javap反编译Java字节码文件

    在Sun公司提供的JDK中,就已经内置了Java字节码文件反编译工具javap.exe(位于JDK安装目录的bin文件夹下). 我们可以在dos窗口中使用javap来反汇编指定的Java字节码文件.在 ...

  2. OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)

    在上一篇OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构中,我们大致了解了Java字节码文件的结构. 本篇详细地介绍了如何读取.class文件的大部分细节. 1.构造文件  ...

  3. OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构

    最近在看OpenJDK源码的过程中,顺便看了Java编译器(javac)的源码. 为了理解javac的源码,需要先搞懂Java字节码文件(.class)的结构. 于是,我就认真看了下OpenJDK中J ...

  4. java字节码文件

    查看字节码文件: javap  -verbose  HellloWorld.class

  5. 这一次,彻底弄懂「Java字节码文件」

    提前祝福各位读者

  6. Java字节码操纵框架ASM小试

    本文主要内容: ASM是什么 JVM指令 Java字节码文件 ASM编程模型 ASM示例 参考资料汇总 JVM详细指令 ASM是什么 ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既 ...

  7. 命令查看java的class字节码文件、verbose、synchronize、javac、javap

    查看Java字节码 1 javac –verbose查看运行类是加载了那些jar文件 HelloWorld演示: public class Test { public static void main ...

  8. 从 HelloWorld 看 Java 字节码文件结构

    很多时候,我们都是从代码层面去学习如何编程,却很少去看看一个个 Java 代码背后到底是什么.今天就让我们从一个最简单的 Hello World 开始看一看 Java 的类文件结构. 在开始之前,我们 ...

  9. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

随机推荐

  1. Spring笔记②--各种属性注入

    Ioc 反转控制 反转资源获取的方向 分离接口与实现 采用工厂模式 采用反转控制   Di 依赖注入 依赖容器把资源注入   配置bean 通过全类名(反射) 配置形式:基于xml方式 Ioc容器的b ...

  2. Java jdbc链接 mySQL 写的crud

    1.JDBC(Java Data Base Connectivity java数据库连接)概念: 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...

  3. vue开发 ES5——> ES6设置

  4. sklearn-特征工程之特征选择

    title: sklearn-特征工程之特征选择 date: 2016-11-25 22:49:24 categories: skearn tags: sklearn --- 抄袭/参考资料 使用sk ...

  5. 第215天:Angular---指令

    指令(Directive) AngularJS 有一套完整的.可扩展的.用来帮助 Web 应用开发的指令集 在 DOM 编译期间,和 HTML 关联着的指令会被检测到,并且被执行 在 AngularJ ...

  6. Eclipse报错Project configuration is not up-to-date with pom.xml

    1.问题 Description Resource Path Location Type Project configuration is not up-to-date with pom.xml. S ...

  7. ldap添加memberof支持

    安装请查看上一篇博客,传送门:https://www.cnblogs.com/crysmile/p/9470508.html 如果使用LDAP仅仅作为用户统一登录中心,则参考安装文档即可:如果ldap ...

  8. BZOJ5104 Fib数列(二次剩余+BSGS)

    5在1e9+9下有二次剩余,那么fib的通项公式就有用了. 已知Fn,求n.注意到[(1+√5)/2]·[(1-√5)/2]=-1,于是换元,设t=[(1+√5)/2]n,原式变为√5·Fn=t-(- ...

  9. BZOJ4561 JLOI2016圆的异或并(扫描线+平衡树)

    考虑一条扫描线从左到右扫过这些圆.观察某一时刻直线与这些圆的交点,可以发现构成一个类似括号序列的东西,括号的包含关系与圆的包含关系是相同的.并且当扫描线逐渐移动时,括号间的相对顺序不变.于是考虑用se ...

  10. python爬虫headers设置后无效解决方案

    此次遇到的是一个函数使用不熟练造成的问题,但有了分析工具后可以很快定位到问题(此处推荐一个非常棒的抓包工具fiddler) 正文如下: 在爬取某个app数据时(app上的数据都是由http请求的),用 ...