用习惯了著名的反编译工具jad的话,如果有的时候单给出class文件,要快速看这个class文件
的JDK版本号等,其实不用工具,也可以用JDK自带的javap命令进行反编译输出,下面小结
其用法:
1,javap -verbose 类名
得到的信息如下:
Compiled from "Test.java"
public class Test extends java.lang.Object
SourceFile: "Test.java"
minor version: 0
major version: 50
Constant pool:
......
可以看出jdk的版本,这个用在判断某些CLASS的版本是否兼容的时候很有用.
2 最常见的不带参数的情况:javap 类名
比如某个类:
则:
C:\temp\javaptest>javap Test
Compiled from "Test.java"
public class test.Test extends java.lang.Object{
int number;
public test.Test();
public void sayHello();
}
带参数-c:
则可以看到字节码了:
带参数-l: 将显示行号和局部变量表
-public 只显示 public 类及成员。
-protected 只显示 protected 和 public 类及成员。
-package 只显示包、protected 和 public 类及成员。这是缺省设置。
-private 显示所有类和成员。
的JDK版本号等,其实不用工具,也可以用JDK自带的javap命令进行反编译输出,下面小结
其用法:
1,javap -verbose 类名
得到的信息如下:
Compiled from "Test.java"
public class Test extends java.lang.Object
SourceFile: "Test.java"
minor version: 0
major version: 50
Constant pool:
......
可以看出jdk的版本,这个用在判断某些CLASS的版本是否兼容的时候很有用.
2 最常见的不带参数的情况:javap 类名
比如某个类:
- package test;
- public class Test {
- int number = 5;
- public void sayHello() {
- System.out.println("Hello");
- }
- }
则:
C:\temp\javaptest>javap Test
Compiled from "Test.java"
public class test.Test extends java.lang.Object{
int number;
public test.Test();
public void sayHello();
}
带参数-c:
则可以看到字节码了:
- C:\temp\javaptest>javap -c Test
- Compiled from "Test.java"
- public class test.Test extends java.lang.Object{
- int number;
- public test.Test();
- Code:
- 0: aload_0
- 1: invokespecial #1; //Method java/lang/Object."<init>":()V
- 4: aload_0
- 5: iconst_5
- 6: putfield #2; //Field number:I
- 9: return
- public void sayHello();
- Code:
- 0: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
- 3: ldc #4; //String Hello
- 5: invokevirtual #5; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
- 8: return
- }
带参数-l: 将显示行号和局部变量表
-public 只显示 public 类及成员。
-protected 只显示 protected 和 public 类及成员。
-package 只显示包、protected 和 public 类及成员。这是缺省设置。
-private 显示所有类和成员。
转自: http://jackyrong.iteye.com/blog/1885488