zoukankan      html  css  js  c++  java
  • JVM之通过一个简单class二进制文件解读去熟悉类文件结构

    示例代码

    public class ClassTest {
        String str;
    
        {
            str = "static";
        }
    
        private int num = 1;
    
        public String getString(String str1) throws IOException {
            return str + num + str1;
        }
    }
    

    二进制文件

    魔数

    • 行:00000000
    • 列:0-3
    • 字节数:4

    ca fe ba be

    次版本号

    • 行:00000000
    • 列:4-5
    • 字节数:2

    00 00

    主版本号

    16进制34为52,jdk 1.8

    • 行:00000000
    • 列:6-7
    • 字节数:2

    00 34

    constant_pool_count

    16进制2f为47, 常量池数量为46(从1开始计数)

    • 行:00000000
    • 列:8-9
    • 字节数:2

    00 2f

    constant_pool

    第1个常量
    1. 常量类型标志(tag):

    16进制0a为10, 第一个常量类型标志为10,指向CONSTANDT_Methodref_info

    • 行:00000000
    • 列:a
    • 字节数:1

    0a

    1. 指向声明方法的类描述符CONSTANT_Class_info的索引值(index):

    16进制0b为11, CONSTANT_Class_info的索引值为11,指向

    • 行:00000000
    • 列:b-c
    • 字节数:2

    00 0b

    1. 指向名称及类型描述符CONSTANT_NameAndType的索引项

    16进制1f为31, CONSTANT_NameAndType的索引项为31,指向

    • 行:00000000
    • 列:d-e
    • 字节数:2

    00 1f

    第2个常量
    1. 常量类型标志(tag):

    16进制08为8, 第2个常量类型标志为8,指向CONSTANDT_String_info

    • 行:00000000
    • 列:f
    • 字节数:1

    08

    1. 指向字符串字面量的索引值(index):

    16进制20为32, CONSTANT_Class_info的索引值为11,指向

    • 行:00000010
    • 列:0-1
    • 字节数:2

    00 20

    第3个常量
    1. 常量类型标志(tag):

    16进制09为9, 第3个常量类型标志为9,指向CONSTANDT_Fieldref_info

    • 行:00000010
    • 列:2
    • 字节数:1

    09

    1. 指向声明字段的类或接口描述符CONSTANT_Class_info的索引值(index):

    16进制0a为10, CONSTANT_Class_info的索引值为10,指向

    • 行:00000010
    • 列:3-4
    • 字节数:2

    00 0a

    1. 指向字段描述符CONSTANT_NameAndType的索引项

    16进制21为33, CONSTANT_NameAndType的索引项为33,指向

    • 行:00000010
    • 列:5-6
    • 字节数:2

    00 21

    第4个常量
    1. 常量类型标志(tag):

    16进制09为9, 第4个常量类型标志为9,指向CONSTANDT_Fieldref_info

    • 行:00000010
    • 列:7
    • 字节数:1

    09

    1. 指向声明字段的类或接口描述符CONSTANT_Class_info的索引值(index):

    16进制0a为10, CONSTANT_Class_info的索引值为10,指向

    • 行:00000010
    • 列:8-9
    • 字节数:2

    00 0a

    1. 指向字段描述符CONSTANT_NameAndType的索引项

    16进制22为34, CONSTANT_NameAndType的索引项为34,指向

    • 行:00000010
    • 列:a-b
    • 字节数:2

    00 22

    第5个常量
    1. 常量类型标志(tag):

    16进制07为7, 第5个常量类型标志为7,指向CONSTANDT_Class_info

    • 行:00000010
    • 列: c
    • 字节数:1

    07

    1. 指向全限定名常量的索引值(index):

    16进制00 23为35, CONSTANT_Class_info的索引值为35,指向

    • 行:00000010
    • 列: d-e
    • 字节数:2

    00 23

    第6个常量
    1. 常量类型标志(tag):

    16进制0a为10, 第6个常量类型标志为10,指向CONSTANDT_Methodref_info

    • 行:00000010
    • 列:f
    • 字节数:1

    0a

    1. 指向声明方法的类描述符CONSTANT_Class_info的索引值(index):

    16进制05为5, CONSTANT_Class_info的索引值为5,指向

    • 行:00000020
    • 列:0-1
    • 字节数:2

    00 05

    1. 指向名称及类型描述符CONSTANT_NameAndType的索引项

    16进制1f为31, CONSTANT_NameAndType的索引项为31,指向

    • 行:00000020
    • 列:2-3
    • 字节数:2

    00 1f

    第7个常量
    1. 常量类型标志(tag):

    16进制0a为10, 第7个常量类型标志为10,指向CONSTANDT_Methodref_info

    • 行:00000020
    • 列:4
    • 字节数:1

    0a

    1. 指向声明方法的类描述符CONSTANT_Class_info的索引值(index):

    16进制05为5, CONSTANT_Class_info的索引值为5,指向

    • 行:00000020
    • 列:5-6
    • 字节数:2

    00 05

    1. 指向名称及类型描述符CONSTANT_NameAndType的索引项

    16进制00 24为36, CONSTANT_NameAndType的索引项为36,指向

    • 行:00000020
    • 列:7-8
    • 字节数:2

    00 24

    第8个常量
    1. 常量类型标志(tag):

    16进制0a为10, 第8个常量类型标志为10,指向CONSTANDT_Methodref_info

    • 行:00000020
    • 列:9
    • 字节数:1

    0a

    1. 指向声明方法的类描述符CONSTANT_Class_info的索引值(index):

    16进制05为5, CONSTANT_Class_info的索引值为5,指向

    • 行:00000020
    • 列:a-b
    • 字节数:2

    00 05

    1. 指向名称及类型描述符CONSTANT_NameAndType的索引项

    16进制00 25为37, CONSTANT_NameAndType的索引项为37,指向

    • 行:00000020
    • 列:c-d
    • 字节数:2

    00 25

    第9个常量
    1. 常量类型标志(tag):

    16进制0a为10, 第9个常量类型标志为10,指向CONSTANDT_Methodref_info

    • 行:00000020
    • 列:e
    • 字节数:1

    0a

    1. 指向声明方法的类描述符CONSTANT_Class_info的索引值(index):

    16进制05为5, CONSTANT_Class_info的索引值为5,指向

    • 行-列:00000020-f,00000030-0
    • 字节数:2

    00 05

    1. 指向名称及类型描述符CONSTANT_NameAndType的索引项

    16进制00 26为38, CONSTANT_NameAndType的索引项为38,指向

    • 行:00000030
    • 列:1-2
    • 字节数:2

    00 26

    第10个常量
    1. 常量类型标志(tag):

    16进制07为7, 第10个常量类型标志为7,指向CONSTANDT_Class_info

    • 行:00000030
    • 列: 3
    • 字节数:1

    07

    1. 指向全限定名常量的索引值(index):

    16进制00 27为39, CONSTANT_Class_info的索引值为39,指向

    • 行:00000030
    • 列: 4-5
    • 字节数:2

    00 27

    第11个常量
    1. 常量类型标志(tag):

    16进制07为7, 第11个常量类型标志为7,指向CONSTANDT_Class_info

    • 行:00000030
    • 列: 6
    • 字节数:1

    07

    1. 指向全限定名常量的索引值(index):

    16进制00 28为40, CONSTANT_Class_info的索引值为40,指向

    • 行:00000030
    • 列: 7-8
    • 字节数:2

    00 28

    第12个常量
    1. 常量类型标志(tag):

    16进制01为1, 第12个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000030
    • 列: 9
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 03为3, lenth为3

    • 行:00000030
    • 列: a-b
    • 字节数:2

    00 03

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为3个bytes,分别为73 74 72,即字符串str

    • 行:00000030
    • 列: c-e
    • 字节数:3(单个u1)

    73 74 72

    第13个常量
    1. 常量类型标志(tag):

    16进制01为1, 第13个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000030
    • 列: f
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 12为18, lenth为18

    • 行:00000040
    • 列: 0-1
    • 字节数:2

    00 12

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为18个bytes,即字符串Ljava/lang/String;

    • 行列: 00000040,2-00000050,3
    • 字节数:18(单个u1)

    4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b

    第14个常量
    1. 常量类型标志(tag):

    16进制01为1, 第14个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000050
    • 列: 4
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 03为3, lenth为3

    • 行:00000050
    • 列: 5-6
    • 字节数:2

    00 03

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为3个bytes,即字符串num;

    • 行:00000050
    • 列: 7-9
    • 字节数:3(单个u1)

    6e 75 6d

    第15个常量
    1. 常量类型标志(tag):

    16进制01为1, 第15个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000050
    • 列: a
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 01为1, lenth为1

    • 行:00000050
    • 列: b-c
    • 字节数:2

    00 01

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为1个bytes,即字符串I

    • 行:00000050
    • 列: d
    • 字节数:1(单个u1)

    49

    第16个常量
    1. 常量类型标志(tag):

    16进制01为1, 第16个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000050
    • 列: e
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 06为6, lenth为6

    • 行列:00000050,f-00000060,0
    • 字节数:2

    00 06

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为6个bytes,即字符串

    • 行:00000060
    • 列: 1-6
    • 字节数:6(单个u1)

    3c 69 6e 69 74 3e

    第17个常量
    1. 常量类型标志(tag):

    16进制01为1, 第17个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000060
    • 列: 7
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 03为3, lenth为3

    • 行:00000060
    • 列: 8-9
    • 字节数:2

    00 03

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为3个bytes,即字符串()V

    • 行:00000060
    • 列: a-c
    • 字节数:3(单个u1)

    28 29 56

    第18个常量
    1. 常量类型标志(tag):

    16进制01为1, 第18个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000060
    • 列: d
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 04为4, lenth为4

    • 行:00000060
    • 列: e-f
    • 字节数:2

    00 04

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为4个bytes,即字符串Code

    • 行:00000070
    • 列: 0-3
    • 字节数:4(单个u1)

    43 6f 64 65

    第19个常量
    1. 常量类型标志(tag):

    16进制01为1, 第19个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000070
    • 列: 4
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 0f为15, lenth为15

    • 行:00000070
    • 列: 5-6
    • 字节数:2

    00 0f

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为15个bytes,即字符串LineNumberTable

    • 行列:00000070,7-00000080,5
    • 字节数:15(单个u1)

    4c 69 6e 65 4e 75 6d 62 65 4c 69 6e 65 4e 75 6d 62 65

    第20个常量
    1. 常量类型标志(tag):

    16进制01为1, 第20个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000080
    • 列: 6
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 12为18, lenth为18

    • 行:00000080
    • 列: 7-8
    • 字节数:2

    00 12

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为18个bytes,即字符串LocalVariableTable

    • 行列:00000080,9-00000090,a
    • 字节数:18(单个u1)

    4c 6f 63 61 6c 56 61 72 69 61 62 6c 65 54 61 62 6c 65

    第21个常量
    1. 常量类型标志(tag):

    16进制01为1, 第21个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000090
    • 列: b
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 04为4, lenth为4

    • 行:00000090
    • 列: c-d
    • 字节数:2

    00 04

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为4个bytes,即字符串this

    • 行列:00000090,e-000000a0,1
    • 字节数:4(单个u1)

    74 68 69 73

    第22个常量
    1. 常量类型标志(tag):

    16进制01为1, 第22个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:000000a0
    • 列: 2
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 25为37, lenth为37

    • 行:00000090
    • 列: c-d
    • 字节数:2

    00 25

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为37个bytes,即字符串Lcom/java/study/jvm/string/ClassTest;

    • 行列:000000a0,5-000000c0,9
    • 字节数:37(单个u1)

    4c 63 6f 6d 2f 6a 61 76 61 2f 73 74 75 64 79 2f 6a 76 6d 2f 73 74 72 69 6e 67 2f 43 6c 61 73 73 54 65 73 74 3b

    第23个常量
    1. 常量类型标志(tag):

    16进制01为1, 第23个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:000000c0
    • 列: a
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 09为9, lenth为9

    • 行:000000c0
    • 列: b-c
    • 字节数:2

    00 09

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为9个bytes,即字符串getString

    • 行列:000000c0,d-000000d0,5
    • 字节数:9(单个u1)

    67 65 74 53 74 72 69 6e 67

    第24个常量
    1. 常量类型标志(tag):

    16进制01为1, 第24个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:000000d0
    • 列: 6
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 26为38, lenth为38

    • 行:000000c0
    • 列: b-c
    • 字节数:2

    00 26

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为38个bytes,即字符串(Ljava/lang/String;)Ljava/lang/String;

    • 行列:000000d0,9-000000f0,e
    • 字节数:38(单个u1)

    28 4c 6a 61 76 61 2f 28 4c 6a 61 76 61 2f 28 4c 6a 61 76 61 2f

    第25个常量
    1. 常量类型标志(tag):

    16进制01为1, 第25个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:000000f0
    • 列: f
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 04为4, lenth为4

    • 行:00000100
    • 列: 0-1
    • 字节数:2

    00 04

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为4个bytes,即字符串str1

    • 行列:00000100,2-00000100,5
    • 字节数:4(单个u1)

    73 74 72 31

    第26个常量
    1. 常量类型标志(tag):

    16进制01为1, 第26个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000100
    • 列: 6
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 0a为10, lenth为10

    • 行:00000100
    • 列: 0-1
    • 字节数:2

    00 0a

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为4个bytes,即字符串Exceptions

    • 行列:00000100,9-00000110,2
    • 字节数:10(单个u1)

    45 78 63 65 70 74 69 45 78 63 65 70 74 69

    第27个常量
    1. 常量类型标志(tag):

    16进制07为1, 第27个常量类型标志为1,指向CONSTANDT_Class_info

    • 行:00000110
    • 列: 3
    • 字节数:1

    07

    1. 指向全限定名常量项的索引

    16进制00 29为41,指向

    • 行:00000110
    • 列: 4-5
    • 字节数:2

    00 29

    第28个常量
    1. 常量类型标志(tag):

    16进制01为1, 第28个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000110
    • 列: 6
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 10为16, lenth为16

    • 行:00000110
    • 列: 7-8
    • 字节数:2

    00 10

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为16个bytes,即字符串MethodParameters

    • 行列:00000110,9-00000120,8
    • 字节数:16(单个u1)

    4d 65 74 68 6f 64 50 4d 65 74 68 6f 64 50

    第29个常量
    1. 常量类型标志(tag):

    16进制01为1, 第29个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000120
    • 列: 9
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 0a为10, lenth为10

    • 行:00000120
    • 列: a-b
    • 字节数:2

    00 0a

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为10个bytes,即字符串SourceFile

    • 行列:00000120,c-00000130,5
    • 字节数:10(单个u1)

    53 6f 75 72 63 65 46 69 6c 65

    第30个常量
    1. 常量类型标志(tag):

    16进制01为1, 第30个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000130
    • 列: 6
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 0e为14, lenth为14

    • 行:00000130
    • 列: 7-8
    • 字节数:2

    00 0e

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为14个bytes,即字符串ClassTest.java

    • 行列:00000130,9-00000140,6
    • 字节数:14(单个u1)

    43 6c 61 73 73 54 65 73 74 2e 6a 61 76 61

    第31个常量
    1. 常量类型标志(tag):

    16进制0c为12, 第31个常量类型标志为12,指向CONSTANDT_NameAndType_info

    • 行:00000140
    • 列: 7
    • 字节数:1

    0c

    1. 指向该字段或方法名称的常量项索引

    16进制00 10为16, 即

    • 行:00000140
    • 列: 8-9
    • 字节数:2

    00 10

    1. 指向该字段或方法描述符的常量项索引

    16进制00 10为17, 即

    • 行列:00000140,a-00000140,b
    • 字节数:2

    00 11

    第32个常量
    1. 常量类型标志(tag):

    16进制01为1, 第32个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000140
    • 列: c
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 06为6, lenth为6

    • 行:00000140
    • 列: d-e
    • 字节数:2

    00 06

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为6个bytes,即字符串static

    • 行列:00000140,f-00000150,4
    • 字节数:6(单个u1)

    73 74 61 74 69 63

    第33个常量
    1. 常量类型标志(tag):

    16进制0c为12, 第33个常量类型标志为12,指向CONSTANDT_NameAndType_info

    • 行:00000150
    • 列: 5
    • 字节数:1

    0c

    1. 指向该字段或方法名称的常量项索引

    16进制00 0c为12, 即

    • 行:00000150
    • 列: 6-7
    • 字节数:2

    00 0c

    1. 指向该字段或方法描述符的常量项索引

    16进制00 0d为13, 即

    • 行列:00000150,8-00000150,9
    • 字节数:2

    00 0d

    第34个常量
    1. 常量类型标志(tag):

    16进制0c为12, 第34个常量类型标志为12,指向CONSTANDT_NameAndType_info

    • 行:00000150
    • 列: a
    • 字节数:1

    0c

    1. 指向该字段或方法名称的常量项索引

    16进制00 0e为14, 即

    • 行:00000150
    • 列: b-c
    • 字节数:2

    00 0e

    1. 指向该字段或方法描述符的常量项索引

    16进制00 0f为15, 即

    • 行列:00000150,d-00000150,e
    • 字节数:2

    00 0f

    第35个常量
    1. 常量类型标志(tag):

    16进制01为1, 第35个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000150
    • 列: f
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 17为23, lenth为23

    • 行:00000160
    • 列: 0-1
    • 字节数:2

    00 17

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为23个bytes,即字符串java/lang/StringBuilder

    • 行列:00000160,2-00000170,8
    • 字节数:23(单个u1)

    6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 42 75 69 6c 64 65 72

    第36个常量
    1. 常量类型标志(tag):

    16进制0c为12, 第36个常量类型标志为12,指向CONSTANDT_NameAndType_info

    • 行:00000170
    • 列: 9
    • 字节数:1

    0c

    1. 指向该字段或方法名称的常量项索引

    16进制00 2a为42, 即

    • 行:00000170
    • 列: a-b
    • 字节数:2

    00 2a

    1. 指向该字段或方法描述符的常量项索引

    16进制00 2b为43, 即

    • 行列:00000170,c-00000170,d
    • 字节数:2

    00 2b

    第37个常量
    1. 常量类型标志(tag):

    16进制0c为12, 第37个常量类型标志为12,指向CONSTANDT_NameAndType_info

    • 行:00000170
    • 列: e
    • 字节数:1

    0c

    1. 指向该字段或方法名称的常量项索引

    16进制00 2a为42, 即

    • 行列:00000170,f-00000180,0
    • 字节数:2

    00 2a

    1. 指向该字段或方法描述符的常量项索引

    16进制00 2c为44, 即

    • 行列:00000180,1-00000180,2
    • 字节数:2

    00 2c

    第38个常量
    1. 常量类型标志(tag):

    16进制0c为12, 第38个常量类型标志为12,指向CONSTANDT_NameAndType_info

    • 行:00000180
    • 列: 3
    • 字节数:1

    0c

    1. 指向该字段或方法名称的常量项索引

    16进制00 2d为45, 即

    • 行列:00000180,4-00000180,5
    • 字节数:2

    00 2d

    1. 指向该字段或方法描述符的常量项索引

    16进制00 2e为46, 即

    • 行列:00000180,6-00000180,7
    • 字节数:2

    00 2e

    第39个常量
    1. 常量类型标志(tag):

    16进制01为1, 第39个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000180
    • 列: 8
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 23为35, lenth为35

    • 行:00000180
    • 列: 9-a
    • 字节数:2

    00 23

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为35个bytes,即字符串com/java/study/jvm/string/ClassTest

    • 行列:00000180,b-000001a0,d
    • 字节数:35(单个u1)

    63 6f 6d 2f 6a 61 76 61 2f 73 74 75 64 79 2f 6a 76 6d 2f 73 74 72 69 6e 67 2f 43 6c 61 73 73 54 65 73 74

    第40个常量
    1. 常量类型标志(tag):

    16进制01为1, 第40个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:000001a0
    • 列: e
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 10为16, lenth为16

    • 行列:000001a0,f-000001b0,0
    • 字节数:2

    00 10

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为16个bytes,即字符串java/lang/Object

    • 行列:000001b0,1-000001c0,0
    • 字节数:16(单个u1)

    6a 61 76 61 2f 6c 61 6e 67 2f 4f 62 6a 65 63 74

    第41个常量
    1. 常量类型标志(tag):

    16进制01为1, 第41个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:000001c0
    • 列: 1
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 10为19, lenth为19

    • 行列:000001c0,2-000001c0,3
    • 字节数:2

    00 13

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为19个bytes,即字符串java/io/IOException

    • 行列:000001c0,4-000001d0,6
    • 字节数:19(单个u1)

    6a 61 76 61 2f 69 6f 2f 49 4f 45 78 63 65 70 74 69 6f 6e

    第42个常量
    1. 常量类型标志(tag):

    16进制01为1, 第42个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:000001d0
    • 列: 7
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 06为6, lenth为6

    • 行列:000001d0,8-000001d0,9
    • 字节数:2

    00 06

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为6个bytes,即字符串append

    • 行列:000001d0,a-000001d0,f
    • 字节数:6(单个u1)

    61 70 70 65 6e 64

    第43个常量
    1. 常量类型标志(tag):

    16进制01为1, 第43个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:000001e0
    • 列: 0
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 2d为45, lenth为45

    • 行列:000001e0,1-000001e0,2
    • 字节数:2

    00 2d

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为45个bytes,即字符串(Ljava/lang/String;)Ljava/lang/StringBuilder;

    • 行列:000001e0,3-00000200,f
    • 字节数:45(单个u1)

    28 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 29 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 42 75 69 6c 64 65 72 3b

    第44个常量
    1. 常量类型标志(tag):

    16进制01为1, 第44个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000210
    • 列: 0
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 1c为28, lenth为28

    • 行列:00000210,1-000001e0,2
    • 字节数:2

    00 1c

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为28个bytes,即字符串(I)Ljava/lang/StringBuilder;

    • 行列:00000210,3-00000220,e
    • 字节数:28(单个u1)

    28 49 29 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 42 75 69 6c 64 65 72 3b

    第45个常量
    1. 常量类型标志(tag):

    16进制01为1, 第45个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000220
    • 列: f
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 08为8, lenth为8

    • 行列:00000230,0-00000230,1
    • 字节数:2

    00 08

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为8个bytes,即字符串toString

    • 行列:00000230,2-00000230,9
    • 字节数:8(单个u1)

    74 6f 53 74 72 69 6e 67

    第46个常量
    1. 常量类型标志(tag):

    16进制01为1, 第46个常量类型标志为1,指向CONSTANDT_Utf8_info

    • 行:00000230
    • 列: a
    • 字节数:1

    01

    1. UTF-8编码的字符串所占字节数

    16进制00 14为20, lenth为20

    • 行列:00000230,b-00000230,c
    • 字节数:2

    00 14

    1. 长度为lenth的UTF-8编码的字符串

    字符串长度为20个bytes,即字符串()Ljava/lang/String;

    • 行列:00000230,d-00000250,0
    • 字节数:8(单个u1)

    28 29 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b

    此时常量池正式结束,也可用jclasslib验证结果:

    access_flags

    0x0001 | 0x0020 = 0x0021,即访问标志有ACC_PUBLIC、ACC_SUPER

    • 行:00000250
    • 列:1-2
    • 字节数:2

    00 21

    this_class

    • 行:00000250
    • 列:3-4
    • 字节数:2

    00 0a

    super_class

    即先指向第11个常量,第11指向40,即java/lang/Object

    • 行:00000250
    • 列:5-6
    • 字节数:2

    00 0b

    interface_count

    即0个接口

    • 行:00000250
    • 列:7-8
    • 字节数:2

    00 00

    fields_count

    即2个fields

    • 行:00000250
    • 列:9-a
    • 字节数:2

    00 02

    fields

    第一个fields
    access_flags

    没有任何修饰

    • 行:00000250
    • 列:b-c
    • 字节数:2

    00 00

    name_index

    指向第12常量,即字段名字为str

    • 行:00000250
    • 列:d-e
    • 字节数:2

    00 0c

    descriptor_index

    指向第13常量,即字段类型描述为Ljava/lang/String;

    • 行列:00000250,f-00000260,0
    • 字节数:2

    00 0d

    attributes_count

    第一个字段属性为0

    • 行列:00000260,1-00000260,2
    • 字节数:2

    00 00

    第二个fields
    access_flags

    private修饰

    • 行:00000260
    • 列:3-4
    • 字节数:2

    00 02

    name_index

    指向第14常量,即字段名字为num

    • 行:00000260
    • 列:5-6
    • 字节数:2

    00 0e

    descriptor_index

    指向第15常量,即字段类型描述为I

    • 行列:00000260,7-00000260,8
    • 字节数:2

    00 0f

    attributes_count

    第二个字段属性为0

    • 行列:00000260,9-00000260,a
    • 字节数:2

    00 00

    methods_count

    有两个方法

    • 行列:00000260,b-00000260,c
    • 字节数:2

    00 02

    methods

    第一个方法
    access_flags

    即public修饰

    • 行列:00000260,d-00000260,e
    • 字节数:2

    00 01

    name_index

    指向常量表中第16项,即方法名为

    • 行列:00000260,f-00000270,0
    • 字节数:2

    00 10

    descriptor_index

    指向常量表中第17项,即方法描述为()V

    • 行列:00000270,1-00000270,2
    • 字节数:2

    00 11

    attributes_count

    此方法有一个属性

    • 行列:00000270,3-00000270,4
    • 字节数:2

    00 01

    attribute

    attribute_name_index:
    指向常量表中第18项,即此属性为coce属性

    • 行列:00000270,5-00000270,6
    • 字节数:2

    00 12

    attribute_length:
    length为66

    • 行列:00000270,7-00000270,a
    • 字节数:4

    00 00 00 42

    info(code的):

    • 行列:00000270,b-000002b0,c
    • 字节数:66
    第二个方法
    access_flags

    即public修饰

    • 行列:000002b0,d-000002b0,e
    • 字节数:2

    00 01

    name_index

    指向常量表中第23项,即方法名为getString

    • 行列:000002b0,f-000002c0,0
    • 字节数:2

    00 17

    descriptor_index

    指向常量表中第24项,即方法描述为(Ljava/lang/String;)Ljava/lang/String;

    • 行列:000002c0,1-000002c0,2
    • 字节数:2

    00 18

    attributes_count

    此方法有3个属性

    • 行列:000002c0,3-000002c0,4
    • 字节数:2

    00 03

    attribute

    第一个:

    attribute_name_index:
    指向常量表中第18项,即此属性为coce属性

    • 行列:000002c0,5-000002c0,6
    • 字节数:2

    00 12

    attribute_length:
    length为81

    • 行列:000002c0,7-000002c0,a
    • 字节数:4

    00 00 00 51

    info(code的):

    • 行列:000002c0,b-00000310,b
    • 字节数:81

    第二个:

    attribute_name_index:
    指向常量表中第18项,即此属性为Exceptions属性

    • 行列:00000310,c-00000310,d
    • 字节数:2

    00 1a

    attribute_length:
    length为4

    • 行列:00000310,e-00000320,1
    • 字节数:4

    00 00 00 04

    number_of_exceptions:

    • 行列:00000320,2-00000320,3
    • 字节数:2

    00 01

    exception_index_table:
    指向常量表中第27项,即为java/io/IOException

    • 行列:00000320,4-00000320,5
    • 字节数:2

    00 1b

    第三个:

    attribute_name_index:
    指向常量表中第29项,即此属性为SourceFile属性

    • 行列:00000320,6-00000320,7
    • 字节数:2

    00 1c

    attribute_length:
    length为5

    • 行列:00000320,8-00000320,b
    • 字节数:4

    00 00 00 05

    attributes_count

    具有一个attribute

    • 行列:00000330,1-00000330,2
    • 字节数:2

    00 01

    attribute_name_index:
    指向常量表中第29项,即此属性为SourceFile属性

    • 行列:00000330,3-00000330,4
    • 字节数:2

    00 1d

    attribute_length:
    length为2

    • 行列:00000330,5-00000330,8
    • 字节数:4

    00 00 00 02

    sourcefile_index
    指向常量表中第30项,即此为ClassTest.java的sourcefile

    • 行列:00000320,9-00000320,a
    • 字节数:2

    00 1e

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出。
  • 相关阅读:
    Redis_数据类型
    python 单独设置在plot每条线的label为中文
    制作9patch图片心得——Android开发使用类似QQ聊天的冒泡对话框
    Oracle数据库实验一建立数据库
    Postman使用总结
    jmeter使用小结
    python实现系统调用cmd命令的模块---subprocess模块
    程序进程线程之间的区别
    Fiddler抓包工具简介
    MySQL基础SQL命令---增删改查
  • 原文地址:https://www.cnblogs.com/caozibiao/p/14030246.html
Copyright © 2011-2022 走看看