您的位置:首页 > 编程语言 > Java开发

java虚拟机分析-字节码解析

2015-11-15 12:03 375 查看
难道我就这样过完这一生!

java类编译成class文件。以16机制的形式存在

魔数:CAFEBABE 表名这是一个java字节码文件。

java版本号:Minor version,major version

常量池大小:两个字节

头部为3个字节(常量类型,所属类,内容)

Methodref class #4 name-and-type #15 代表这个一个方法,她属于#4类,方法名与返回值为#15

Fieldred class #16 name-and-type #17 代表这个一个属性,她属于#16类,属性名和类型为#17

String #18 代表这是一个String常量,指向#18

Class name #19 代表这是一个类型,指向#19

UTF length=6

<init>

代表这是一个UTF类型常量,占6个字节。也代表着构造函数。

UTF length=3

()V

代表返回值类型为void

UTF length=4

Code

代表这段是代码

UTF length=15

LineNumberTable

代表这是行号表

UTF length=4

main

代表这是main函数名

UTF length=22

([Ljava/lang/String;)V

代表函数的参数列表为String类型数组,然后返回值为void,其中[代表数组,分号代表结束,java/lang/String代表参数类型,L代表,V代表返回值为void

UTF length=10

SourceFile

UTF length=12

Message.java

NameAndType name #7 descriptor #8

代表这是一个描述名字与属性的,可以用来描述属性,方法

UTF length=23

helloworld!

这里代表String类型的常量值

类信息:常量列表后面就是关于这个类本身的信息描述了。如这个类的访问控制,名称和类型,以及是否有父类或是否实现了某些接口等描述信息。

access_flags=33

this=#6

super=#4

类访问控制的两个字节中实际上只使用了5bit,其他的bit还没有定义,这5个bit中第一个bit表示的是该类是否为public(1表示为public类,否则为private类)。所以对类的访问修饰只有两种,要么public要么private
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: