java文件解析器_jvm:java类文件结构(字节码文件的解析)

1、java虚拟机简介

不是只有java编译器才能完成java程序到字节码的编译过程

cae31d0487f25f72f38a6bb034c0fc0d.png

674e11c2d6bf46058b949834ea10dd75.png

(2)定义

java二进制字节码的运行环境

(3)好处

一次编写,到处运行的基础

自动内存管理,垃圾回收功能,大大减轻了程序员的负担

数组下标越界检查

多态

(4)比较

4b5a102fd3295c106b50d2152fde4d6b.png

2、字节码文件(.class)的组成内容

5066ef9ce847f76ce3d3d43bb78f24ac.png

cf1022477675c66a089e44c5cd0f5642.png

无符号数:就是数值

表:一个结构

3、常量池(主要存放字面量和符号引用)

(1)字面量

String string1="cunnuanhuakai";

字面量就是等或右边的值,即:cunnuanhuakai

(2)符号引用:包括三类常量

类和接口的全限定名:

pers.zhb.web.servlet.IndexServlet

字段的名称和描述符:

private、public等

方法的名称和描述符:

private、public等

4、在Notepad++中安装插件

(1)下载插件

(2)将下载的插件放到Notepad++安装目录的plunges目录下

(3)导入插件

0fb1158f49550225440a286ecbb9dd71.png

(4)按8bit的方式查看class文件:

88907bedc47ef1d7d0011d0c4ecd4dd0.png

5、字节码文件的解析

(1)11种数据类型结构表:

47b6409b8b9789f088bdc3002b02d585.png

b37a7aed8bd869a0013daa07c1c2d96e.png

u1:一个字节

u2:两个字节... ...

(2)字节码文件的解析(字节码文件为二进制,只是查看方便显示十六进制)

查看字节码文件(转换为16进制):

79bda91442c2d5a794f13f8e06830814.png

fc3c7c1d96fa79aae02bbe2db610619e.png

要进行解析需要将16进制转化为十进制,然后,对应结构表。

0a:十进制为10,对应表格中的Methodref,又由于索引项每一个占了两字节,因此,索引项分别为14和38

运行:javap -v 命令对解析结果进行验证:

684a0e3a546e61263085ba77764c8087.png

程序源码:

public classStudent {privateString name;privateInteger age;publicStudent(String name, Integer age) {this.name =name;this.age =age;

}public voidtestPara(Student student1){

student1.name="zhang";

}public voidtestPara1(Student student2){

student2=new Student("liu",11);

}public static voidmain(String args[]){

Student student=new Student("zhai",12);

student.testPara(student);

System.out.println(student.name);

student.testPara1(student);

System.out.println(student.name);

}

}

(3)clinit与init:

f3f8f81dda25f7e49115fe017d27a124.png

clinit:所有的类变量初始化语句和静态初始化语句

init:调用new初始化对象的时候

调用反射的时候(newInstance())

调用clone方法的时候

序列化的时候

(4)虚拟机的执行过程

36139c94e946301723641a4b4a1b3f6f.png

(5)访问标志:紧接着常量池之后的两个字节代表访问标志,用于识别类或接口的访问信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值