由于后面要分享的一篇文章中用到了這篇文章要推薦的一個插件,所以這里分享一下,非常實用!你會愛上它的!

開始推薦 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 查看某個類對應的位元組碼檔案,

我的開源專案推薦
- JavaGuide :「Java學習+面試指南」一份涵蓋大部分Java程式員所需要掌握的核心知識,準備 Java 面試,首選 JavaGuide!
- guide-rpc-framework :A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 實作的自定義 RPC 框架-附詳細實作程序和相關教程)
- jsoncat :仿 Spring Boot 但不同于 Spring Boot 的一個輕量級的 HTTP 框架
- programmer-advancement :程式員應該有的一些好習慣+面試必知事項!
- springboot-guide :Not only Spring Boot but also important knowledge of Spring(不只是SpringBoot還有Spring重要知識點)
- awesome-java :Collection of awesome Java project on Github(Github 上非常棒的 Java 開源專案集合).
我整理了一份優質原創PDF資源免費分享給大家,大部分內容都是我的原創,少部分來自朋友,
下載地址:https://cowtransfer.com/s/fbed14f0c22a4d ,
我是 Guide 哥,一 Java 后端開發,會一點前端,自由的少年,我們下期再見!微信搜“JavaGuide”回復“面試突擊”領取我整理的 4 本原創PDF
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/172106.html
標籤:Java
