美文网首页
jvm - class文件?

jvm - class文件?

作者: canezk | 来源:发表于2016-11-24 16:08 被阅读13次

方案一:
class文件都是二进制的。
首先用vi 打开
然后输入%!xxd
显示其16进制格式

方案二:
javap -verbose xxx.class

例子

原始代码

public class SymjaException extends CalculatorException {

    public SymjaException(String message, IExceptionType type) {
        super(message, type);
    }
}

字节码(16进制)

  1 0000000: cafe babe 0000 0034 0014 0a00 0300 1107  .......4........
  2 0000010: 0012 0700 1301 0006 3c69 6e69 743e 0100  ........<init>..
  3 0000020: 4128 4c6a 6176 612f 6c61 6e67 2f53 7472  A(Ljava/lang/Str
  4 0000030: 696e 673b 4c6f 7574 666f 782f 6361 6c63  ing;Loutfox/calc
  5 0000040: 756c 6174 6f72 2f65 7863 6570 7469 6f6e  ulator/exception
  6 0000050: 2f49 4578 6365 7074 696f 6e54 7970 653b  /IExceptionType;
  7 0000060: 2956 0100 0443 6f64 6501 000f 4c69 6e65  )V...Code...Line
  8 0000070: 4e75 6d62 6572 5461 626c 6501 0012 4c6f  NumberTable...Lo
  9 0000080: 6361 6c56 6172 6961 626c 6554 6162 6c65  calVariableTable
 10 0000090: 0100 0474 6869 7301 002c 4c6f 7574 666f  ...this..,Loutfo
 11 00000a0: 782f 6361 6c63 756c 6174 6f72 2f65 7863  x/calculator/exc
 12 00000b0: 6570 7469 6f6e 2f53 796d 6a61 4578 6365  eption/SymjaExce
 13 00000c0: 7074 696f 6e3b 0100 076d 6573 7361 6765  ption;...message
 14 00000d0: 0100 124c 6a61 7661 2f6c 616e 672f 5374  ...Ljava/lang/St
 15 00000e0: 7269 6e67 3b01 0004 7479 7065 0100 2c4c  ring;...type..,L
 16 00000f0: 6f75 7466 6f78 2f63 616c 6375 6c61 746f  outfox/calculato
 17 0000100: 722f 6578 6365 7074 696f 6e2f 4945 7863  r/exception/IExc
 18 0000110: 6570 7469 6f6e 5479 7065 3b01 000a 536f  eptionType;...So
 19 0000120: 7572 6365 4669 6c65 0100 1353 796d 6a61  urceFile...Symja
 20 0000130: 4578 6365 7074 696f 6e2e 6a61 7661 0c00  Exception.java..
 21 0000140: 0400 0501 002a 6f75 7466 6f78 2f63 616c  .....*outfox/cal
 22 0000150: 6375 6c61 746f 722f 6578 6365 7074 696f  culator/exceptio
 23 0000160: 6e2f 5379 6d6a 6145 7863 6570 7469 6f6e  n/SymjaException
 24 0000170: 0100 2f6f 7574 666f 782f 6361 6c63 756c  ../outfox/calcul
 25 0000180: 6174 6f72 2f65 7863 6570 7469 6f6e 2f43  ator/exception/C
 26 0000190: 616c 6375 6c61 746f 7245 7863 6570 7469  alculatorExcepti
 27 00001a0: 6f6e 0021 0002 0003 0000 0000 0001 0001  on.!............
 28 00001b0: 0004 0005 0001 0006 0000 0049 0003 0003  ...........I....
 29 00001c0: 0000 0007 2a2b 2cb7 0001 b100 0000 0200  ....*+,.........
 30 00001d0: 0700 0000 0a00 0200 0000 1100 0600 1200  ................
 31 00001e0: 0800 0000 2000 0300 0000 0700 0900 0a00  .... ...........
 32 00001f0: 0000 0000 0700 0b00 0c00 0100 0000 0700  ................
 33 0000200: 0d00 0e00 0200 0100 0f00 0000 0200 100a  ................

javap

  MD5 checksum 0ae899847b450473f19c09f6e38899e2
  Compiled from "SymjaException.java"
