1.前言

<br/>
俗话说:“工欲善其事,必先利其器”。

为了助力大家的学习和进阶,本小节介绍几个对 Java 学习非常有帮助的 IDEA 插件,代码反编译和反汇编工具,以及非常不错的网站等。

<br/><br/><br/>

2. IDEA 插件

首先不必多说,IDEA 是目前 Java工程师最主流的开发工具, IDEA 的强大之处不仅在于自身,还在于提供了丰富的插件(这点和谷歌浏览器非常类似)。

本部分介绍几款强大实用的 IDEA 插件,助力大家开发。

以下插件大都可以通过 IDEA 自带的插件管理中心安装,如果搜不到可以去 IDEA 插件官网下载本地导入。
<br/>

2.1 Alibaba Java Coding Guidelines

首先要推荐的是阿里巴巴 Java代码规范插件。

安装该插件后,代码超过 80 行、手动创建线程池等,这些和《手册》中的规约不符时,IDEA中会给出警告提示。

建议大家一定一定一定要安装该插件,它会帮助你检查出很多隐患,督促你写更规范的代码。

<br/><br/>

2.2 jclasslib bytecode viewer

<br/>
下面要隆重介绍的是一款可视化的字节码查看插件:jclasslib 。

大家可以直接在 IDEA 插件管理中安装(安装步骤略)。

使用方法:

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

<br/>

file

<br/><br/>

那么有自带的强大的反汇编工具 javap 还有必要用这个插件吗?

这个插件的强大之处在于:

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

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

<br/><br/>

2.3 Codota

<br/>
另外一个不得不说的就是专栏中提到的辅助开发神器: Codota。
<br/><br/>

file

<br/>
该插件的强大之处在于:

  • 支持智能代码自动提示,该功能可以增强 IDEA 的代码提示功能;
  • 支持 JDK 和知名第三方库的函数的使用方法搜索,可以看到其他知名开源项目对该函数的用法。
  • 当我们第一次使用某个类,对某个函数不够熟悉时,可以通过该插件搜索相关用法,快速模仿学习。

file

如上图所示,我们想了解 Stream 类中 flatMap 函数的用法,可以使用该插件查看知名开源项目的用法。

插件窗口顶部还给出了该类最常用的函数,可以点击查看相关用法案例,每个案例右侧的 "view source"可以跳转到该片段对应的开源项目的源码中。

<br/><br/>

2.4 Auto filling Java call arguments

<br/>
开发中,我们通常会调用其它已经编写好的函数,调用后需要填充参数,但是绝大多数情况下,传入的变量名称和该函数的参数名一致,当参数较多时,手动单个填充参数非常浪费时间。

该插件就可以帮你解决这个问题。

安装完该插件以后,调用一个函数,使用 Alt+Enter 组合键,调出 “Auto fill call parameters” 自动使用该函数定义的参数名填充。

<br/><br/>

2.5 GenerateO2O、GenerateAllSetter

<br/>

我们定义好从 A 类转换到 B 类的函数转换函数后,使用这两个插件可以自动调用 Getter 和 Setter 函数实行自动转换。

实际开发中还有一个非常常见的场景: 我们创建一个对象后,想依次调用 Setter 函数对属性赋值,如果属性较多很容易遗漏或者重复。
图片描述

可以使用这 GenerateAllSetter 提供的功能,自动调用所有 Setter 函数(可填充默认值),然后自己再跟进实际需求设置属性值。

<br/><br/>

2.6 Material Theme UI

<br/>

对于很多人而言,写代码时略显枯燥的,如果能够安装自己喜欢的主题将为开发工作带来些许乐趣。

IDEA 支持各种主题插件,其中最出名的当属 Material Theme UI。

安装后,可以从该插件内置的各种风格个选择自己最喜欢的一种。

<br/><br/>

2.7 Rainbow Brackets

<br/>

由于很多人没有养成好的编码风格,没有随手 format 代码的习惯,甚至有些同事会写代码超过几百行,阅读起来将非常痛苦。

