怎么使用IDEA查看java文件编译后的字节码内容
作者:WeekendLife
时间:2023-04-27
来源:互联网
浏览:0
首先编写一个java类StringDemo1.javapublicclassStringDemo1{publicstaticvoidmain(String[]args){Stringstr1="aaa"+"bbb";System.out.println(str1);Stringstr2="ccc";str2+="ddd";System.out.println(str2);}}经过编译后,生成StringDemo1.class文件使用IDEA查看编译之后的文件内容:////Sourcecoderecreat
首先编写一个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);
}
}经过编译后,生成 StringDemo1.class文件
使用IDEA查看编译之后的文件内容:
//
// 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);
}
}
可以看出内容已经是经过IDEA反编译之后的了,并不能看到字节码内容。
使用jclasslib反编译工具
在IDEA中搜索插件jclasslib bytecode viewer,然后进行安装,重启IDEA。
再次打开StringDemo1.java文件,在IDEA菜单栏上打开View -> Show Bytecode,即可以看到字节码文件内容:
// class version 52.0 (52)
// access flags 0x21
public class jdk/java/lang/string/StringDemo1 {
// compiled from: StringDemo1.java
// access flags 0x1
public ()V
L0
LINENUMBER 8 L0
ALOAD 0
INVOKESPECIAL java/lang/Object. ()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. ()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
} 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 |
作者最新文章
华强北手机全线涨价:涨幅400-1500元,存储成本推高售价
2026-09-08 19:22
PDF转XML操作步骤与在线工具使用指南
2026-09-03 10:06
如何把多个PPT转成PDF?批量转换PDF的方法有哪些?
2026-09-02 19:32
CorelDRAW 2021图片虚化与边缘处理教程
2026-09-02 15:44
软件教程怎么学更高效:从功能认知到真实任务练习
2026-09-02 11:43
上一篇:
MySQL如何使用聚合函数
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















