JVM入坑(一) - .class文件结构整体概述

.class文件的作用

java程序通过javac编译后,生成对应的.class文件,也称作字节码文件。.class文件与类对应,每个类都会生成一个对应的.class文件,用来记录该类的信息。
.class文件的结构有很严格的规范,所以一个.class可以在任意架构的CPU和系统的JVM上被读取加载,这也是java “一次编写各处运行” 的原因。

.class文件整体结构
classFile	 {
		u4 					magic; 											//魔数
		u2 					minor_version; 									//次版本号
		u2					major_version; 									//主版本号
		u2 					constant_pool_count; 							//常量池数据
		cp_info 			constant_pool[constant_pool_count-1]; 			//常量池
		u2 					access_flags; 									//类访问标志
		u2 					this_class; 									//当前类
		u2 					super_class; 									//父类
		u2					interfaces_count; 								//实现的接口数量
		u2 					interfaces[interfaces_count]; 					//接口
		u2 					fields_count; 									//字段数量
		field_info 			fields[fields_count]; 							//具体字段
		u2 					methods_count; 									//方法数量
		method_info 		methods[methods_count]; 						//具体方法
		u2 					attributes_count; 								//类属性数量
		attribute_info 		attributes[attributes_count]; 					//具体类属性
}

.class文件结构图

.class文件中存放的内容

JVM的规范规定,.class文件中有两种数据结构组成:无符号数、表

(1) 无符号数:基本数据类型,u1、u2、u4、u8分别代表1字节、2字节、4字节、8字节的无符号数,可以用来描述数字、索引引用、数量值或者按照utf8编码构成的字符串;比如上面结构中的u2 minor_version,表示用2个字节的长度存储次版本号,这两个字节16位的值就是次版本号的值;
(2) 表:由多个无符号数或其他表作为元素构成的复合型数据类型,一般习惯性用“_info”结尾;比如cp_info就是存放常量的表(数组);表也可以理解为数组

查看.class文件

比如有如下代码:

class A{
	public static void main(String args[]){
		int a = 10;
	}
}

生成对应的A.class后并打开,可以看到如下内容
.class文件十六进制后的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值