痛苦的原因之一就是找到上下文,由于括号太多,不确定当前代码行是否属于某个代码块,此时这个插件就会帮上大忙。

插件 github 地址:https://github.com/izhangzhih...

file

大家可以观看其 github 首页的动图体会和学习其强大功能。

<br/><br/>

2.8 Maven Helper

<br/>

现在 Java 项目通常会使用 maven 或者 gradle 构建,对于maven 项目来说, jar 包冲突非常常见。

那么如何更容易地查看和解决 jar 包冲突呢?

file

大家可以安装该插件,安装后 IDEA 中打开 pom.xml 文件时,就会多出一个 “Dependency Analyzer” 选项卡。

如上图所示,该插件支持值插件冲突的 jar 包,可以选择冲突的 jar 包将其 exclude 掉。

<br/><br/>

2.9 FindBugs

<br/>

程序员总是想尽可能地避免写 BUG, FindBugs 作为静态代码检查插件,可以检查你代码中的隐患,并给出原因。

file

当然还有很多类似的静态代码检查插件,大家可以自行了解安装。

<br/>

2.10 SequenceDiagram

<br/>

SequenceDiagram 可以根据代码调用链路自动生成时序图,超级赞,超级推荐!

这对研究源码,梳理工作中的业务代码有极大的帮助,堪称神器。

安装完成后,在某个类的某个函数中,右键 --> Sequence Diagaram 即可调出。

如下图是 Netty 的源码,可以通过该插件绘制出当前函数的调用链路。

file

双击顶部的类名可以跳转到对应类的源码中,双击调用的函数名可以直接调入某个函数的源码,总之非常强大。

<br/><br/>

2.11 Stack trace to UML

<br/>

Stack trace to UML 支持根据 JVM 异常堆栈画 UML时序图和通信图。

打开方式 Analyze > Open Stack trace to UML plugin + Generate UML diagrams from stacktrace from debug

file

<br/><br/>

2.12 Java Stream Debugger

<br/>
Stream 非常好用,可以灵活对数据进行操作,但是对很多刚接触的人来说,不好理解。

那么 Java Stream Debugger 这款神器的 IDEA 就可以帮到你。它可以将 Stream 的操作步骤可视化,非常有助于我们的学习。

file

file

<br/><br/>

<br/>

3.反编译和反汇编软件

<br/>

Java 学习进阶之路离不开Java 反编译和反汇编。

实际开发中需要用到反汇编的典型场景有:

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

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

<br/><br/>

3.1 在线Java反编译工具

<br/>
有很多在线反编译的网站,其中比较好用的主要是以下两个:

http://www.decompiler.com/

file

使用简单,直接将 jar 包和 class文件拖到页面即可。

http://www.javadecompilers.com/

file

功能很强大,支持多种反编译方式,但是浏览效果不如上面网站好。

<br/><br/>

3.2 离线 Java 反编译工具

<br/>

3.2.1 反编译软件

<br/>
很多人担心在线反编译可能会引起代码泄露等,所以倾向于使用本地的反编译工具。

这里推荐两款软件: JD-GUI 和 Luyten。

JD-GUI 是一款可以根据 Java的 class 文件反编译出其源码的工具,界面简单,功能强大。

file

另外一个非常好用的反编译软件为 Luyten, 它是反编译工具 Procyon 的可视化显示工具。

大家可以在其 github 上下载安装:https://github.com/deathmarin...

该软件的用法和 JD-GUI 类似。

图形界面反编译虽然更直观,但是如果我们想反编译Linux服务器上的类文件可咋办呢?

我们可以通过 Jad 、CFR、Procyon、ernflower、 JD等反编译工具。

另外知名的阿里开源 Java诊断工具 arthas 也支持 jad 命令,可以将 JVM 中实际运行的 class 文件的字节码反编译成 Java 代码,便于理解业务和排查问题。

举一个真实发生过的典型的场景:

有一次代码发布上线,但是从功能表现看线上仍然是“旧代码”,但是从发布的 git 提交版本来看是最新版。

此时就可以使用 jad 反编译该类,来核查该问题。

