IDEA激活码,jclasslib: 一款IDEA字节码查看神器

开始推荐 IDEA 字节码查看神器之前,先来回顾一下 Java 字节码是啥。
何为 Java 字节码?
Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。
字节码
在 Java 中,能够被 JVM 理解的代码被称为“字节码”(即扩展名为 .class
的文件)。它不针对任何特定的处理器,只针对虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时保留了解释型语言可移植的特点。因此,Java 程序运行时比较高效。由于字节码不针对特定的机器,因此 Java 程序无需重新编译便可在多种不同操作系统的计算机上运行。
Java 程序从源代码到运行一般有下面 3 步:


为什么要查看 Java 字节码?
在平时的学习中,我们经常需要查看某个 Java 类的字节码文件。查看字节码文件可以更容易地理解 Java 代码背后的原理,例如各种语法糖的本质。
如何查看 Java 字节码?
如果我们想查看某个类的字节码文件,一种方法是通过命令行使用 javap
命令。不过这种方法效率低,且不太直观。
下面介绍两种在 IDEA 中查看类对应字节码文件的方式(javap
方式不再提及)。
我们以这段代码作为案例:
上面这段代码由于使用三目运算符不当导致诡异了 NPE 异常。为了搞清楚事情的原因,我们来看其对应的字节码。
使用 IDEA 自带功能
我们点击 View -> Show Bytecode
即可通过 IDEA 查看某个类对应的字节码文件。
注意
查看某个类对应的字节码文件之前需确保它已经被编译过。

稍等几秒钟之后,你就可以直观到看到对应的类的字节码内容了。

从字节码中可以看出,我圈出来的位置发生了 拆箱操作 。
装箱: 将基本类型用它们对应的引用类型包装起来;拆箱: 将包装类型转换为基本数据类型;
详细解释如下:在代码行 flag ? 0 : i
中,0
是基本数据类型 int。在返回数据时,i
会被强制拆箱成 int 类型。由于 i
的值为 null
,因此会抛出 NPE 异常。
Integer i = null;
Boolean flag = false;
System.out.println(flag ? 0: i);
如果我们将代码中的 flag
变量的值修改为 true
,就不会出现 NPE 问题,因为它将直接返回 0
,而不进行拆箱操作。
使用 IDEA 插件 jclasslib(推荐)
相比于 IDEA 自带的查看类字节的功能,我更推荐 jclasslib
这个插件,非常棒!
使用 jclasslib
不仅可以直观地查看某个类对应的字节码文件,还可以查看类的基本信息、常量池、接口、属性、函数等信息。

我们直接在 IDEA 的插件市场即可找到这个插件。我这里已经安装好了。

安装完成之后,重启 IDEA。点击 View -> Show Bytecode With jclasslib
即可通过 jclasslib
查看某个类对应的字节码文件。
