1.前言

俗话说:“工欲善其事,必先利其器”。
为了助力大家的学习和进阶,本小节介绍几个对 Java 学习非常有帮助的 IDEA 插件,代码反编译和反汇编工具,以及非常不错的网站等。

2. IDEA 插件

首先不必多说,IDEA 是目前 Java工程师最主流的开发工具, IDEA 的强大之处不仅在于自身,还在于提供了丰富的插件(这点和谷歌浏览器非常类似)。
本部分介绍几款强大实用的 IDEA 插件,助力大家开发。
以下插件大都可以通过 IDEA 自带的插件管理中心安装,如果搜不到可以去 IDEA 插件官网下载本地导入。
18 工欲善其事必先利其器 - 图7
具体安装界面不同版本 IDEA略有差异,请自行研究。
如果连插件安装都不愿意学、学不会的话,很难成为一名合格的 Java 开发工程师。

2.1 Alibaba Java Coding Guidelines

首先要推荐的是和《手册》配套的阿里巴巴 Java代码规范插件
安装该插件后,代码超过 80 行、手动创建线程池等,这些和《手册》中的规约不符时,IDEA中会给出警告提示。
建议大家一定一定一定要安装该插件,它会帮助你检查出很多隐患,督促你写更规范的代码。

2.2 jclasslib bytecode viewer

下面要隆重介绍的是一款可视化的字节码查看插件:jclasslib
大家可以直接在 IDEA 插件管理中安装(安装步骤略)。
使用方法:

  1. 在 IDEA 打开想研究的类;
  2. 编译该类或者直接编译整个项目( 如果想研究的类在 jar 包中,此步可略过);
  3. 打开“view” 菜单,选择“Show Bytecode With jclasslib” 选项;
  4. 选择上述菜单项后 IDEA 中会弹出 jclasslib 工具窗口。

18 工欲善其事必先利其器 - 图8 那么有自带的强大的反汇编工具 javap 还有必要用这个插件吗?
这个插件的强大之处在于:

  1. 不需要敲命令,简单直接,在右侧方便和源代码进行对比学习;
  2. 字节码命令支持超链接,点击其中的虚拟机指令即可跳转到 jvms 相关章节,超级方便。

该插件对我们学习虚拟机指令有极大的帮助。

2.3 Codota

另外一个不得不说的就是专栏中提到的辅助开发神器: Codota
可以点击下图所示“Add Codota to you IDEA” 了解安装步骤。
18 工欲善其事必先利其器 - 图9
该插件的强大之处在于:

  1. 支持智能代码自动提示,该功能可以增强 IDEA 的代码提示功能;
  2. 支持 JDK 和知名第三方库的函数的使用方法搜索,可以看到其他知名开源项目对该函数的用法。

当我们第一次使用某个类,对某个函数不够熟悉时,可以通过该插件搜索相关用法,快速模仿学习。
18 工欲善其事必先利其器 - 图10
如上图所示,我们想了解

  1. Stream

类中

  1. 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 函数对属性赋值,如果属性较多很容易遗漏或者重复。
18 工欲善其事必先利其器 - 图11
可以使用这 GenerateAllSetter 提供的功能,自动调用所有 Setter 函数(可填充默认值),然后自己再跟进实际需求设置属性值。

2.6 Material Theme UI

对于很多人而言,写代码时略显枯燥的,如果能够安装自己喜欢的主题将为开发工作带来些许乐趣。
IDEA 支持各种主题插件,其中最出名的当属 Material Theme UI。
18 工欲善其事必先利其器 - 图12
安装后,可以从该插件内置的各种风格个选择自己最喜欢的一种。

2.7 Rainbow Brackets

由于很多人没有养成好的编码风格,没有随手 format 代码的习惯,甚至有些同事会写代码超过几百行,阅读起来将非常痛苦。
痛苦的原因之一就是找到上下文,由于括号太多,不确定当前代码行是否属于某个代码块,此时这个插件就会帮上大忙。
插件 github 地址:https://github.com/izhangzhihao/intellij-rainbow-brackets。
18 工欲善其事必先利其器 - 图13
大家可以观看其 github 首页的动图体会和学习其强大功能。

2.8 Maven Helper

