文章目录
从一个class文件看字节码结构。
java虚机规范
一、Demo
1.1 Demo.java
仅有一个变量,一个方法。
package com.httpserver;
/**
* <code>Demo</code> description
*
* @author sunqiyuan
* @date 2020-04-28
*/
public class Demo {
private int num = 1;
public int add() {
num = num + 2;
return num;
}
}
1.2 反编译的真实java文件
可以看出来多了this
1.3 Demo.class
00000000: cafe babe 0000 0034 0016 0a00 0400 1209 .......4........
00000010: 0003 0013 0700 1407 0015 0100 036e 756d .............num
00000020: 0100 0149 0100 063c 696e 6974 3e01 0003 ...I...<init>...
00000030: 2829 5601 0004 436f 6465 0100 0f4c 696e ()V...Code...Lin
00000040: 654e 756d 6265 7254 6162 6c65 0100 124c eNumberTable...L
00000050: 6f63 616c 5661 7269 6162 6c65 5461 626c ocalVariableTabl
00000060: 6501 0004 7468 6973 0100 154c 636f 6d2f e...this...Lcom/
00000070: 6874 7470 7365 7276 6572 2f44 656d 6f3b httpserver/Demo;
00000080: 0100 0361 6464 0100 0328 2949 0100 0a53 ...add...()I...S
00000090: 6f75 7263 6546 696c 6501 0009 4465 6d6f ourceFile...Demo
000000a0: 2e6a 6176 610c 0007 0008 0c00 0500 0601 .java...........
000000b0: 0013 636f 6d2f 6874 7470 7365 7276 6572 ..com/httpserver
000000c0: 2f44 656d 6f01 0010 6a61 7661 2f6c 616e /Demo...java/lan
000000d0: 672f 4f62 6a65 6374 0021 0003 0004 0000 g/Object.!......
000000e0: 0001 0002 0005 0006 0000 0002 0001 0007 ................
000000f0: 0008 0001 0009 0000 0038 0002 0001 0000 .........8......
00000100: 000a 2ab7 0001 2a04 b500 02b1 0000 0002 ..*...*.........
00000110: 000a 0000 000a 0002 0000 0009 0004 000a ................
00000120: 000b 0000 000c 0001 0000 000a 000c 000d ................
00000130: 0000 0001 000e 000f 0001 0009 0000 003d ...............=
00000140: 0003 0001 0000 000f 2a2a b400 0205 60b5 ........**....`.
00000150: 0002 2ab4 0002 ac00 0000 0200 0a00 0000 ..*.............
00000160: 0a00 0200 0000 0d00 0a00 0e00 0b00 0000 ................
00000170: 0c00 0100 0000 0f00 0c00 0d00 0000 0100 ................
00000180: 1000 0000 0200 110a ........
1.4 javap -verbose
jdk自带反解析工具
Classfile /Users/sunqiyuan/Desktop/Demo.class
Last modified 2020年4月28日; size 391 bytes
SHA-256 checksum 91497ea9c8db954d68c9206e1c17a2251658351718284cf92d73fac35c10e8d5
Compiled from "Demo.java"
public class com.httpserver.Demo
minor version: 0
major version: 52
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #3 // com/httpserver/Demo
super_class: #4 // java/lang/Object
interfaces: 0, fields: 1, methods: 2, attributes: 1
Constant pool:
#1 = Methodref #4.#18 // java/lang/Object."<init>":()V
#2 =