原文: 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文件。

  1. prompt > javac C:tempjavatestResourceManagementInJava7.java

这将生成.class文件ResourceManagementInJava7.class

步骤 2)执行javap命令并将输出重定向到.bc文件

  1. C:>javap -c C:tempjavatestResourceManagementInJava7.class > C:tempjavatestbytecode.bc

Java 查看/生成类文件的字节码 - 图1

资料夹检视

让我们看一下在命令提示符下运行的命令。

Java 查看/生成类文件的字节码 - 图2

命令窗口视图

文件bytecode.bc文件将在给定位置生成。 将会是这样的:

  1. Compiled from "ResourceManagementInJava7.java"
  2. public class com.howtodoinjava.java7.tryCatch.ResourceManagementInJava7 {
  3. public com.howtodoinjava.java7.tryCatch.ResourceManagementInJava7();
  4. Code:
  5. 0: aload_0
  6. 1: invokespecial #1 // Method java/lang/Object."<init>":()V
  7. 4: return
  8. public static void main(java.lang.String[]);
  9. Code:
  10. 0: new #2 // class java/io/BufferedReader
  11. 3: dup
  12. 4: new #3 // class java/io/FileReader
  13. 7: dup
  14. 8: ldc #4 // String C:/temp/test1.txt
  15. 10: invokespecial #5 // Method java/io/FileReader."<init>":(Ljava/lang/String;)V
  16. 13: invokespecial #6 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V
  17. 16: astore_1
  18. 17: aconst_null
  19. 18: astore_2
  20. 19: new #2 // class java/io/BufferedReader
  21. 22: dup
  22. 23: new #3 // class java/io/FileReader
  23. 26: dup
  24. 27: ldc #7 // String C:/temp/test2.txt
  25. 29: invokespecial #5 // Method java/io/FileReader."<init>":(Ljava/lang/String;)V
  26. 32: invokespecial #6 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V
  27. 35: astore_3
  28. 36: aconst_null
  29. 37: astore 4
  30. 39: new #2 // class java/io/BufferedReader
  31. 42: dup
  32. 43: new #3 // class java/io/FileReader
  33. 46: dup
  34. 47: ldc #8 // String C:/temp/test3.txt
  35. 49: invokespecial #5 // Method java/io/FileReader."<init>":(Ljava/lang/String;)V
  36. 52: invokespecial #6 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V
  37. 55: astore 5
  38. 57: aconst_null
  39. 58: astore 6
  40. 60: aload 5
  41. 62: ifnull 138
  42. 65: aload 6
  43. 67: ifnull 90
  44. 70: aload 5
  45. 72: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  46. 75: goto 138
  47. 78: astore 7
  48. 80: aload 6
  49. 82: aload 7
  50. 84: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
  51. 87: goto 138
  52. 90: aload 5
  53. 92: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  54. 95: goto 138
  55. 98: astore 8
  56. 100: aload 5
  57. 102: ifnull 135
  58. 105: aload 6
  59. 107: ifnull 130
  60. 110: aload 5
  61. 112: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  62. 115: goto 135
  63. 118: astore 9
  64. 120: aload 6
  65. 122: aload 9
  66. 124: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
  67. 127: goto 135
  68. 130: aload 5
  69. 132: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  70. 135: aload 8
  71. 137: athrow
  72. 138: aload_3
  73. 139: ifnull 219
  74. 142: aload 4
  75. 144: ifnull 166
  76. 147: aload_3
  77. 148: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  78. 151: goto 219
  79. 154: astore 5
  80. 156: aload 4
  81. 158: aload 5
  82. 160: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
  83. 163: goto 219
  84. 166: aload_3
  85. 167: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  86. 170: goto 219
  87. 173: astore 5
  88. 175: aload 5
  89. 177: astore 4
  90. 179: aload 5
  91. 181: athrow
  92. 182: astore 10
  93. 184: aload_3
  94. 185: ifnull 216
  95. 188: aload 4
  96. 190: ifnull 212
  97. 193: aload_3
  98. 194: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  99. 197: goto 216
  100. 200: astore 11
  101. 202: aload 4
  102. 204: aload 11
  103. 206: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
  104. 209: goto 216
  105. 212: aload_3
  106. 213: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  107. 216: aload 10
  108. 218: athrow
  109. 219: aload_1
  110. 220: ifnull 290
  111. 223: aload_2
  112. 224: ifnull 243
  113. 227: aload_1
  114. 228: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  115. 231: goto 290
  116. 234: astore_3
  117. 235: aload_2
  118. 236: aload_3
  119. 237: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
  120. 240: goto 290
  121. 243: aload_1
  122. 244: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  123. 247: goto 290
  124. 250: astore_3
  125. 251: aload_3
  126. 252: astore_2
  127. 253: aload_3
  128. 254: athrow
  129. 255: astore 12
  130. 257: aload_1
  131. 258: ifnull 287
  132. 261: aload_2
  133. 262: ifnull 283
  134. 265: aload_1
  135. 266: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  136. 269: goto 287
  137. 272: astore 13
  138. 274: aload_2
  139. 275: aload 13
  140. 277: invokevirtual #11 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
  141. 280: goto 287
  142. 283: aload_1
  143. 284: invokevirtual #9 // Method java/io/BufferedReader.close:()V
  144. 287: aload 12
  145. 289: athrow
  146. 290: goto 298
  147. 293: astore_1
  148. 294: aload_1
  149. 295: invokevirtual #13 // Method java/io/IOException.printStackTrace:()V
  150. 298: return
  151. Exception table:
  152. from to target type
  153. 70 75 78 Class java/lang/Throwable
  154. 110 115 118 Class java/lang/Throwable
  155. 98 100 98 any
  156. 147 151 154 Class java/lang/Throwable
  157. 39 138 173 Class java/lang/Throwable
  158. 39 138 182 any
  159. 193 197 200 Class java/lang/Throwable
  160. 173 184 182 any
  161. 227 231 234 Class java/lang/Throwable
  162. 19 219 250 Class java/lang/Throwable
  163. 19 219 255 any
  164. 265 269 272 Class java/lang/Throwable
  165. 250 257 255 any
  166. 0 290 293 Class java/io/IOException
  167. }

学习愉快!