推薦一款I(lǐng)DEA神器锣枝!一鍵查看Java字節(jié)碼以及其他類信息

由于后面要分享的一篇文章中用到了這篇文章要推薦的一個(gè)插件,所以這里分享一下兰英。非常實(shí)用撇叁!你會(huì)愛上它的!

開始推薦 IDEA 字節(jié)碼查看神器之前畦贸,先來回顧一下 Java 字節(jié)碼是啥陨闹。

何為 Java 字節(jié)碼?

Java 虛擬機(jī)(JVM)是運(yùn)行 Java 字節(jié)碼的虛擬機(jī)。JVM 有針對(duì)不同系統(tǒng)的特定實(shí)現(xiàn)(Windows薄坏,Linux正林,macOS),目的是使用相同的字節(jié)碼颤殴,它們都會(huì)給出相同的結(jié)果。

什么是字節(jié)碼?采用字節(jié)碼的好處是什么?

在 Java 中鼻忠,JVM 可以理解的代碼就叫做字節(jié)碼(即擴(kuò)展名為 .class 的文件)涵但,它不面向任何特定的處理器杈绸,只面向虛擬機(jī)。Java 語言通過字節(jié)碼的方式矮瘟,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題瞳脓,同時(shí)又保留了解釋型語言可移植的特點(diǎn)。所以 Java 程序運(yùn)行時(shí)比較高效澈侠,而且劫侧,由于字節(jié)碼并不針對(duì)一種特定的機(jī)器,因此哨啃,Java 程序無須重新編譯便可在多種不同操作系統(tǒng)的計(jì)算機(jī)上運(yùn)行烧栋。

Java 程序從源代碼到運(yùn)行一般有下面 3 步:

Java程序運(yùn)行過程

為什么要查看 Java 字節(jié)碼圣拄?

我們?cè)谄綍r(shí)學(xué)習(xí)的時(shí)候完疫,經(jīng)常需要查看某個(gè) java 類的字節(jié)碼文件。查看字節(jié)碼文件更容易讓我們搞懂 java 代碼背后的原理比如搞懂 java 中的各種語法糖的本質(zhì)旨椒。

如何查看 Java 字節(jié)碼?

如果我們通過命令行來查看某個(gè) class 的字節(jié)碼文件的話祝峻,可以直接通過 javap 命令魔吐,不過這種方式太原始了,效率十分低莱找,并且看起來不直觀酬姆。

下面介紹兩種使用 IDEA 查看類對(duì)應(yīng)字節(jié)碼文件的方式(javap這種方式就不提了)。

我們以這段代碼作為案例:

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

上面這段代碼由于使用三目運(yùn)算符不當(dāng)導(dǎo)致詭異了 NPE 異常奥溺。為了搞清楚事情的原因辞色,我們來看其對(duì)應(yīng)的字節(jié)碼。

使用 IDEA 自帶功能

我們點(diǎn)擊 View -> Show Bytecode 即可通過 IDEA 查看某個(gè)類對(duì)應(yīng)的字節(jié)碼文件谚赎。

需要注意的是:查看某個(gè)類對(duì)應(yīng)的字節(jié)碼文件之前確保它已經(jīng)被編譯過淫僻。

使用IDEA自帶功能查看Java字節(jié)碼

稍等幾秒鐘之后,你就可以直觀到看到對(duì)應(yīng)的類的字節(jié)碼內(nèi)容了壶唤。

從字節(jié)碼中可以看出雳灵,我圈出來的位置發(fā)生了 拆箱操作

  • 裝箱:將基本類型用它們對(duì)應(yīng)的引用類型包裝起來闸盔;
  • 拆箱:將包裝類型轉(zhuǎn)換為基本數(shù)據(jù)類型悯辙;

詳細(xì)解釋下就是:flag ? 0 : i 這行代碼中,0 是基本數(shù)據(jù)類型 int迎吵,返回?cái)?shù)據(jù)的時(shí)候 i 會(huì)被強(qiáng)制拆箱成 int 類型躲撰,由于 i 的值是 null,因此就拋出了 NPE 異常击费。

Integer i = null;
Boolean flag = false;
System.out.println(flag ? 0 : i);

