Java Class类文件结构格式

2020-05-17  本文已影响0人  晴天哥_王志

java文件

package com.netty.rpc.constant;

public class ClassAnalyze {

    private int num = 1;
    private int age = 2;
    public int add() {
        num += 2;

        return num;
    }
}

class文件

cafe babe 魔术数字
0000 0034 jdk编译版本
0016 常量个数

--------------以下为常量值---------
0a 0005 0011
09 0004 0012 
09 0004 0013
07 0014 
07 0015
01 0003 6e75 6d
01 0001 49
01 0003 6167 65
01 0006 3c69 6e69 743e 
01 0003 28 2956 
01 0004 43 6f64 65
01 000f 4c69 6e65 4e75 6d62 6572 5461 626c 65
01 0003 6164 64
01 0003 2829 49
01 000a 536f 7572 6365 4669 6c65
01 0011 43 6c61 7373 416e 616c 797a 652e 6a61 7661 
0c 0009 000a
0c 0006 0007 
0c 0008 0007
01 0023 636f 6d2f 6e65 7474 792f 7270 632f 636f 6e73 7461 6e74 2f43 6c61 7373 416e 616c 797a 65
01 0010 6a61 7661 2f6c 616e 672f 4f62 6a65 6374 

0021 访问控制 access_flag

0004 this_class
0005 super_class
0000 interface_count
0002 field_count

0002 0006 0007 0000 字段一
0002 0008 0007 0000 字段二

0002 方法个数

---------以下是方法的分析,省略暂时不关注
0001 0009 000a 0001 000b 0000 002f 0002 0001 0000 000f 2ab7
0001 2a04 b500 022a 05b5 0003 b100 0000
0100 0c00 0000 0e00 0300 0000 0300 0400
0500 0900 06

0001 000d 000e 00 0100 0b00
0000 2b00 0300 0100 0000 0f2a 59b4 0002
0560 b500 022a b400 02ac 0000 0001 000c
0000 000a 0002 0000 0008 000a 000a 0001
000f 0000 0002 0010 

javap -v 反编译文件

Classfile /Users/lebron374/Desktop/ClassAnalyze.class
  Last modified 2020-5-17; size 360 bytes
  MD5 checksum aefdcc3c97d1765618715b7bf306cd10
  Compiled from "ClassAnalyze.java"
public class com.netty.rpc.constant.ClassAnalyze
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #5.#17         // java/lang/Object."<init>":()V
   #2 = Fieldref           #4.#18         // com/netty/rpc/constant/ClassAnalyze.num:I
   #3 = Fieldref           #4.#19         // com/netty/rpc/constant/ClassAnalyze.age:I
   #4 = Class              #20            // com/netty/rpc/constant/ClassAnalyze
   #5 = Class              #21            // java/lang/Object
   #6 = Utf8               num
   #7 = Utf8               I
   #8 = Utf8               age
   #9 = Utf8               <init>
  #10 = Utf8               ()V
  #11 = Utf8               Code
  #12 = Utf8               LineNumberTable
  #13 = Utf8               add
  #14 = Utf8               ()I
  #15 = Utf8               SourceFile
  #16 = Utf8               ClassAnalyze.java
  #17 = NameAndType        #9:#10         // "<init>":()V
  #18 = NameAndType        #6:#7          // num:I
  #19 = NameAndType        #8:#7          // age:I
  #20 = Utf8               com/netty/rpc/constant/ClassAnalyze
  #21 = Utf8               java/lang/Object
{
  public com.netty.rpc.constant.ClassAnalyze();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: aload_0
         5: iconst_1
         6: putfield      #2                  // Field num:I
         9: aload_0
        10: iconst_2
        11: putfield      #3                  // Field age:I
        14: return
      LineNumberTable:
        line 3: 0
        line 5: 4
        line 6: 9

  public int add();
    descriptor: ()I
    flags: ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
         0: aload_0
         1: dup
         2: getfield      #2                  // Field num:I
         5: iconst_2
         6: iadd
         7: putfield      #2                  // Field num:I
        10: aload_0
        11: getfield      #2                  // Field num:I
        14: ireturn
      LineNumberTable:
        line 8: 0
        line 10: 10
}
SourceFile: "ClassAnalyze.java"

参考文章

上一篇 下一篇

猜你喜欢

热点阅读