现在 Java 项目通常会使用 maven 或者 gradle 构建,对于maven 项目来说, jar 包冲突非常常见。
那么如何更容易地查看和解决 jar 包冲突呢?
18 工欲善其事必先利其器 - 图14
大家可以安装该插件,安装后 IDEA 中打开 pom.xml 文件时,就会多出一个 “Dependency Analyzer” 选项卡。
如上图所示,该插件支持值插件冲突的 jar 包,可以选择冲突的 jar 包将其 exclude 掉。

2.9 FindBugs

程序员总是想尽可能地避免写 BUG, FindBugs 作为静态代码检查插件,可以检查你代码中的隐患,并给出原因。
18 工欲善其事必先利其器 - 图15
当然还有很多类似的静态代码检查插件,大家可以自行了解安装。

2.10 SequenceDiagram

SequenceDiagram 可以根据代码调用链路自动生成时序图,超级赞,超级推荐!
这对研究源码,梳理工作中的业务代码有极大的帮助,堪称神器。
安装完成后,在某个类的某个函数中,右键 —> Sequence Diagaram 即可调出。
如下图是 Netty 的源码,可以通过该插件绘制出当前函数的调用链路。
18 工欲善其事必先利其器 - 图16
双击顶部的类名可以跳转到对应类的源码中,双击调用的函数名可以直接调入某个函数的源码,总之非常强大。

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

18 工欲善其事必先利其器 - 图17 2.12 Java Stream Debugger

Stream 非常好用,可以灵活对数据进行操作,但是对很多刚接触的人来说,不好理解。
那么 Java Stream Debugger 这款神器的 IDEA 就可以帮到你。它可以将 Stream 的操作步骤可视化,非常有助于我们的学习。
18 工欲善其事必先利其器 - 图18

18 工欲善其事必先利其器 - 图19 2.13 其它

IDEA 的插件浩如烟海,好的IDEA 插件欢迎留言交流。
另外大家可以通过 IDEA插件官网进行搜索,有海量插件供你选择。
free MyBatis plugin 插件也很常用

3.反编译和反汇编软件

Java 学习进阶之路离不开Java 反编译和反汇编。
实际开发中需要用到反汇编的典型场景有:

  • 自己或者二方上传的包含新的接口 jar 包到maven 仓库,下载下来查看 jar 包检查新的接口是否包含在新的 jar 包中;
  • 需要临时查看某个 Jar 包的源码,不想加到本地仓库中;
  • 拿不到源码,又想了解其源码究竟是怎么写的;
  • 线上代码表现和自己的源码不一致,怀疑线上代码不对,可以反编译去核对。

对于大多数普通 Java 工程师来说,使用反编译的场景多是为了学习研究。

3.1 在线Java反编译工具

有很多在线反编译的网站,其中比较好用的主要是以下两个:
http://www.decompiler.com/
18 工欲善其事必先利其器 - 图20
使用简单,直接将 jar 包和 class文件拖到页面即可。
http://www.javadecompilers.com/
18 工欲善其事必先利其器 - 图21
功能很强大,支持多种反编译方式,但是浏览效果不如上面网站好。

3.2 离线 Java 反编译工具

3.2.1 反编译软件

很多人担心在线反编译可能会引起代码泄露等,所以倾向于使用本地的反编译工具。
这里推荐两款软件: JD-GUI 和 Luyten。
JD-GUI 是一款可以根据 Java的 class 文件反编译出其源码的工具,界面简单,功能强大。
18 工欲善其事必先利其器 - 图22 另外一个非常好用的反编译软件为 Luyten, 它是反编译工具 Procyon 的可视化显示工具。
大家可以在其 github 上下载安装:https://github.com/deathmarine/Luyten/releases。
该软件的用法和 JD-GUI 类似。
图形界面反编译虽然更直观,但是如果我们想反编译Linux服务器上的类文件可咋办呢?
我们可以通过 JadCFRProcyon、ernflower、 JD等反编译工具。
另外知名的阿里开源 Java诊断工具 arthas 也支持 jad 命令,可以将 JVM 中实际运行的 class 文件的字节码反编译成 Java 代码,便于理解业务和排查问题。
举一个真实发生过的典型的场景:
有一次代码发布上线,但是从功能表现看线上仍然是“旧代码”,但是从发布的 git 提交版本来看是最新版。
此时就可以使用 jad 反编译该类,来核查该问题。

