原文: https://howtodoinjava.com/java/basics/how-to-view-generate-bytecode-for-a-java-class-file/
很多时候,我们需要了解编译器在后台执行的操作。 我们正在编写的 Java 语句将如何重新排序和执行。 另外,我们也需要查看字节码以用于学习目的,我很少这样做。 在本教程中,我将给出一个示例,说明如何在 Java 中为类文件生成字节码。
为了演示该示例,我使用了为我的其他教程创建的 java 文件,该教程与 java 7 中的自动资源管理有关。
步骤 1)使用命令javac(可选)编译文件ResourceManagementInJava7.java
这是可选的,因为您可能已经具有.class文件。
prompt > javac C:tempjavatestResourceManagementInJava7.java
这将生成.class文件ResourceManagementInJava7.class。
步骤 2)执行javap命令并将输出重定向到.bc文件
C:>javap -c C:tempjavatestResourceManagementInJava7.class > C:tempjavatestbytecode.bc

资料夹检视
让我们看一下在命令提示符下运行的命令。

命令窗口视图
文件bytecode.bc文件将在给定位置生成。 将会是这样的:
Compiled from "ResourceManagementInJava7.java"public class com.howtodoinjava.java7.tryCatch.ResourceManagementInJava7 {public com.howtodoinjava.java7.tryCatch.ResourceManagementInJava7();Code:0: aload_01: invokespecial #1 // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: new #2 // class java/io/BufferedReader3: dup4: new #3 // class java/io/FileReader7: dup8: ldc #4 // String C:/temp/test1.txt10: invokespecial #5 // Method java/io/FileReader."<init>":(Ljava/lang/String;)V13: invokespecial #6 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V16: astore_117: aconst_null18: astore_219: new #2 // class java/io/BufferedReader22: dup23: new #3 // class java/io/FileReader26: dup27: ldc #7 // String C:/temp/test2.txt29: invokespecial #5 // Method java/io/FileReader."<init>":(Ljava/lang/String;)V32: invokespecial #6 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V35: astore_336: aconst_null37: astore 439: new #2 // class java/io/BufferedReader42: dup43: new #3 // class java/io/FileReader46: dup47: ldc #8 // String C:/temp/test3.txt49: invokespecial #5 // Method java/io/FileReader."<init>":(Ljava/lang/String;)V52: invokespecial #6 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V55: astore 557: aconst_null58: astore 660: aload 562: ifnull 13865: aload 667: ifnull 9070: aload 572: invokevirtual #9 // Method java/io/BufferedReader.close:()V75: goto 13878: astore 780: aload 682: aload 784: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V87: goto 13890: aload 592: invokevirtual #9 // Method java/io/BufferedReader.close:()V95: goto 13898: astore 8100: aload 5102: ifnull 135105: aload 6107: ifnull 130110: aload 5112: invokevirtual #9 // Method java/io/BufferedReader.close:()V115: goto 135118: astore 9120: aload 6122: aload 9124: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V127: goto 135130: aload 5132: invokevirtual #9 // Method java/io/BufferedReader.close:()V135: aload 8137: athrow138: aload_3139: ifnull 219142: aload 4144: ifnull 166147: aload_3148: invokevirtual #9 // Method java/io/BufferedReader.close:()V151: goto 219154: astore 5156: aload 4158: aload 5160: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V163: goto 219166: aload_3167: invokevirtual #9 // Method java/io/BufferedReader.close:()V170: goto 219173: astore 5175: aload 5177: astore 4179: aload 5181: athrow182: astore 10184: aload_3185: ifnull 216188: aload 4190: ifnull 212193: aload_3194: invokevirtual #9 // Method java/io/BufferedReader.close:()V197: goto 216200: astore 11202: aload 4204: aload 11206: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V209: goto 216212: aload_3213: invokevirtual #9 // Method java/io/BufferedReader.close:()V216: aload 10218: athrow219: aload_1220: ifnull 290223: aload_2224: ifnull 243227: aload_1228: invokevirtual #9 // Method java/io/BufferedReader.close:()V231: goto 290234: astore_3235: aload_2236: aload_3237: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V240: goto 290243: aload_1244: invokevirtual #9 // Method java/io/BufferedReader.close:()V247: goto 290250: astore_3251: aload_3252: astore_2253: aload_3254: athrow255: astore 12257: aload_1258: ifnull 287261: aload_2262: ifnull 283265: aload_1266: invokevirtual #9 // Method java/io/BufferedReader.close:()V269: goto 287272: astore 13274: aload_2275: aload 13277: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V280: goto 287283: aload_1284: invokevirtual #9 // Method java/io/BufferedReader.close:()V287: aload 12289: athrow290: goto 298293: astore_1294: aload_1295: invokevirtual #13 // Method java/io/IOException.printStackTrace:()V298: returnException table:from to target type70 75 78 Class java/lang/Throwable110 115 118 Class java/lang/Throwable98 100 98 any147 151 154 Class java/lang/Throwable39 138 173 Class java/lang/Throwable39 138 182 any193 197 200 Class java/lang/Throwable173 184 182 any227 231 234 Class java/lang/Throwable19 219 250 Class java/lang/Throwable19 219 255 any265 269 272 Class java/lang/Throwable250 257 255 any0 290 293 Class java/io/IOException}
学习愉快!
