【发布时间】:2021-04-28 17:58:52
【问题描述】:
我想查看带有javap -c 的Class 文件的字节码,但它似乎并没有消除我所有的代码。这里是FooBar.java:
class FooBar {
public static void main(String[] args) {
if (args[0].equals("foo")) {
System.out.println("bar");
} else {
notFoo();
}
}
private static void notFoo() {
System.out.println("not Foo");
}
}
使用javac FooBar.java 编译。然后我尝试用javap -c FooBar.class 反汇编它,输出:
class FooBar {
FooBar();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: aload_0
1: iconst_0
2: aaload
3: ldc #2 // String foo
5: invokevirtual #3 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
8: ifeq 22
11: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream;
14: ldc #5 // String bar
16: invokevirtual #6 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
19: goto 25
22: invokestatic #7 // Method notFoo:()V
25: return
}
如您所见,这似乎只反汇编了main 方法,并没有显示反汇编的notFoo() 方法。
我怎样才能拆开所有东西?
【问题讨论】: