推荐一款IDEA神器!一键查看Java字节码以及其他类信息

由于后面要分享的一篇文章中用到了这篇文章要推荐的一个插件,所以这里分享一下。非常实用!你会爱上它的!

开始推荐 IDEA 字节码查看神器之前,先来回顾一下 Java 字节码是啥。

何为 Java 字节码?

Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。

什么是字节码?采用字节码的好处是什么?

在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。

Java 程序从源代码到运行一般下面 3 步:

为什么要查看 Java 字节码?

我们在平时学习的时候,经常需要查看某个 java 类的字节码文件。查看字节码文件更容易让我们搞懂 java 代码背后的原理比如搞懂 java 中的各种语法糖的本质。

如何查看 Java 字节码?

如果我们通过命令行来查看某个 class 的字节码文件的话,可以直接通过 javap 命令,不过这种方式太原始了,效率十分低,并且看起来不直观。

下面介绍两种使用 IDEA 查看类对应字节码文件的方式(javap这种方式就不提了)。

我们以这段代码作为案例:

public class Main {
    public static void main(String[] args) {
        Integer i = null;
        Boolean flag = false;
        System.out.println(flag ? 0 : i);
    }
}

上面这段代码由于使用三目运算符不当导致诡异了 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 查看某个类对应的字节码文件。

我的开源项目推荐

  1. JavaGuide :「Java学习+面试指南」一份涵盖大部分Java程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!
  2. guide-rpc-framework :A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程)
  3. jsoncat :仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架
  4. programmer-advancement :程序员应该有的一些好习惯+面试必知事项!
  5. springboot-guide :Not only Spring Boot but also important knowledge of Spring(不只是SpringBoot还有Spring重要知识点)
  6. awesome-java :Collection of awesome Java project on Github(Github 上非常棒的 Java 开源项目集合).

我整理了一份优质原创PDF资源免费分享给大家,大部分内容都是我的原创,少部分来自朋友。

下载地址:cowtransfer.com/s/fbed14f0c… 。

作者:JavaGuide
链接:https://juejin.im/post/6883070621966663693

难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记,以及学习视频都是可以点击这里免费领取的!

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

image.png

o5kzpnK-1623621490770)]

[外链图片转存中…(img-YrNkBwsw-1623621490770)]

[外链图片转存中…(img-3xN2FSNL-1623621490771)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值