Java 源文件Class详解

目录一、概述二、参考一、概述只是对class做一次完整的分析,不涉及理论介绍。1.源文件package com.gyw.practice;public class TestClass{ private int m; public int inc(){ return m + 1; }}2.字节流文件 3.class文件分析u4 magic;魔...
摘要由CSDN通过智能技术生成

目录

一、概述

二、参考


一、概述

只是对class做一次完整的分析,不涉及理论介绍。

1.源文件

package com.gyw.practice;

public class TestClass{
	private int m;
	public int inc(){
		return m + 1;
	}
}

2.字节流文件

 3.class文件分析

u4 magic;魔数,4个字节:0xCAFEBABE

u2 minor_version;次版本号,2个字节:0x0000(0)

u2 major_version;主版本号,2个字节:0x0034(52)

u2 constant_pool_count;常量池大小,2个字节:0x0013(19) (索引从1开始,左闭右开,18个常量)

cp_info constant_pool[constant_pool_count-1]; cp_info 表,常量池

// 常量池每一项的数据结构
cp_info {  
    u1 tag; // 标识位
    u1 info[]; // 表
}

#1:tag,1个字节,0x0A(10),CONSTANT_Methodref,类方法符号引用;class_index,2个字节,0x0004(4),指向#4;name_and_type_index,2个字节,0x000F(15),指向#15;

info {  
     u1 tag; // 标识位
     u2 class_index; // 类描述索引
     u2 name_and_type_index; // 名称和类型描述索引
}

 #2:tag,1个字节,0x09(9),CONSTANT_Fieldref,字段符号引用;class_index,2个字节,0x0003(3),指向#3;name_and_type_index,2个字节,0x0010(16),指向#16;

info {  
     u1 tag; // 标识位
     u2 class_index; // 类描述索引
     u2 name_and_type_index; // 名称和类型描述索引
}

#3:tag,1个字节,0x07(7),CONSTANT_Class,类或接口的符号引用;name_index,2个字节,0x0011(17),指向#17;

CONSTANT_Class_info {  
    u1 tag;
    u2 name_index;
}

#4:tag,1个字节,0x07(7),CONSTANT_Class,类或接口的符号引用;name_index,2个字节,0x0012(18),指向#18;

#5:tag,1个字节,0x01(1),CONSTANT_Utf8,utf8字符串常量;length,2个字节,0x0001(1),数组大小为1;bytes数组,1个字节,0x6D(109), ASCII字符m;

总结为:m

CONSTANT_Utf8_info {  
    u1 tag; // 标志位
    u2 length; // bytes数组的长度(多少个8位字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值