jvm - class文件?

方案一:
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、属性(会引用常量池的索引)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • 在class文件中,有两种数据类型:无符号数和表,其他的都是数据了无符号数:以u1、u2、u4、u8来分别代表1个...
    Van96阅读 402评论 0 0
  • 每个使用Java的开发者都知道Java字节码是在JRE中运行(JRE: Java 运行时环境)。JVM则是JRE中...
    燕京博士阅读 1,400评论 0 6
  • 字节码查看工具:WinHex 前言 Java虚拟机实现语言无关性的基石就是Class文件Java虚拟机提供的语言无...
    zlcook阅读 7,128评论 4 18
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,149评论 2 34
  • 朋友送的风信子开花了,绿色含羞的小花苞在一夜之间就冒出了紫色的惊喜,粉紫的小花蕾在一片绿色中更显青涩的娇嫩。风信子...
    Ashley_xx阅读 532评论 1 5