一个普通的Java类:
public class Test // 从Object类继承


{
public static void main(String[] args)

{
System.out.println(new Test().toString());
}
}
现在我们使用JDK带的反编译工具javap来反编译Test.class,先执行下面的命令:
javap Test > Test.txt
打开Test.txt文件后,会看到如下的代码:

public class Test extends java.lang.Object
{
public Test();
public static void main(java.lang.String[]);
}
再使用下面的命令来得到bytecode代码:
javap -c Test >Test1.txt
打开Test1.txt后,会看到如下的代码:

public class Test extends java.lang.Object
{
public Test();
Code:
0: aload_0
1: invokespecial #8; //Method java/lang/Object."<init>":()V
4: return

public static void main(java.lang.String[]);
Code:
0: getstatic #16; //Field java/lang/System.out:Ljava/io/PrintStream;
3: new #1; //class Test
6: dup
7: invokespecial #22; //Method "<init>":()V
10: invokevirtual #23; //Method java/lang/Object.toString:()Ljava/lang/String;
13: invokevirtual #27; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
16: return
}
public class Test // 从Object类继承

{
public static void main(String[] args)
{
System.out.println(new Test().toString());
}
}
现在我们使用JDK带的反编译工具javap来反编译Test.class,先执行下面的命令:
javap Test > Test.txt

public class Test extends java.lang.Object
{
public Test();
public static void main(java.lang.String[]);
}
再使用下面的命令来得到bytecode代码:
javap -c Test >Test1.txt

public class Test extends java.lang.Object
{
public Test();
Code:
0: aload_0
1: invokespecial #8; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #16; //Field java/lang/System.out:Ljava/io/PrintStream;
3: new #1; //class Test
6: dup
7: invokespecial #22; //Method "<init>":()V
10: invokevirtual #23; //Method java/lang/Object.toString:()Ljava/lang/String;
13: invokevirtual #27; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
16: return
}
本文介绍如何使用JDK自带的工具javap进行Java类文件的反编译,并展示了具体的命令及反编译后的字节码输出结果。
6337

被折叠的 条评论
为什么被折叠?