public class outfox.calculator.exception.SymjaException extends outfox.calculator.exception.CalculatorException
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #3.#17         // outfox/calculator/exception/CalculatorException."<init>":(Ljava/lang/String;Loutfox/calculator/exception/IExceptionType;)V
   #2 = Class              #18            // outfox/calculator/exception/SymjaException
   #3 = Class              #19            // outfox/calculator/exception/CalculatorException
   #4 = Utf8               <init>







   #5 = Utf8               (Ljava/lang/String;Loutfox/calculator/exception/IExceptionType;)V
   #6 = Utf8               Code
   #7 = Utf8               LineNumberTable
   #8 = Utf8               LocalVariableTable
   #9 = Utf8               this
  #10 = Utf8               Loutfox/calculator/exception/SymjaException;
  #11 = Utf8               message
  #12 = Utf8               Ljava/lang/String;
  #13 = Utf8               type
  #14 = Utf8               Loutfox/calculator/exception/IExceptionType;
  #15 = Utf8               SourceFile
  #16 = Utf8               SymjaException.java
  #17 = NameAndType        #4:#5          // "<init>":(Ljava/lang/String;Loutfox/calculator/exception/IExceptionType;)V
  #18 = Utf8               outfox/calculator/exception/SymjaException
  #19 = Utf8               outfox/calculator/exception/CalculatorException
{
  public outfox.calculator.exception.SymjaException(java.lang.String, outfox.calculator.exception.IExceptionType);
    descriptor: (Ljava/lang/String;Loutfox/calculator/exception/IExceptionType;)V
    flags: ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
         0: aload_0
         1: aload_1
         2: aload_2
         3: invokespecial #1                  // Method outfox/calculator/exception/CalculatorException."<init>":(Ljava/lang/String;Loutfox/calculator/exception/IExceptionType;)V
         6: return
      LineNumberTable:
        line 17: 0
        line 18: 6
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       7     0  this   Loutfox/calculator/exception/SymjaException;
            0       7     1 message   Ljava/lang/String;
            0       7     2  type   Loutfox/calculator/exception/IExceptionType;
}
SourceFile: "SymjaException.java"

可以根据字节码(16进制),一步步的读取一下数据。就能了解了。

简要分区

1、魔数,版本号
2、常量池
3、类索引,父类索引以及接口索引(3个0x0000这种格式表示)
4、字段(没有的话就是0x0000)比如上面的例子
5、方法(没有的话就是0x0000)
6、属性(会引用常量池的索引)

相关文章

  • Java 虚拟机内存模型—线程私有

    JVM 内存模型 .java 源文件 -> javac 工具编译 -> .class 文件 -> JVM 解析 -...

  • 03 java字节码文件

    java源码经过编译,生成class字节码文件,JVM加载class文件执行。字节码文件将java语言与JVM解耦...

  • JVM基础-class文件与加载

    JVM基础-class文件与加载 class文件 就如同一般文件,只是一种文件形式,用于被jvm识别和执行。 不是...

  • ASM 库的介绍和使用

    前面几篇文章介绍了 .class 文件的结构、JVM 如何加载 .class 文件、JVM 中如何执行方法的调用和...

  • Android插件化技术——【class学习】

    class 文件的定义 class 文件就是能够被 JVM 识别,加载并且执行的文件格式。从定义来看,class ...

  • JAVA学习笔记0x03

    类加载 把.class文件从硬盘读取到内存(jvm)中,将这个过程称为类加载 jvm搜索.class文件位置的顺序...

  • 访问者模式和 ASM

    之前三篇文章介绍了 .class 文件的结构、JVM 对 .class 文件加载以及在 JVM 中是怎么执行程序的...

  • 热修复-从java文件到生成apk你需要知道的全过程

    一、从java文件到class文件 1.class文件 class文件就是一种文件格式,被JVM识别。如下图jav...

  • 2018-11-19

    jvm中Class装载系统 Class文件加载过程 ClassLoader的工作模式 文件加载过程加载----->...

  • jvm - class文件?

    方案一:class文件都是二进制的。首先用vi 打开然后输入%!xxd显示其16进制格式 方案二:javap -v...

网友评论

      本文标题:jvm - class文件?

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