一:Java字节代码的组织形式
类文件{
OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组
}
二:查看方法 --- javap命令
例子:有一个Java类Demo.java
public class Demo { private String str1; private String str2; private int num1; private int num2; public static final String STATIC_DATA = "hello world"; private void sayHello1(){ System.out.println("this is method1..."); } private void sayHello2(){ System.out.println("this is method2..."); } public void sayHello3(){ System.out.println("this is method3..."); } } |
通过jdk自带的反编译工具命令 javap 可以查看class文件的字节码信息
D:\>javap -verbose Demo >> Demo.txt |
Demo.txt:
Compiled from "Demo.java" public class Demo extends java.lang.Object SourceFile: "Demo.java" minor version: 0 major version: 49 Constant pool: const #1 = class #2; const #2 = Asciz Demo; const #3 = class #4; const #4 = Asciz java/lang/Object; const #5 = Asciz str1; const #6 = Asciz Ljava/lang/String;; const #7 = Asciz str2; const #8 = Asciz num1; const #9 = Asciz I; const #10 = Asciz num2; const #11 = Asciz STATIC_DATA; const #12 = Asciz ConstantValue; const #13 = String #14; const #14 = Asciz hello world; const #15 = Asciz <init>; const #16 = Asciz ()V; const #17 = Asciz Code; const #18 = Method #3.#19; const #19 = NameAndType #15:#16; const #20 = Asciz LineNumberTable; const #21 = Asciz LocalVariableTable; const #22 = Asciz this; const #23 = Asciz LDemo;; const #24 = Asciz sayHello1; const #25 = Field #26.#28; const #26 = class #27; const #27 = Asciz java/lang/System; const #28 = NameAndType #29:#30; const #29 = Asciz out; const #30 = Asciz Ljava/io/PrintStream;; const #31 = String #32; const #32 = Asciz this is method1...; const #33 = Method #34.#36; const #34 = class #35; const #35 = Asciz java/io/PrintStream; const #36 = NameAndType #37:#38; const #37 = Asciz println; const #38 = Asciz (Ljava/lang/String;)V; const #39 = Asciz sayHello2; const #40 = String #41; const #41 = Asciz this is method2...; const #42 = Asciz sayHello3; const #43 = String #44; const #44 = Asciz this is method3...; const #45 = Asciz SourceFile; const #46 = Asciz Demo.java; { public static final java.lang.String STATIC_DATA; Constant value: String hello world public Demo(); Code: Stack=1, Locals=1, Args_size=1 0: aload_0 1: invokespecial #18; 4: return LineNumberTable: line 2: 0 LocalVariableTable: Start Length Slot Name Signature 0 5 0 this LDemo; public void sayHello3(); Code: Stack=2, Locals=1, Args_size=1 0: getstatic #25; 3: ldc #43; 5: invokevirtual #33; 8: return LineNumberTable: line 17: 0 line 18: 8 LocalVariableTable: Start Length Slot Name Signature 0 9 0 this LDemo; } |