美文网首页
Java Class类文件结构格式

Java Class类文件结构格式

作者: 晴天哥_王志 | 来源:发表于2020-05-17 22:56 被阅读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"
    

    参考文章

    相关文章

      网友评论

          本文标题:Java Class类文件结构格式

          本文链接:https://www.haomeiwen.com/subject/ilweohtx.html