javap能夠查看java編譯器爲咱們生成的字節碼。 經過它,能夠對照源代碼和字節碼,從而瞭解不少編譯器內部的工做。java
package com.ant; public class HelloWorld{ private String name; private static final String LANGUAGE = "Java"; public HelloWorld(String name){ this.name = name; } public static void main(String[] args){ HelloWorld hw = new HelloWorld("Tom"); hw.sayHelloWorld(); } public void sayHelloWorld(){ System.out.println(LANGUAGE+": "+name+" , HelloWorld !"); } }
javap -v com.ant.HelloWorld:app
Classfile /D:/com/ant/HelloWorld.class Last modified 2016-11-1; size 837 bytes MD5 checksum e5ee3b20c3c6196f835eea02b3777e50 Compiled from "HelloWorld.java" public class com.ant.HelloWorld SourceFile: "HelloWorld.java" minor version: 0 major version: 51 flags: ACC_PUBLIC, ACC_SUPER Constant pool: #1 = Methodref #15.#31 // java/lang/Object."<init>":()V #2 = Fieldref #3.#32 // com/ant/HelloWorld.name:Ljava/lang/String; #3 = Class #33 // com/ant/HelloWorld #4 = String #34 // Tom #5 = Methodref #3.#35 // com/ant/HelloWorld."<init>":(Ljava/lang/String;)V #6 = Methodref #3.#36 // com/ant/HelloWorld.sayHelloWorld:()V #7 = Fieldref #37.#38 // java/lang/System.out:Ljava/io/PrintStream; #8 = Class #39 // java/lang/StringBuilder #9 = Methodref #8.#31 // java/lang/StringBuilder."<init>":()V #10 = String #40 // Java: #11 = Methodref #8.#41 // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; #12 = String #42 // , HelloWorld ! #13 = Methodref #8.#43 // java/lang/StringBuilder.toString:()Ljava/lang/String; #14 = Methodref #44.#45 // java/io/PrintStream.println:(Ljava/lang/String;)V #15 = Class #46 // java/lang/Object #16 = Utf8 name #17 = Utf8 Ljava/lang/String; #18 = Utf8 LANGUAGE #19 = Utf8 ConstantValue #20 = String #47 // Java #21 = Utf8 <init> #22 = Utf8 (Ljava/lang/String;)V #23 = Utf8 Code #24 = Utf8 LineNumberTable #25 = Utf8 main #26 = Utf8 ([Ljava/lang/String;)V #27 = Utf8 sayHelloWorld #28 = Utf8 ()V #29 = Utf8 SourceFile #30 = Utf8 HelloWorld.java #31 = NameAndType #21:#28 // "<init>":()V #32 = NameAndType #16:#17 // name:Ljava/lang/String; #33 = Utf8 com/ant/HelloWorld #34 = Utf8 Tom #35 = NameAndType #21:#22 // "<init>":(Ljava/lang/String;)V #36 = NameAndType #27:#28 // sayHelloWorld:()V #37 = Class #48 // java/lang/System #38 = NameAndType #49:#50 // out:Ljava/io/PrintStream; #39 = Utf8 java/lang/StringBuilder #40 = Utf8 Java: #41 = NameAndType #51:#52 // append:(Ljava/lang/String;)Ljava/lang/StringBuilder; #42 = Utf8 , HelloWorld ! #43 = NameAndType #53:#54 // toString:()Ljava/lang/String; #44 = Class #55 // java/io/PrintStream #45 = NameAndType #56:#22 // println:(Ljava/lang/String;)V #46 = Utf8 java/lang/Object #47 = Utf8 Java #48 = Utf8 java/lang/System #49 = Utf8 out #50 = Utf8 Ljava/io/PrintStream; #51 = Utf8 append #52 = Utf8 (Ljava/lang/String;)Ljava/lang/StringBuilder; #53 = Utf8 toString #54 = Utf8 ()Ljava/lang/String; #55 = Utf8 java/io/PrintStream #56 = Utf8 println { public com.ant.HelloWorld(java.lang.String); flags: ACC_PUBLIC Code: stack=2, locals=2, args_size=2 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: aload_0 5: aload_1 6: putfield #2 // Field name:Ljava/lang/String; 9: return LineNumberTable: line 9: 0 line 10: 4 line 11: 9 public static void main(java.lang.String[]); flags: ACC_PUBLIC, ACC_STATIC Code: stack=3, locals=2, args_size=1 0: new #3 // class com/ant/HelloWorld 3: dup 4: ldc #4 // String Tom 6: invokespecial #5 // Method "<init>":(Ljava/lang/String;)V 9: astore_1 10: aload_1 11: invokevirtual #6 // Method sayHelloWorld:()V 14: return LineNumberTable: line 13: 0 line 14: 10 line 15: 14 public void sayHelloWorld(); flags: ACC_PUBLIC Code: stack=3, locals=1, args_size=1 0: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream; 3: new #8 // class java/lang/StringBuilder 6: dup 7: invokespecial #9 // Method java/lang/StringBuilder."<init>":()V 10: ldc #10 // String Java: 12: invokevirtual #11 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: aload_0 16: getfield #2 // Field name:Ljava/lang/String; 19: invokevirtual #11 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 22: ldc #12 // String , HelloWorld ! 24: invokevirtual #11 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 27: invokevirtual #13 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 30: invokevirtual #14 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 33: return LineNumberTable: line 18: 0 line 19: 33 }
javap -public com.ant.HelloWorld:ui
Compiled from "HelloWorld.java" public class com.ant.HelloWorld { public com.ant.HelloWorld(java.lang.String); public static void main(java.lang.String[]); public void sayHelloWorld(); }
javap -p com.ant.HelloWorld:this
Compiled from "HelloWorld.java" public class com.ant.HelloWorld { private java.lang.String name; private static final java.lang.String LANGUAGE; public com.ant.HelloWorld(java.lang.String); public static void main(java.lang.String[]); public void sayHelloWorld(); }
javap -sysinfo com.ant.HelloWorld:code
Classfile /D:/com/ant/HelloWorld.class Last modified 2016-11-1; size 837 bytes MD5 checksum e5ee3b20c3c6196f835eea02b3777e50 Compiled from "HelloWorld.java" public class com.ant.HelloWorld { public com.ant.HelloWorld(java.lang.String); public static void main(java.lang.String[]); public void sayHelloWorld(); }
javap -c -p com.ant.HelloWorld:ci
Compiled from "HelloWorld.java" public class com.ant.HelloWorld { private java.lang.String name; private static final java.lang.String LANGUAGE; public com.ant.HelloWorld(java.lang.String); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: aload_0 5: aload_1 6: putfield #2 // Field name:Ljava/lang/String; 9: return public static void main(java.lang.String[]); Code: 0: new #3 // class com/ant/HelloWorld 3: dup 4: ldc #4 // String Tom 6: invokespecial #5 // Method "<init>":(Ljava/lang/String;)V 9: astore_1 10: aload_1 11: invokevirtual #6 // Method sayHelloWorld:()V 14: return public void sayHelloWorld(); Code: 0: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream; 3: new #8 // class java/lang/StringBuilder 6: dup 7: invokespecial #9 // Method java/lang/StringBuilder."<init>":()V 10: ldc #10 // String Java: 12: invokevirtual #11 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: aload_0 16: getfield #2 // Field name:Ljava/lang/String; 19: invokevirtual #11 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 22: ldc #12 // String , HelloWorld ! 24: invokevirtual #11 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 27: invokevirtual #13 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 30: invokevirtual #14 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 33: return }