3.2.2 反汇编

这里简单介绍 Java 反编译和反汇编的区别。
这里说的反编译是指:将 class 文件反编译成 Java 源码的过程。
这里说的反汇编是指:将class 文件反解析为更可读的虚拟机指令的过程。
反汇编最权威和强大的当属 JDK 自带的 javap 工具,具体用法直接输入帮助指令

  1. javap -help

即可查看:

  1. 用法: javap <options> <classes>
  2. 其中, 可能的选项包括:
  3. -help --help -? 输出此用法消息
  4. -version 版本信息
  5. -v -verbose 输出附加信息
  6. -l 输出行号和本地变量表
  7. -public 仅显示公共类和成员
  8. -protected 显示受保护的/公共类和成员
  9. -package 显示程序包/受保护的/公共类
  10. 和成员 (默认)
  11. -p -private 显示所有类和成员
  12. -c 对代码进行反汇编
  13. -s 输出内部类型签名
  14. -sysinfo 显示正在处理的类的
  15. 系统信息 (路径, 大小, 日期, MD5 散列)
  16. -constants 显示最终常量
  17. -classpath <path> 指定查找用户类文件的位置
  18. -cp <path> 指定查找用户类文件的位置
  19. -bootclasspath <path> 覆盖引导类文件的位置

大家一定要自己多动手实践,才能更好地掌握它。
另外一个比较好用的反汇编工具为 jclasslib
18 工欲善其事必先利其器 - 图23
在IDEA 插件中心中还可以搜到该工具的IDEA插件。
当然,还有很多其他好用的 Java 反编译和反汇编软件,希望大家平时多尝试,多练习。
希望大家能够熟练掌握其中一两种,能够快速反编译和反汇编,帮助自己学习知识和解决问题。

4.效率软件

4.1 效率

4.1.1 Alfred

Alfred 可以说是 Mac 系统的效率神器。该软件支持文件搜索、粘贴板管理、快捷短语提示、各种工作流等功能。
具体功能介绍可以看这篇文章
18 工欲善其事必先利其器 - 图24

4.1.2 Wox

有些朋友可能会说,我们系统是 windows 的肿么办?
这里推荐一个 windows 上的 alfred: Wox, 该软件支持软件、文件、浏览器书签等搜索,支持通过快捷键快速搜索网页,还支持丰富的插件,可以查询英语单词、查快递等。
18 工欲善其事必先利其器 - 图25
软件效果图(图片来自官网)

4.1.3 Snipaste

另外推荐一个非常好用的截图和贴图软件 Snipaste
该软件不仅是一款截图工具,还支持将截图贴到屏幕上,使用非常简单, F1 截图,然后 F3 贴图,截图就会桌面置顶显示。
18 工欲善其事必先利其器 - 图26
软件效果图(图片来自官网)
我们写技术文章或者开发时可能需要参考多个地方,由于开发的桌面和参考的桌面通常不在一个桌面,如果没有双屏,或者双显示屏还不过还需要切换,就非常浪费时间。此时该软件就有大用途,可以将待参考的内容分别截图、贴图,然后自己随意排列组合在当前页面中供你参考。

4.1.4 Contexts

该软件目前只支持 mac 系统,可以实现窗口的快速切换。
18 工欲善其事必先利其器 - 图27
软件效果图(图片来自官网)

4.1.5 Paste

该软件目前只支持 mac 系统。
采用 iOS 多任务卡片切换界面,可以可视化粘贴板历史,支持剪切搜索,热键快速调用,可以快速选取想要的粘贴版历史内容并粘贴到当前应用中。

18 工欲善其事必先利其器 - 图28 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 等其他请求方式,功能非常强大,大家可以根据官方文档多摸索使用。

18 工欲善其事必先利其器 - 图29 4.3.2 VisulVM

VisulVM 是 JDK 命令行工具的可视化整合工具,可以在开发和生产中使用。
18 工欲善其事必先利其器 - 图30
常规用法是先启动软件,然后选择本地的 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 翻译插件

沙拉查词

