如何使用IDEA查看java文件編譯后的字節(jié)碼內(nèi)容
首先編寫一個java類 StringDemo1.java
public class StringDemo1 { ? ?public static void main(String[] args) { ? ? ? ?String str1 = "aaa" + "bbb"; ? ? ? ?System.out.println(str1); ? ? ? ?String str2 = "ccc"; ? ? ? ?str2 += "ddd"; ? ? ? ?System.out.println(str2); ? ?} }
經(jīng)過編譯后,生成 StringDemo1.class文件
使用IDEA查看編譯之后的文件內(nèi)容:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package jdk.java.lang.string; public class StringDemo1 { ? ?public StringDemo1() { ? ?} ? ?public static void main(String[] args) { ? ? ? ?String str1 = "aaabbb"; ? ? ? ?System.out.println(str1); ? ? ? ?String str2 = "ccc"; ? ? ? ?str2 = str2 + "ddd"; ? ? ? ?System.out.println(str2); ? ?} }
可以看出內(nèi)容已經(jīng)是經(jīng)過IDEA反編譯之后的了,并不能看到字節(jié)碼內(nèi)容。
使用jclasslib反編譯工具
在IDEA中搜索插件jclasslib bytecode viewer,然后進行安裝,重啟IDEA。
再次打開StringDemo1.java文件,在IDEA菜單欄上打開View -> Show Bytecode,即可以看到字節(jié)碼文件內(nèi)容:
// class version 52.0 (52) // access flags 0x21 public class jdk/java/lang/string/StringDemo1 { ?// compiled from: StringDemo1.java ?// access flags 0x1 ?public <init>()V ? L0 ? ?LINENUMBER 8 L0 ? ?ALOAD 0 ? ?INVOKESPECIAL java/lang/Object.<init> ()V ? ?RETURN ? L1 ? ?LOCALVARIABLE this Ljdk/java/lang/string/StringDemo1; L0 L1 0 ? ?MAXSTACK = 1 ? ?MAXLOCALS = 1 ?// access flags 0x9 ?public static main([Ljava/lang/String;)V ? L0 ? ?LINENUMBER 11 L0 ? ?LDC "aaabbb" ? ?ASTORE 1 ? L1 ? ?LINENUMBER 12 L1 ? ?GETSTATIC java/lang/System.out : Ljava/io/PrintStream; ? ?ALOAD 1 ? ?INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V ? L2 ? ?LINENUMBER 15 L2 ? ?LDC "ccc" ? ?ASTORE 2 ? L3 ? ?LINENUMBER 16 L3 ? ?NEW java/lang/StringBuilder ? ?DUP ? ?INVOKESPECIAL java/lang/StringBuilder.<init> ()V ? ?ALOAD 2 ? ?INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; ? ?LDC "ddd" ? ?INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; ? ?INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String; ? ?ASTORE 2 ? L4 ? ?LINENUMBER 17 L4 ? ?GETSTATIC java/lang/System.out : Ljava/io/PrintStream; ? ?ALOAD 2 ? ?INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V ? L5 ? ?LINENUMBER 18 L5 ? ?RETURN ? L6 ? ?LOCALVARIABLE args [Ljava/lang/String; L0 L6 0 ? ?LOCALVARIABLE str1 Ljava/lang/String; L1 L6 1 ? ?LOCALVARIABLE str2 Ljava/lang/String; L3 L6 2 ? ?MAXSTACK = 2 ? ?MAXLOCALS = 3 }
以上編譯內(nèi)容是我在JDK1.8u202環(huán)境下進行編譯的,所以開頭才會有class version 52.0 (52)的標識。
至于字節(jié)碼怎么讀,就需要繼續(xù)學(xué)習(xí);
Java虛擬機規(guī)范中有關(guān)于Java虛擬機指令集的相關(guān)資料,可以學(xué)習(xí)研究一下。
隨后還可以學(xué)習(xí)一下ASM技術(shù)(Java字節(jié)碼操控框架);
JDK版本映射
JDK版本 | class版本 |
---|---|
J2SE 8 | 52 |
J2SE 7 | 51 |
J2SE 6.0 | 50 |
J2SE 5.0 | 49 |
JDK 1.4 | 48 |
JDK 1.3 | 47 |
JDK 1.2 | 46 |
JDK 1.1 | 45 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 基于idea解決springweb項目的Java文件無法執(zhí)行問題
- IDEA修改java文件后 不用重啟Tomcat服務(wù)便可實現(xiàn)自動更新
- IDEA打開java項目后里面的java文件不能運行解決辦法
- IDEA不識別Java文件:文件變橙色&顯示后綴名.java的解決
- IntelliJ IDEA : .java文件左下角顯示"J"圖標的問題
- IDEA 打開java文件對應(yīng)的class路徑的操作步驟
- Intellj Idea中的maven工程Java文件顏色不對,未被識別的解決
- IntelliJ IDEA配置java環(huán)境及解決IDEA不能直接運行單個JAVA文件的問題
- idea查看java文件的全部接口的操作方法
相關(guān)文章
Springboot接口返回參數(shù)及入?yún)SA加密解密的過程詳解
這篇文章主要介紹了Springboot接口返回參數(shù)及入?yún)SA加密解密,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07mybatis-plus使用@EnumValue處理枚舉類型的示例代碼
這篇文章主要介紹了mybatis-plus使用@EnumValue處理枚舉類型的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09mybatis中foreach報錯:_frch_item_0 not found的解決方法
這篇文章主要給大家介紹了mybatis中foreach報錯:_frch_item_0 not found的解決方法,文章通過示例代碼介紹了詳細的解決方法,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06java利用url實現(xiàn)網(wǎng)頁內(nèi)容的抓取
本文主要介紹了java利用url實現(xiàn)網(wǎng)頁內(nèi)容抓取的示例。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03Java基礎(chǔ)之隱式轉(zhuǎn)換vs強制轉(zhuǎn)換
這篇文章主要介紹了Java基礎(chǔ)之隱式轉(zhuǎn)換vs強制轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2015-12-12java中如何使用BufferedImage判斷圖像通道順序并轉(zhuǎn)RGB/BGR
這篇文章主要介紹了java中如何BufferedImage判斷圖像通道順序并轉(zhuǎn)RGB/BGR的相關(guān)資料,需要的朋友可以參考下2017-03-03細說Springcloud eureka的幾種主動下線服務(wù)的方式
這篇文章主要介紹了細說Springcloud eureka的幾種主動下線服務(wù)的方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09