字节码文件结构是一组基于8位字节的二进制流。数据项按严格的顺序排列在Class文件中,并且紧凑,不添加任何分隔符。在字节码结构中,有两种基本数据类型来表示字节码文件格式:无符号号和表。
无符号数字属于最基本的数据类型。它使用u1、u2、U4和U8 677分别表示1字节、2字节、4字节和8字节的无符号数。无符号数字可以用来描述用UTF-8编码的数字、索引引用、数值或字符串值。例如,在下面的表中,第一行中的U4表示Class文件的前四个字节的魔术数,第二行中的U2表示JDK的次要版本号。
表是由多个无符号数字或作为数据项的其他表组成的复合数据类型。所有表通常以_info结尾。表用于描述具有分层复合结构的数据。例如,下表的第5行表示cp_info(常量池)类型的表,其中存储了该类的所有常量。
整个字节码文件本质上是一个表,它由以下部分组成:
为了便于理解,我将一个完整的表划分为以下七个部分,它们构成了一个完整的类字节码文件:
-
魔数与Class文件版本
-
常量池
-
访问标志
-
类索引、父类索引、接口索引
-
字段表集合
-
方法表集合
-
属性表集合
在开始之前,让我们写一个简单的介绍你好世界。接下来,我们将以Hello World文件的已编译字节码文件为例,解析字节码文件的内容。
public class Demo{
public static void main(String args[]){
System.out.println("Hello World.");
}
}
然后运行javac Demo.命令行上的Java命令编译类,生成一个演示。类文件。
然后我们使用纯文本编辑器打开生成的Demo。类文件。
cafe babe 0000 0034 001d 0a00 0600 0f09
0010 0011 0800 120a 0013 0014 0700 1507
0016 0100 063c 696e 6974 3e01 0003 2829
5601 0004 436f 6465 0100 0f4c 696e 654e
756d 6265 7254 6162 6c65 0100 046d 6169
6e01 0016 285b 4c6a 6176 612f 6c61 6e67
2f53 7472 696e 673b 2956 0100 0a53 6f75
7263 6546 696c 6501 0009 4465 6d6f 2e6a
6176 610c 0007 0008 0700 170c 0018 0019
0100 0b48 656c 6c6f 2057 6f72 6c64 0700
1a0c 001b 001c 0100 0444 656d 6f01 0010
6a61 7661 2f6c 616e 672f 4f62 6a65 6374
0100 106a 6176 612f 6c61 6e67 2f53 7973
7465 6d01 0003 6f75 7401 0015 4c6a 6176
612f 696f 2f50 7269 6e74 5374 7265 616d
3b01 0013 6a61 7661 2f69 6f2f 5072 696e
7453 7472 6561 6d01 0007 7072 696e 746c
# 最后分享一波我的面试宝典——一线互联网大厂Java核心面试题库
**以下是我个人的一些做法,希望可以给各位提供一些帮助:**
> **[点击《一线互联网大厂Java核心面试题库》即可免费领取](https://gitee.com/vip204888/java-p7)**,整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新...可star一下!
![image](https://img-blog.csdnimg.cn/img_convert/185d035b03551f722bf541a1834389a0.png)
**283页的Java进阶核心pdf文档**
> Java部分:Java基础,集合,并发,多线程,JVM,设计模式
>
> 数据结构算法:Java算法,数据结构
>
> 开源框架部分:Spring,MyBatis,MVC,netty,tomcat
>
> 分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等
>
> 微服务部分:SpringBoot,SpringCloud,Dubbo,Docker
![image](https://img-blog.csdnimg.cn/img_convert/5b80fbfcd2eee7de02437547500fc15b.png)
**还有源码相关的阅读学习**
![image](https://img-blog.csdnimg.cn/img_convert/e8cc2da450b7d2b49792bdf058470410.png)
SpringCloud,Dubbo,Docker
[外链图片转存中...(img-6W5ENHE0-1628676108440)]
**还有源码相关的阅读学习**
[外链图片转存中...(img-iVI9fkdq-1628676108443)]