很多同学想看英文技术网站,但是英语不是特别好,可以借助该插件聚合多种翻译软件,翻译各种词汇或句子。
最大的好处是可以对比多种翻译插件的结果,得到最准确的理解。

18 工欲善其事必先利其器 - 图31 彩云翻译

彩云翻译 提供了中英文对照翻译的能力,如果看某些英文技术文章有些吃力,可以适当使用该插件实现中英文对照理解。
18 工欲善其事必先利其器 - 图32

5.很赞的网站

5.1 在线练习网站

很多人想学习某个技术,但是有自己电脑配置限制或者嫌麻烦等各种原因,可能不愿意安装某些环境。
那么有没有可以在线练习的网站呢? 答案是:有。
接下来推荐几个非常强大的在线练习和学习网站。

5.1.1 Git 在线练习

推荐一个在线学习 Git 的趣味网站: https://learngitbranching.js.org/
18 工欲善其事必先利其器 - 图33

5.1.2 kafka集群体验

有一个网站提供kafka集群的体验:https://www.cloudkarafka.com/

5.1.3 leetcode

此处,不得不提的是鼎鼎大名的 leetcode
该网站提供了在算法、数据库和Shell 脚本的练习题。

5.1.4 数据结构可视化

接下来推荐一个数据结构可视化的网站。可以选择某种数据结构,动态添加数据,观察变化过程。
18 工欲善其事必先利其器 - 图34

5.1.5 正则表达式

还有很多支持在线学习和验证正则表达式的网站,如 https://regexr.com/、 https://c.runoob.com/front-end/854、https://tool.oschina.net/regex。

5.1.6 在线练习SQL

推荐几个可在线练习 SQL 的超赞网站:SQLZOOSQLBoltSQL Fiddle
中文版:xuesql廖雪峰SQL教程

18 工欲善其事必先利其器 - 图35 5.2 实用网站

5.2.1 时间戳转换

时间戳转换工具:https://tool.chinaz.com/tools/unixtime.aspx

5.2.2 JSON相关

JSON格式化

开发中还会经常用到格式化 JSON 串的功能,bejson 提供了 JSON相关的丰富功能,JSON的格式化校验、压缩、转义、去除转义等。

JSON 和 Java实体互转

有很多强大的网站支持 JSON和Java实体互转,如 bejsonjsonschema2pojo codebeautifyFreeCodeFormatsite24*7 等。

5.2.3 超赞的英文 Java学习网站

除了咱们的慕课网外,推荐几个非常好的英文学习网站。
首推 baeldung该网站几乎所有的文章都有配套代码,。我们可以直接通过该网站的代码运行学习某些知识点,某些框架等。
其次是 javacodegeeks, 该网站会提供丰富的 Java 教程,还会提供一些英文 PDF 教程。
journaldevjamesdbloom 对技术的讲解非常透彻。

5.2.4 技术电子书百宝箱

Library Genesis 号称是帮助全人类知识传播计划,其网站 http://gen.lib.rus.ec/ 提供了很多英文图书的下载。
18 工欲善其事必先利其器 - 图36
我们 Java 开发需要用到知名英文书籍几乎都可以在上面找到电子版。
强烈建议大家购买纸质版经典的 Java 技术图书,反复学习。

5.2.5 GitHub

GitHub 也可堪称是百宝箱,大家可以通过它来搜索想学技术的源码和相关示例代码。
大家可以在 Java 的 topic栏目 了解 stars 最多的,最近更新的,最佳的 Java项目等。

6.总结

本文重点介绍了 Java 学习和工作中常用的软件、插件、网站等。熟练地使用这些工具,将有助于提高我的开发效率和编程体验。
肯定还有很多好用的插件和软件,由于篇幅有限就不在这里一一介绍,欢迎大家留言分享。
希望通过本小节的介绍能够助力大家的学习和进阶。
如果你觉得本专栏对你有帮助,欢迎推荐给更多朋友,一起交流学习。
17 如何解决条件语句的多层嵌套问题?
18 一些异常处理建议

精选留言 3
欢迎在这里发表留言,作者筛选后可公开显示

补充一个超赞学习途径,微信公众号文章搜索: https://weixin.sogou.com/ 大家可以搜索技术文章