<br/><br/>

3.2.2 反汇编

<br/>
这里简单介绍 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。

file

在IDEA 插件中心中还可以搜到该工具的IDEA插件。

当然,还有很多其他好用的 Java 反编译和反汇编软件,希望大家平时多尝试,多练习。

希望大家能够熟练掌握其中一两种,能够快速反编译和反汇编,帮助自己学习知识和解决问题。

<br/><br/><br/>

4.效率软件

<br/>

4.1 效率

<br/>

4.1.1 Alfred

<br/>
Alfred 可以说是 Mac 系统的效率神器。该软件支持文件搜索、粘贴板管理、快捷短语提示、各种工作流等功能。

<br/><br/>

4.1.2 Wox

<br/>
有些朋友可能会说,我们系统是 windows 的肿么办?

这里推荐一个 windows 上的 alfred: Wox, 该软件支持软件、文件、浏览器书签等搜索,支持通过快捷键快速搜索网页,还支持丰富的插件,可以查询英语单词、查快递等。

<br/><br/>

4.1.3 Snipaste

<br/>
另外推荐一个非常好用的截图和贴图软件 Snipaste。

该软件不仅是一款截图工具,还支持将截图贴到屏幕上,使用非常简单, F1 截图,然后 F3 贴图,截图就会桌面置顶显示。

file

我们写技术文章或者开发时可能需要参考多个地方,由于开发的桌面和参考的桌面通常不在一个桌面,如果没有双屏,或者双显示屏还不过还需要切换,就非常浪费时间。此时该软件就有大用途,可以将待参考的内容分别截图、贴图,然后自己随意排列组合在当前页面中供你参考。

<br/><br/>

4.1.4 Contexts

<br/>
该软件目前只支持 mac 系统,可以实现窗口的快速切换。
图片描述

软件效果图(图片来自官网)
<br/>

4.1.5 Paste

<br/>
该软件目前只支持 mac 系统。

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

图片描述

<br/><br/><br/>

4.2 画图神器

<br/>
作为一个合格的程序员,怎能没几个趁手的画图工具呢?

每个人的喜好各有不同,下面推荐几个本人和身边人开发中常用的画图工具。

<br/>

4.2.1 UML 画图工具

<br/>
visual-paradigm
推荐 visual-paradigm的理由是该画图工具不仅支持软件本地画图,还支持在线画图,支持最新的语法,并且有丰富的参考示例。

PlantUML
强烈推荐大家画UML 图时使用PlantUML,理由是其他大多数作图软件都采用拖拽式,对于有些强迫症的人会浪费很多时间进行对齐等操作。

该软件还提供了 IDEA 插件,在IDEA中创建 plantUML 的图形支持实时预览。

通过 PlantUML 官网给出的示例,大家可以快速上手。

其它UML画图工具
可以使用 processon 来作图,优势是在线存储。windows 系统用户可以使用 visio,功能强大,画的图也很美观。
<br/><br/>

4.2.2 思维导图

<br/>
很多人会有些奇怪,为啥推荐思维导图呢?

其实对于Java工程师来说,思维导图是梳理知识,梳理需求的重要工具。

然而画思维导图并不是照着目录列一遍,而是带上自己的思考,具体再画图篇会讲到。

思维导图软件推荐使用: xmind、mindjet、ithoughts 等。

<br/><br/>

4.3 辅助开发

<br/>

4.3.1 PostMan

<br/>
PostMan 可以模拟前端请求,可以将请求进行分类、保存,支持变量,支持将请求导出为 curl 等其他请求方式,功能非常强大,大家可以根据官方文档多摸索使用。

图片描述

<br/>

4.3.2 VisulVM

<br/>
VisulVM 是 JDK 命令行工具的可视化整合工具,可以在开发和生产中使用。

file

常规用法是先启动软件,然后选择本地的 Java 进程,或者添加远程机器的 Ip 和端口号监控远程 Java 进程状况。

IDEA 中还有 VisualVM 的插件,可以在本地应用启动时,自动启动 VisualVM。

