1. java文件 classfiletest.java
1
2
3
4
5
6
7
8
|
package com.zxs.ssh.template.service; public class classfiletest { int m = 1 ; public int inc(){ return m+ 1 ; } } |
2. class文件classfiletest.class
javac classfiletest.java 編譯.java文件得到.class文件
jdk版本 1.8.0_201
.class文件可以用winhex打開(kāi)
3. javap -verbose classfiletest.class (javap是一個(gè)用于分析.class文件字節(jié)碼內(nèi)容的工具)
4. 分析class文件
4.1 魔數(shù)
- a.格式:u4
- b.內(nèi)容 ca fe ba be
- c.含義:代表這是.class文件
4.2 版本號(hào)
- a.格式:次版本號(hào)u2 + 主版本號(hào)u2
- b.內(nèi)容:00 00 00 34
- c.含義:0034即十進(jìn)制52,jdk 1.1是45,1.2是46,因此52代表1.8,所以主版本號(hào)是1.8;0000即十進(jìn)制0,所以次版本號(hào)是0;合起來(lái)就是1.8.0
4.3 常量池
常量個(gè)數(shù)u2+tag u1+length u2+bytes u1 起點(diǎn)00000008
4.4 訪問(wèn)標(biāo)志
u2 起點(diǎn)000000c2
4.5 類(lèi)索引、父類(lèi)索引和接口索引集合
u2+u2+u2(接口索引集合個(gè)數(shù))+u2 起點(diǎn)000000c4
4.6 字段表集合
u2(字段個(gè)數(shù))+u2(訪問(wèn)標(biāo)志)+u2(name_index)+u2(字段描述符索引)+u2(屬性表集合個(gè)數(shù))+u2(屬性名索引)+u4(屬性長(zhǎng)度)+u1 起點(diǎn)000000ca
4.7 方法表集合
u2(方法個(gè)數(shù))++u2(訪問(wèn)標(biāo)志)+u2(name_index)+u2(方法描述符索引)+u2(屬性表集合個(gè)數(shù))+u2(屬性名索引)+u4(屬性長(zhǎng)度)+u1 起點(diǎn)000000d4
包含兩個(gè)方法,第一個(gè)是構(gòu)造器方法,起點(diǎn)是000000d6;另一個(gè)方法是inc方法,起點(diǎn)是0000010a
4.8 屬性表集合
u2(屬性表集合個(gè)數(shù))+u2(屬性名索引)+u4(屬性長(zhǎng)度)+u1 起點(diǎn)00000136
以上所述是小編給大家介紹的java虛擬機(jī)類(lèi)文件結(jié)構(gòu)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
原文鏈接:https://blog.csdn.net/csdn_zxs/article/details/88585199