欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IDEA神器一鍵查看Java字節(jié)碼及其他類信息插件

 更新時(shí)間:2022年01月22日 15:22:33   作者:Guide哥  
這篇文章主要為大家介紹了一款I(lǐng)DEA神器,可以一鍵查看Java字節(jié)碼及其他類信息,有需要的朋友可以借鑒參考下,希望能夠有所幫助

在這里插入圖片描述

開始推薦 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é)碼的文件),它不面向任何特定的處理器,只面向虛擬機(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 字節(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)被編譯過。

在這里插入圖片描述

稍等幾秒鐘之后,你就可以直觀到看到對(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 的插件市場(chǎng)即可找到這個(gè)插件。我這里已經(jīng)安裝好了。

在這里插入圖片描述

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

在這里插入圖片描述

后記

工作需要,調(diào)研了桌面端開發(fā)常用的一些技術(shù)棧,分享出來,供需要的小伙伴參考。

在這里插入圖片描述

以上就是IDEA神器一鍵查看Java字節(jié)碼及其他類信息的詳細(xì)內(nèi)容,更多關(guān)于IDEA查看Java字節(jié)碼及其他類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 插入排序之希爾排序的實(shí)例

    Java 插入排序之希爾排序的實(shí)例

    這篇文章主要介紹了Java 插入排序之希爾排序的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 一文搞懂Java設(shè)計(jì)模式之責(zé)任鏈模式

    一文搞懂Java設(shè)計(jì)模式之責(zé)任鏈模式

    這篇文章主要給大家介紹了關(guān)于Java設(shè)計(jì)模式之責(zé)任鏈模式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Jackson自定義序列化與反序列化注解詳解

    Jackson自定義序列化與反序列化注解詳解

    這篇文章主要介紹了Jackson自定義序列化與反序列化注解詳解,某些場(chǎng)景下,我們使用Jackson對(duì)數(shù)據(jù)進(jìn)行序列化或反序列化的時(shí)候,需要對(duì)某些數(shù)據(jù)進(jìn)行特殊處理,需要的朋友可以參考下
    2023-11-11
  • java 獲取HttpRequest Header的幾種方法(必看篇)

    java 獲取HttpRequest Header的幾種方法(必看篇)

    下面小編就為大家?guī)硪黄猨ava 獲取HttpRequest Header的幾種方法(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • 解決方法A調(diào)用方法B的事務(wù)控制問題

    解決方法A調(diào)用方法B的事務(wù)控制問題

    這篇文章主要介紹了解決方法A調(diào)用方法B的事務(wù)控制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“)

    Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“)

    這篇文章主要介紹了Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • springboot?注解方式批量插入數(shù)據(jù)的實(shí)現(xiàn)

    springboot?注解方式批量插入數(shù)據(jù)的實(shí)現(xiàn)

    一次請(qǐng)求需要往數(shù)據(jù)庫插入多條數(shù)據(jù)時(shí),可以節(jié)省大量時(shí)間,本文主要介紹了springboot?注解方式批量插入數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • spring整合redis緩存并以注解(@Cacheable、@CachePut、@CacheEvict)形式使用

    spring整合redis緩存并以注解(@Cacheable、@CachePut、@CacheEvict)形式使用

    本篇文章主要介紹了spring整合redis緩存并以注解(@Cacheable、@CachePut、@CacheEvict)形式使用,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04
  • 詳解關(guān)于mybatis-plus中Service和Mapper的分析

    詳解關(guān)于mybatis-plus中Service和Mapper的分析

    這篇文章主要介紹了詳解關(guān)于mybatis-plus中Service和Mapper的分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java中Collections.sort排序函數(shù)用法詳解

    java中Collections.sort排序函數(shù)用法詳解

    本篇文章主要介紹了java中Collections.sort排序函數(shù)用法詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-12-12

最新評(píng)論