如果拢蛋,我們把代碼中 flag 變量的值修改為 true 的話,就不會(huì)存在 NPE 問題了蔫巩,因?yàn)闀?huì)直接返回 0谆棱,不會(huì)進(jìn)行拆箱操作快压。

使用 IDEA 插件 jclasslib(推薦)

相比于 IDEA 自帶的查看類字節(jié)的功能,我更推薦 jclasslib 這個(gè)插件垃瞧,非常棒蔫劣!

使用 jclasslib 不光可以直觀地查看某個(gè)類對(duì)應(yīng)的字節(jié)碼文件,還可以查看類的基本信息个从、常量池脉幢、接口、屬性嗦锐、函數(shù)等信息嫌松。

我們直接在 IDEA 的插件市場即可找到這個(gè)插件。我這里已經(jīng)安裝好了意推。

安裝完成之后豆瘫,重啟 IDEA。點(diǎn)擊View -> Show Bytecode With jclasslib 即可通過jclasslib 查看某個(gè)類對(duì)應(yīng)的字節(jié)碼文件菊值。

使用IDEA插件jclasslib查看類的字節(jié)碼

我的開源項(xiàng)目推薦

  1. JavaGuide :「Java學(xué)習(xí)+面試指南」一份涵蓋大部分Java程序員所需要掌握的核心知識(shí)外驱。準(zhǔn)備 Java 面試,首選 JavaGuide腻窒!
  2. guide-rpc-framework :A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 實(shí)現(xiàn)的自定義 RPC 框架-附詳細(xì)實(shí)現(xiàn)過程和相關(guān)教程)
  3. jsoncat :仿 Spring Boot 但不同于 Spring Boot 的一個(gè)輕量級(jí)的 HTTP 框架
  4. programmer-advancement :程序員應(yīng)該有的一些好習(xí)慣+面試必知事項(xiàng)昵宇!
  5. springboot-guide :Not only Spring Boot but also important knowledge of Spring(不只是SpringBoot還有Spring重要知識(shí)點(diǎn))
  6. awesome-java :Collection of awesome Java project on Github(Github 上非常棒的 Java 開源項(xiàng)目集合).

我整理了一份優(yōu)質(zhì)原創(chuàng)PDF資源免費(fèi)分享給大家,大部分內(nèi)容都是我的原創(chuàng)儿子,少部分來自朋友瓦哎。

<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

作者介紹: Github 70k Star 項(xiàng)目 JavaGuide(公眾號(hào)同名) 作者柔逼。每周都會(huì)在公眾號(hào)更新一些自己原創(chuàng)干貨蒋譬。公眾hao后臺(tái)回復(fù)“1”領(lǐng)取Java工程師必備學(xué)習(xí)資料+面試突擊pdf。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愉适,一起剝皮案震驚了整個(gè)濱河市犯助,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌维咸,老刑警劉巖剂买,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異癌蓖,居然都是意外死亡瞬哼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門租副,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坐慰,“玉大人,你說我怎么就攤上這事用僧√衷剑” “怎么了两残?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長把跨。 經(jīng)常有香客問我,道長沼死,這世上最難降的妖魔是什么着逐? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮意蛀,結(jié)果婚禮上耸别,老公的妹妹穿的比我還像新娘。我一直安慰自己县钥,他們只是感情好秀姐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著若贮,像睡著了一般省有。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谴麦,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天蠢沿,我揣著相機(jī)與錄音,去河邊找鬼匾效。 笑死舷蟀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的面哼。 我是一名探鬼主播野宜,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魔策!你這毒婦竟也來了匈子?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤代乃,失蹤者是張志新(化名)和其女友劉穎旬牲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搁吓,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡原茅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堕仔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擂橘。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖摩骨,靈堂內(nèi)的尸體忽然破棺而出通贞,到底是詐尸還是另有隱情朗若,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布昌罩,位于F島的核電站哭懈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茎用。R本人自食惡果不足惜遣总,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轨功。 院中可真熱鬧旭斥,春花似錦、人聲如沸古涧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羡滑。三九已至菇爪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啄栓,已是汗流浹背娄帖。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昙楚,地道東北人近速。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像堪旧,于是被迫代替她去往敵國和親削葱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355