开始推荐 idea 字节码查看神器之前,先来回顾一下 java 字节码是啥。
java 虚拟机(jvm)是运行 java 字节码的虚拟机。jvm 有针对不同系统的特定实现(windows,linux,macos),目的是使用相同的字节码,它们都会给出相同的结果。
在 java 中,jvm 可以理解的代码就叫做字节码的文件),它不面向任何特定的处理器,只面向虚拟机。java 语言通过字节码的方式,在一定程度上解决了传统解释林徽因传型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
我们在平时学习的时候,经常需要查看某个 java 类的字节码文件。查看字节码文件更容易让我们搞懂 java 代码背后的原理比如搞懂 java 中的各种语法糖的本质。
如果我们通过命令行来查看某个 class 的字节码文件的宋濂诚实话,可以直接通过javap
命令,不过这种方式太原始了,效率十分低,并且看起来不直观。
下面介绍两种使用 idea 查看类对应字节码文件的方式(javap
这种方式就不提了)。
我们以这段代码作为案例:
publicclassmain{publicstaticvoidmain(string[]args){integeri=null;booleanflag=fal;system.out.println(flag?0:i);}}
上面这段代码由于使用三目运算符不当导致诡异了 npe 异常。为了搞清楚事情的原因,我们来看其对应的字节码。
我们点击view -> show bytecode
即微的意思可通过 idea 查看某个类对应的字节码文件。
需要注意的是:查看某个类对应的字节码文件之前确保它已经被编译过。
稍等几秒钟之后,你就可以直观到看到对应的类的字节码内容了。
从字节码中可以看出,我圈出来的位置发生了拆箱操作。
装箱:将基本类型用它们对应的引用类型包装起来;拆箱:将包装类型转换为基本数据类型;详细解释下就是:flag ? 0 : i
这行代码中,0 是基本数据类型 int,返回数据的时候 i 会被强制拆箱成 int 类型,由于 i 的值是 null,因此就抛出了 npe 异常。
integeri=null;booleanf政治面貌lag=fal;system.out.println(flag?0:i);
如果,我们把代码中flag
变量的值修改为 true 的话,就不会存在 npe 问题了,因为会直接返回 0,不会进行拆箱操作。
相比于 idea 自带的查看类字节的功能,我更推荐jclasslib女神节唯美句子说说
这个插件,非常棒!
使用jclasslib
不光可以直观地查看某个类对应的字节码文件,还可以查看类的基本信息、常量池、接口、属性、函数等信息。
我们直接在 idea 的插件市场即可找到这个插件。我这里已经安装好了。
安装完成之后,重启 idea。点击view -> show bytecode with jclasslib
即可通过jclasslib
查看某个类对应的字节码文件。
工作需要,调研了桌面端开发常用的一些技术栈,分享出来,供需要的小伙伴参考。
以上就是idea神器一键查看java字节码及其他类信息的详细内容,更多关于idea查看java字节码及其他类的资料请关注www.887551.com其它相关文章!
本文发布于:2023-04-04 17:19:35,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/520ee55fb4595d4d6ecec0d8c7ba709c.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:IDEA神器一键查看Java字节码及其他类信息插件.doc
本文 PDF 下载地址:IDEA神器一键查看Java字节码及其他类信息插件.pdf
留言与评论(共有 0 条评论) |