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

本文详细解析了Java类文件编译后的字节码文件结构,包括魔数、版本号、常量池等关键组成部分,并解释了如何通过这些信息理解类的方法、属性等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

难道我就这样过完这一生!

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值