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

35次阅读

共计 2298 个字符,预计需要花费 6 分钟才能阅读完成。

因为前面要分享的一篇文章中用到了这篇文章要举荐的一个插件,所以这里分享一下。十分实用!你会爱上它的!

开始举荐 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 资源收费分享给大家,大部分内容都是我的原创,少部分来自敌人。

<img src=”https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/2020-10/image-20201012105544846.png” style=”zoom:50%;” />

<img src=”https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/2020-10/image-20201012105608336.png” alt=”image-20201012105608336″ style=”zoom:50%;” />

下载地址:https://cowtransfer.com/s/fbed14f0c22a4d。

我是 Guide 哥,一 Java 后端开发,会一点前端,自在的少年。咱们下期再见!微信搜“JavaGuide”回复“面试突击”支付我整顿的 4 本原创 PDF

正文完
 0