1. 前言
俗話說:“工欲善其事,必先利其器”。
為了助力大家的學習和進階,本小節介紹幾個對 Java 學習非常有幫助的 IDEA 插件,代碼反編譯和反匯編工具,以及非常不錯的網站等。
2. IDEA 插件
首先不必多說,IDEA 是目前 Java 工程師最主流的開發工具, IDEA 的強大之處不僅在于自身,還在于提供了豐富的插件(這點和谷歌瀏覽器非常類似)。
本部分介紹幾款強大實用的 IDEA 插件,助力大家開發。
以下插件大都可以通過 IDEA 自帶的插件管理中心安裝,如果搜不到可以去 IDEA 插件官網下載本地導入。
具體安裝界面不同版本 IDEA 略有差異,請自行研究。
如果連插件安裝都不愿意學、學不會的話,很難成為一名合格的 Java 開發工程師。
2.1 Alibaba Java Coding Guidelines
首先要推薦的是和《手冊》配套的阿里巴巴 Java 代碼規范插件。
安裝該插件后,代碼超過 80 行、手動創建線程池等,這些和《手冊》中的規約不符時,IDEA 中會給出警告提示。
建議大家一定一定一定要安裝該插件,它會幫助你檢查出很多隱患,督促你寫更規范的代碼。
2.2 jclasslib bytecode viewer
下面要隆重介紹的是一款可視化的字節碼查看插件:jclasslib 。
大家可以直接在 IDEA 插件管理中安裝(安裝步驟略)。
使用方法:
- 在 IDEA 打開想研究的類;
- 編譯該類或者直接編譯整個項目( 如果想研究的類在 jar 包中,此步可略過);
- 打開 “view” 菜單,選擇 “Show Bytecode With jclasslib” 選項;
- 選擇上述菜單項后 IDEA 中會彈出 jclasslib 工具窗口。
那么有自帶的強大的反匯編工具 javap 還有必要用這個插件嗎?
這個插件的強大之處在于:
- 不需要敲命令,簡單直接,在右側方便和源代碼進行對比學習;
- 字節碼命令支持超鏈接,點擊其中的虛擬機指令即可跳轉到 jvms 相關章節,超級方便。
該插件對我們學習虛擬機指令有極大的幫助。
2.3 Codota
另外一個不得不說的就是專欄中提到的輔助開發神器: Codota。
可以點擊下圖所示 “Add Codota to you IDEA” 了解安裝步驟。
該插件的強大之處在于:
- 支持智能代碼自動提示,該功能可以增強 IDEA 的代碼提示功能;
- 支持 JDK 和知名第三方庫的函數的使用方法搜索,可以看到其他知名開源項目對該函數的用法。
當我們第一次使用某個類,對某個函數不夠熟悉時,可以通過該插件搜索相關用法,快速模仿學習。
如上圖所示,我們想了解 Stream
類中 flatMap
函數的用法,可以使用該插件查看知名開源項目的用法。
插件窗口頂部還給出了該類最常用的函數,可以點擊查看相關用法案例,每個案例右側的 "view source" 可以跳轉到該片段對應的開源項目的源碼中。
2.4 Auto filling Java call arguments
開發中,我們通常會調用其它已經編寫好的函數,調用后需要填充參數,但是絕大多數情況下,傳入的變量名稱和該函數的參數名一致,當參數較多時,手動單個填充參數非常浪費時間。
該插件就可以幫你解決這個問題。
安裝完該插件以后,調用一個函數,使用 Alt+Enter 組合鍵,調出 “Auto fill call parameters” 自動使用該函數定義的參數名填充。
2.5 GenerateO2O、GenerateAllSetter
我們定義好從 A 類轉換到 B 類的函數轉換函數后,使用這兩個插件可以自動調用 Getter 和 Setter 函數實行自動轉換。
實際開發中還有一個非常常見的場景: 我們創建一個對象后,想依次調用 Setter 函數對屬性賦值,如果屬性較多很容易遺漏或者重復。
可以使用這 GenerateAllSetter 提供的功能,自動調用所有 Setter 函數(可填充默認值),然后自己再跟進實際需求設置屬性值。
2.6 Material Theme UI
對于很多人而言,寫代碼時略顯枯燥的,如果能夠安裝自己喜歡的主題將為開發工作帶來些許樂趣。
IDEA 支持各種主題插件,其中最出名的當屬 Material Theme UI。
安裝后,可以從該插件內置的各種風格個選擇自己最喜歡的一種。
2.7 Rainbow Brackets
由于很多人沒有養成好的編碼風格,沒有隨手 format 代碼的習慣,甚至有些同事會寫代碼超過幾百行,閱讀起來將非常痛苦。
痛苦的原因之一就是找到上下文,由于括號太多,不確定當前代碼行是否屬于某個代碼塊,此時這個插件就會幫上大忙。
大家可以觀看其 github 首頁的動圖體會和學習其強大功能。
2.8 Maven Helper
現在 Java 項目通常會使用 maven 或者 gradle 構建,對于 maven 項目來說, jar 包沖突非常常見。
那么如何更容易地查看和解決 jar 包沖突呢?
大家可以安裝該插件,安裝后 IDEA 中打開 pom.xml 文件時,就會多出一個 “Dependency Analyzer” 選項卡。
如上圖所示,該插件支持值插件沖突的 jar 包,可以選擇沖突的 jar 包將其 exclude 掉。
2.9 FindBugs
程序員總是想盡可能地避免寫 BUG, FindBugs 作為靜態代碼檢查插件,可以檢查你代碼中的隱患,并給出原因。
當然還有很多類似的靜態代碼檢查插件,大家可以自行了解安裝。
2.10 SequenceDiagram
SequenceDiagram 可以根據代碼調用鏈路自動生成時序圖,超級贊,超級推薦!
這對研究源碼,梳理工作中的業務代碼有極大的幫助,堪稱神器。
安裝完成后,在某個類的某個函數中,右鍵 --> Sequence Diagaram 即可調出。
如下圖是 Netty 的源碼,可以通過該插件繪制出當前函數的調用鏈路。
雙擊頂部的類名可以跳轉到對應類的源碼中,雙擊調用的函數名可以直接調入某個函數的源碼,總之非常強大。
2.11 Stack trace to UML
Stack trace to UML 支持根據 JVM 異常堆棧畫 UML 時序圖和通信圖。
打開方式 Analyze > Open Stack trace to UML plugin + Generate UML diagrams from stacktrace from debug
2.12 Java Stream Debugger
Stream 非常好用,可以靈活對數據進行操作,但是對很多剛接觸的人來說,不好理解。
那么 Java Stream Debugger 這款神器的 IDEA 就可以幫到你。它可以將 Stream 的操作步驟可視化,非常有助于我們的學習。
2.13 其它
IDEA 的插件浩如煙海,好的 IDEA 插件歡迎留言交流。
另外大家可以通過 IDEA 插件官網進行搜索,有海量插件供你選擇。
3. 反編譯和反匯編軟件
Java 學習進階之路離不開 Java 反編譯和反匯編。
實際開發中需要用到反匯編的典型場景有:
- 自己或者二方上傳的包含新的接口 jar 包到 maven 倉庫,下載下來查看 jar 包檢查新的接口是否包含在新的 jar 包中;
- 需要臨時查看某個 Jar 包的源碼,不想加到本地倉庫中;
- 拿不到源碼,又想了解其源碼究竟是怎么寫的;
- 線上代碼表現和自己的源碼不一致,懷疑線上代碼不對,可以反編譯去核對。
對于大多數普通 Java 工程師來說,使用反編譯的場景多是為了學習研究。
3.1 在線 Java 反編譯工具
有很多在線反編譯的網站,其中比較好用的主要是以下兩個:
使用簡單,直接將 jar 包和 class 文件拖到頁面即可。
功能很強大,支持多種反編譯方式,但是瀏覽效果不如上面網站好。
3.2 離線 Java 反編譯工具
3.2.1 反編譯軟件
很多人擔心在線反編譯可能會引起代碼泄露等,所以傾向于使用本地的反編譯工具。
這里推薦兩款軟件: JD-GUI 和 Luyten。
JD-GUI 是一款可以根據 Java 的 class 文件反編譯出其源碼的工具,界面簡單,功能強大。
另外一個非常好用的反編譯軟件為 Luyten, 它是反編譯工具 Procyon 的可視化顯示工具。
大家可以在其 github 上下載安裝:https://github.com/deathmarine/Luyten/releases。
該軟件的用法和 JD-GUI 類似。
圖形界面反編譯雖然更直觀,但是如果我們想反編譯 Linux 服務器上的類文件可咋辦呢?
另外知名的阿里開源 Java 診斷工具 arthas 也支持 jad 命令,可以將 JVM 中實際運行的 class 文件的字節碼反編譯成 Java 代碼,便于理解業務和排查問題。
舉一個真實發生過的典型的場景:
有一次代碼發布上線,但是從功能表現看線上仍然是 “舊代碼”,但是從發布的 git 提交版本來看是最新版。
此時就可以使用 jad 反編譯該類,來核查該問題。
3.2.2 反匯編
這里簡單介紹 Java 反編譯和反匯編的區別。
這里說的反編譯是指:將 class 文件反編譯成 Java 源碼的過程。
這里說的反匯編是指:將 class 文件反解析為更可讀的虛擬機指令的過程。
反匯編最權威和強大的當屬 JDK 自帶的 javap 工具,具體用法直接輸入幫助指令 javap -help
即可查看:
用法: javap <options> <classes>
其中, 可能的選項包括:
-help --help -? 輸出此用法消息
-version 版本信息
-v -verbose 輸出附加信息
-l 輸出行號和本地變量表
-public 僅顯示公共類和成員
-protected 顯示受保護的/公共類和成員
-package 顯示程序包/受保護的/公共類
和成員 (默認)
-p -private 顯示所有類和成員
-c 對代碼進行反匯編
-s 輸出內部類型簽名
-sysinfo 顯示正在處理的類的
系統信息 (路徑, 大小, 日期, MD5 散列)
-constants 顯示最終常量
-classpath <path> 指定查找用戶類文件的位置
-cp <path> 指定查找用戶類文件的位置
-bootclasspath <path> 覆蓋引導類文件的位置
大家一定要自己多動手實踐,才能更好地掌握它。
另外一個比較好用的反匯編工具為 jclasslib。
在 IDEA 插件中心中還可以搜到該工具的 IDEA 插件。
當然,還有很多其他好用的 Java 反編譯和反匯編軟件,希望大家平時多嘗試,多練習。
希望大家能夠熟練掌握其中一兩種,能夠快速反編譯和反匯編,幫助自己學習知識和解決問題。
4. 效率軟件
4.1 效率
4.1.1 Alfred
Alfred 可以說是 Mac 系統的效率神器。該軟件支持文件搜索、粘貼板管理、快捷短語提示、各種工作流等功能。
具體功能介紹可以看這篇文章。
4.1.2 Wox
有些朋友可能會說,我們系統是 windows 的腫么辦?
這里推薦一個 windows 上的 alfred: Wox, 該軟件支持軟件、文件、瀏覽器書簽等搜索,支持通過快捷鍵快速搜索網頁,還支持豐富的插件,可以查詢英語單詞、查快遞等。
軟件效果圖(圖片來自官網)
4.1.3 Snipaste
另外推薦一個非常好用的截圖和貼圖軟件 Snipaste。
該軟件不僅是一款截圖工具,還支持將截圖貼到屏幕上,使用非常簡單, F1 截圖,然后 F3 貼圖,截圖就會桌面置頂顯示。
軟件效果圖(圖片來自官網)
我們寫技術文章或者開發時可能需要參考多個地方,由于開發的桌面和參考的桌面通常不在一個桌面,如果沒有雙屏,或者雙顯示屏還不過還需要切換,就非常浪費時間。此時該軟件就有大用途,可以將待參考的內容分別截圖、貼圖,然后自己隨意排列組合在當前頁面中供你參考。
4.1.4 Contexts
該軟件目前只支持 mac 系統,可以實現窗口的快速切換。
軟件效果圖(圖片來自官網)
4.1.5 Paste
該軟件目前只支持 mac 系統。
采用 iOS 多任務卡片切換界面,可以可視化粘貼板歷史,支持剪切搜索,熱鍵快速調用,可以快速選取想要的粘貼版歷史內容并粘貼到當前應用中。
4.2 畫圖神器
作為一個合格的程序員,怎能沒幾個趁手的畫圖工具呢?
每個人的喜好各有不同,下面推薦幾個本人和身邊人開發中常用的畫圖工具。
4.2.1 UML 畫圖工具
visual-paradigm
推薦 visual-paradigm 的理由是該畫圖工具不僅支持軟件本地畫圖,還支持在線畫圖,支持最新的語法,并且有豐富的參考示例。
PlantUML
強烈推薦大家畫 UML 圖時使用 PlantUML,理由是其他大多數作圖軟件都采用拖拽式,對于有些強迫癥的人會浪費很多時間進行對齊等操作。
該軟件還提供了 IDEA 插件,在 IDEA 中創建 plantUML 的圖形支持實時預覽。
通過 PlantUML 官網給出的示例,大家可以快速上手。
其它 UML 畫圖工具
可以使用 processon 來作圖,優勢是在線存儲。windows 系統用戶可以使用 visio,功能強大,畫的圖也很美觀。
4.2.2 思維導圖
很多人會有些奇怪,為啥推薦思維導圖呢?
其實對于 Java 工程師來說,思維導圖是梳理知識,梳理需求的重要工具。
然而畫思維導圖并不是照著目錄列一遍,而是帶上自己的思考,具體再畫圖篇會講到。
思維導圖軟件推薦使用: xmind、mindjet、ithoughts 等。
4.3 輔助開發
4.3.1 PostMan
PostMan 可以模擬前端請求,可以將請求進行分類、保存,支持變量,支持將請求導出為 curl 等其他請求方式,功能非常強大,大家可以根據官方文檔多摸索使用。
4.3.2 VisulVM
VisulVM 是 JDK 命令行工具的可視化整合工具,可以在開發和生產中使用。
常規用法是先啟動軟件,然后選擇本地的 Java 進程,或者添加遠程機器的 Ip 和端口號監控遠程 Java 進程狀況。
IDEA 中還有 VisualVM 的插件,可以在本地應用啟動時,自動啟動 VisualVM。
4.3.3 前端插件助手
推薦一個方便大家開發的插件:前端插件助手。
該插件支持字符串的編解碼、JSON 串的格式化、代碼美化、二維碼生成器、頁面滾動截屏、圖片轉 Base64 、簡易 Postman、Ajax 調試等功能。
雖然名叫 “前端插件助手”,其實該插件對我們后端開發幫助也極大。
4.3.4 Print Friendly & PDF
我們平時看很多博客等,想保存為 PDF,如果直接使用瀏覽器打印就會發現有很多廣告等信息。
可以使用該插件,生成只包含頁面主要內容的 PDF。
大家可以通過該軟件的官網 進一步了解該插件。
4.3.5 ModHeader
該插件可以修改請求和響應頭,在某種調試場合非常有用。
4.3.6 Ajax Interceptor
該插件非常強大,可以修改頁面 Ajax 請求的返回結果。
2.3.7 翻譯插件
沙拉查詞
很多同學想看英文技術網站,但是英語不是特別好,可以借助該插件聚合多種翻譯軟件,翻譯各種詞匯或句子。
最大的好處是可以對比多種翻譯插件的結果,得到最準確的理解。
彩云翻譯
彩云翻譯 提供了中英文對照翻譯的能力,如果看某些英文技術文章有些吃力,可以適當使用該插件實現中英文對照理解。
5. 很贊的網站
5.1 在線練習網站
很多人想學習某個技術,但是有自己電腦配置限制或者嫌麻煩等各種原因,可能不愿意安裝某些環境。
那么有沒有可以在線練習的網站呢? 答案是:有。
接下來推薦幾個非常強大的在線練習和學習網站。
5.1.1 Git 在線練習
推薦一個在線學習 Git 的趣味網站: https://learngitbranching.js.org/?locale=zh_CN
5.1.2 kafka 集群體驗
有一個網站提供 kafka 集群的體驗:https://www.cloudkarafka.com/
5.1.3 leetcode
此處,不得不提的是鼎鼎大名的 leetcode。
該網站提供了在算法、數據庫和 Shell 腳本的練習題。
5.1.4 數據結構可視化
接下來推薦一個數據結構可視化的網站??梢赃x擇某種數據結構,動態添加數據,觀察變化過程。
5.1.5 正則表達式
還有很多支持在線學習和驗證正則表達式的網站,如 https://regexr.com/ 、 https://c.runoob.com/front-end/854 、https://tool.oschina.net/regex 。
5.1.6 在線練習 SQL
推薦幾個可在線練習 SQL 的超贊網站:SQLZOO、SQLBolt、SQL Fiddle。
中文版:xuesql、廖雪峰 SQL 教程
5.2 實用網站
5.2.1 時間戳轉換
5.2.2 JSON 相關
JSON 格式化
開發中還會經常用到格式化 JSON 串的功能,bejson 提供了 JSON 相關的豐富功能,JSON 的格式化校驗、壓縮、轉義、去除轉義等。
JSON 和 Java 實體互轉
有很多強大的網站支持 JSON 和 Java 實體互轉,如 bejson、jsonschema2pojo 、codebeautify、FreeCodeFormat、site24*7 等。
5.2.3 超贊的英文 Java 學習網站
除了咱們的慕課網外,推薦幾個非常好的英文學習網站。
其次是 javacodegeeks, 該網站會提供豐富的 Java 教程,還會提供一些英文 PDF 教程。
journaldev 和 jamesdbloom 對技術的講解非常透徹。
5.2.4 技術電子書百寶箱
Library Genesis 號稱是幫助全人類知識傳播計劃,其網站 http://gen.lib.rus.ec/ 提供了很多英文圖書的下載。
我們 Java 開發需要用到知名英文書籍幾乎都可以在上面找到電子版。
強烈建議大家購買紙質版經典的 Java 技術圖書,反復學習。
5.2.5 GitHub
GitHub 也可堪稱是百寶箱,大家可以通過它來搜索想學技術的源碼和相關示例代碼。
大家可以在 Java 的 topic 欄目 了解 stars 最多的,最近更新的,最佳的 Java 項目等。
6. 總結
本文重點介紹了 Java 學習和工作中常用的軟件、插件、網站等。熟練地使用這些工具,將有助于提高我的開發效率和編程體驗。
肯定還有很多好用的插件和軟件,由于篇幅有限就不在這里一一介紹,歡迎大家留言分享。
希望通過本小節的介紹能夠助力大家的學習和進階。
如果你覺得本專欄對你有幫助,歡迎推薦給更多朋友,一起交流學習。