当前位置: 首页 > 科技观察

推荐一款IDEA神器!一键查看Java字节码等类信息

时间:2023-03-15 23:20:46 科技观察

这里是IDEA神器。很实用!你会喜欢的!在开始推荐IDEA字节码查看神器之前,我们先来回顾一下什么是Java字节码。什么是Java字节码?Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM对不同的系统(Windows、Linux、macOS)有特定的实现,目的是使用相同的字节码,它们都会给出相同的结果。什么是字节码?使用字节码有什么好处?在Java中,JVM能够理解的代码称为字节码(即扩展名为.class的文件)??。它不针对任何特定处理器,仅针对虚拟机。Java语言通过字节码在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言的可移植性。因此,Java程序在运行时效率更高,而且由于字节码不特定于特定机器,Java程序无需重新编译即可在不同操作系统的计算机上运行。Java程序从源代码到运行一般有以下3个步骤:为什么要查看Java字节码?我们平时学习的时候,经常需要查看某个java类的字节码文件。查看字节码文件可以让我们更容易理解java代码背后的原理,比如理解java中各种语法糖的本质。如何查看Java字节码?如果我们通过命令行查看一个类的字节码文件,我们可以直接使用javap命令,但是这种方式太原始,效率很低,不直观。下面介绍两种使用IDEA查看类对应的字节码文件的方法(_javap这里不提了_)。我们以这段代码为例:publicclassMain{publicstaticvoidmain(String[]args){Integeri=null;Booleanflag=false;System.out.println(flag?0:i);}}上面的代码是由于使用了三元运算不正确的规范会导致奇怪的NPE异常。为了找出原因,让我们看一下相应的字节码。利用IDEA自带的功能,我们可以通过IDEA通过点击View->ShowBytecode来查看某个类对应的字节码文件。注意:在查看某个类对应的字节码文件之前,请确保它已经编译过。几秒后,可以直观的看到对应类的字节码内容。从字节码可以看出,开箱发生在我圈出的位置。装箱:用相应的引用类型包装基本类型;拆箱:将包装后的类型转换为基本数据类型;详细解释是:标志?0:在这行代码中,0是基本数据类型int,返回存储数据时,i会被强制拆箱成int类型。由于i的值为null,因此抛出NPE异常。Integeri=null;Booleanflag=false;System.out.println(flag?0:i);如果我们把代码中的flag变量的值改成true,就不会出现NPE问题,因为它会直接返回0,不会发生拆箱。使用IDEA插件jclasslib(推荐)相比IDEA自带的查看类字节的功能,推荐jclasslib插件,很棒!使用jclasslib不仅可以直观的查看某个类对应的字节码文件,还可以查看类的基本信息、常量池、接口、属性、函数等信息。我们可以直接在IDEA的插件市场中找到这个插件。我这里已经安装好了。安装完成后,重启IDEA。点击View->ShowBytecodeWithjclasslib可以通过jclasslib查看某个类对应的字节码文件。