<br/><br/>

4.3.3 前端插件助手

<br/>
推荐一个方便大家开发的插件:前端插件助手。

该插件支持字符串的编解码、JSON串的格式化、代码美化、二维码生成器、页面滚动截屏、图片转Base64 、简易 Postman、Ajax 调试等功能。

虽然名叫“前端插件助手”,其实该插件对我们后端开发帮助也极大。

<br/>
<br/>

4.3.4 Print Friendly & PDF

<br/>
我们平时看很多博客等,想保存为PDF,如果直接使用浏览器打印就会发现有很多广告等信息。

可以使用该插件,生成只包含页面主要内容的 PDF。

大家可以通过该软件的官网 进一步了解该插件。

4.3.5 ModHeader

该插件可以修改请求和响应头,在某种调试场合非常有用。

4.3.6 Ajax Interceptor

该插件非常强大,可以修改页面 Ajax 请求的返回结果。

2.3.7 翻译插件

沙拉查词
很多同学想看英文技术网站,但是英语不是特别好,可以借助该插件聚合多种翻译软件,翻译各种词汇或句子。

最大的好处是可以对比多种翻译插件的结果,得到最准确的理解。

图片描述

彩云翻译
彩云翻译 提供了中英文对照翻译的能力,如果看某些英文技术文章有些吃力,可以适当使用该插件实现中英文对照理解。
图片描述

<br/><br/><br/>

5.很赞的网站

<br/>

5.1 在线练习网站

很多人想学习某个技术,但是有自己电脑配置限制或者嫌麻烦等各种原因,可能不愿意安装某些环境。

那么有没有可以在线练习的网站呢? 答案是:有。

接下来推荐几个非常强大的在线练习和学习网站。
<br/><br/>

5.1.1 Git 在线练习
推荐一个在线学习 Git 的趣味网站: https://learngitbranching.js....

file

<br/><br/>
5.1.2 kafka集群体验
有一个网站提供kafka集群的体验:https://www.cloudkarafka.com/
<br/><br/>
5.1.3 leetcode
此处,不得不提的是鼎鼎大名的 leetcode。

该网站提供了在算法、数据库和Shell 脚本的练习题。
<br/><br/>
5.1.4 数据结构可视化
接下来推荐一个数据结构可视化的网站。可以选择某种数据结构,动态添加数据,观察变化过程。

file

<br/><br/>

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

<br/><br/>
5.1.6 在线练习SQL
推荐几个可在线练习 SQL 的超赞网站:SQLZOO、SQLBolt、SQL Fiddle。

中文版:xuesql、廖雪峰SQL教程

file

<br/><br/>
<br/><br/>

5.2 实用网站

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

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

JSON 和 Java实体互转
有很多强大的网站支持 JSON和Java实体互转,如 bejson、jsonschema2pojo 、codebeautify、FreeCodeFormat、site24*7 等。

<br/><br/>
5.2.3 超赞的英文 Java学习网站
除了咱们的慕课网外,推荐几个非常好的英文学习网站。

首推 baeldung该网站几乎所有的文章都有配套代码,。我们可以直接通过该网站的代码运行学习某些知识点,某些框架等。

其次是 javacodegeeks, 该网站会提供丰富的 Java 教程,还会提供一些英文 PDF 教程。

journaldev 和 jamesdbloom 对技术的讲解非常透彻。
<br/><br/>
5.2.4 技术电子书百宝箱
Library Genesis 号称是帮助全人类知识传播计划,其网站 http://gen.lib.rus.ec/ 提供了很多英文图书的下载。

file

我们 Java 开发需要用到知名英文书籍几乎都可以在上面找到电子版。

强烈建议大家购买纸质版经典的 Java 技术图书,反复学习。

<br/><br/>
5.2.5 GitHub
GitHub 也可堪称是百宝箱,大家可以通过它来搜索想学技术的源码和相关示例代码。

大家可以在 Java 的 topic栏目 了解 stars 最多的,最近更新的,最佳的 Java项目等。


陈晨辰
212 声望19 粉丝