如何使用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,然后進(jìn)行安裝,重啟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)境下進(jìn)行編譯的,所以開頭才會有class version 52.0 (52)的標(biāo)識。
至于字節(jié)碼怎么讀,就需要繼續(xù)學(xué)習(xí);
Java虛擬機(jī)規(guī)范中有關(guān)于Java虛擬機(jī)指令集的相關(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)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- 基于idea解決springweb項(xiàng)目的Java文件無法執(zhí)行問題
- IDEA修改java文件后 不用重啟Tomcat服務(wù)便可實(shí)現(xiàn)自動更新
- IDEA打開java項(xiàng)目后里面的java文件不能運(yùn)行解決辦法
- IDEA不識別Java文件:文件變橙色&顯示后綴名.java的解決
- IntelliJ IDEA : .java文件左下角顯示"J"圖標(biāo)的問題
- IDEA 打開java文件對應(yīng)的class路徑的操作步驟
- Intellj Idea中的maven工程Java文件顏色不對,未被識別的解決
- IntelliJ IDEA配置java環(huán)境及解決IDEA不能直接運(yùn)行單個JAVA文件的問題
- idea查看java文件的全部接口的操作方法
相關(guān)文章
Springboot接口返回參數(shù)及入?yún)SA加密解密的過程詳解
這篇文章主要介紹了Springboot接口返回參數(shù)及入?yún)SA加密解密,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
mybatis-plus使用@EnumValue處理枚舉類型的示例代碼
這篇文章主要介紹了mybatis-plus使用@EnumValue處理枚舉類型的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
mybatis中foreach報(bào)錯:_frch_item_0 not found的解決方法
這篇文章主要給大家介紹了mybatis中foreach報(bào)錯:_frch_item_0 not found的解決方法,文章通過示例代碼介紹了詳細(xì)的解決方法,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06
java利用url實(shí)現(xiàn)網(wǎng)頁內(nèi)容的抓取
本文主要介紹了java利用url實(shí)現(xiàn)網(wǎng)頁內(nèi)容抓取的示例。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03
Java基礎(chǔ)之隱式轉(zhuǎn)換vs強(qiáng)制轉(zhuǎn)換
這篇文章主要介紹了Java基礎(chǔ)之隱式轉(zhuǎn)換vs強(qiáng)制轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2015-12-12
java中如何使用BufferedImage判斷圖像通道順序并轉(zhuǎn)RGB/BGR
這篇文章主要介紹了java中如何BufferedImage判斷圖像通道順序并轉(zhuǎn)RGB/BGR的相關(guān)資料,需要的朋友可以參考下2017-03-03
細(xì)說Springcloud eureka的幾種主動下線服務(wù)的方式
這篇文章主要介紹了細(xì)說Springcloud eureka的幾種主動下線服務(wù)的方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09

