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/>
<br/><br/>
那么有自带的强大的反汇编工具 javap 还有必要用这个插件吗?
这个插件的强大之处在于:
- 不需要敲命令,简单直接,在右侧方便和源代码进行对比学习;
- 字节码命令支持超链接,点击其中的虚拟机指令即可跳转到 jvms 相关章节,超级方便。
该插件对我们学习虚拟机指令有极大的帮助。
<br/><br/>
2.3 Codota
<br/>
另外一个不得不说的就是专栏中提到的辅助开发神器: Codota。
<br/><br/>
<br/>
该插件的强大之处在于:
- 支持智能代码自动提示,该功能可以增强 IDEA 的代码提示功能;
- 支持 JDK 和知名第三方库的函数的使用方法搜索,可以看到其他知名开源项目对该函数的用法。
- 当我们第一次使用某个类,对某个函数不够熟悉时,可以通过该插件搜索相关用法,快速模仿学习。
如上图所示,我们想了解 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...。
大家可以观看其 github 首页的动图体会和学习其强大功能。
<br/><br/>
2.8 Maven Helper
<br/>
现在 Java 项目通常会使用 maven 或者 gradle 构建,对于maven 项目来说, jar 包冲突非常常见。
那么如何更容易地查看和解决 jar 包冲突呢?
大家可以安装该插件,安装后 IDEA 中打开 pom.xml 文件时,就会多出一个 “Dependency Analyzer” 选项卡。
如上图所示,该插件支持值插件冲突的 jar 包,可以选择冲突的 jar 包将其 exclude 掉。
<br/><br/>
2.9 FindBugs
<br/>
程序员总是想尽可能地避免写 BUG, FindBugs 作为静态代码检查插件,可以检查你代码中的隐患,并给出原因。
当然还有很多类似的静态代码检查插件,大家可以自行了解安装。
<br/>
2.10 SequenceDiagram
<br/>
SequenceDiagram 可以根据代码调用链路自动生成时序图,超级赞,超级推荐!
这对研究源码,梳理工作中的业务代码有极大的帮助,堪称神器。
安装完成后,在某个类的某个函数中,右键 --> Sequence Diagaram 即可调出。
如下图是 Netty 的源码,可以通过该插件绘制出当前函数的调用链路。
双击顶部的类名可以跳转到对应类的源码中,双击调用的函数名可以直接调入某个函数的源码,总之非常强大。
<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
<br/><br/>
2.12 Java Stream Debugger
<br/>
Stream 非常好用,可以灵活对数据进行操作,但是对很多刚接触的人来说,不好理解。
那么 Java Stream Debugger 这款神器的 IDEA 就可以帮到你。它可以将 Stream 的操作步骤可视化,非常有助于我们的学习。
<br/><br/>
<br/>
3.反编译和反汇编软件
<br/>
Java 学习进阶之路离不开Java 反编译和反汇编。
实际开发中需要用到反汇编的典型场景有:
- 自己或者二方上传的包含新的接口 jar 包到maven 仓库,下载下来查看 jar 包检查新的接口是否包含在新的 jar 包中;
- 需要临时查看某个 Jar 包的源码,不想加到本地仓库中;
- 拿不到源码,又想了解其源码究竟是怎么写的;
- 线上代码表现和自己的源码不一致,怀疑线上代码不对,可以反编译去核对。
对于大多数普通 Java 工程师来说,使用反编译的场景多是为了学习研究。
<br/><br/>
3.1 在线Java反编译工具
<br/>
有很多在线反编译的网站,其中比较好用的主要是以下两个:
使用简单,直接将 jar 包和 class文件拖到页面即可。
http://www.javadecompilers.com/
功能很强大,支持多种反编译方式,但是浏览效果不如上面网站好。
<br/><br/>
3.2 离线 Java 反编译工具
<br/>
3.2.1 反编译软件
<br/>
很多人担心在线反编译可能会引起代码泄露等,所以倾向于使用本地的反编译工具。
这里推荐两款软件: JD-GUI 和 Luyten。
JD-GUI 是一款可以根据 Java的 class 文件反编译出其源码的工具,界面简单,功能强大。
另外一个非常好用的反编译软件为 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。
在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 贴图,截图就会桌面置顶显示。
我们写技术文章或者开发时可能需要参考多个地方,由于开发的桌面和参考的桌面通常不在一个桌面,如果没有双屏,或者双显示屏还不过还需要切换,就非常浪费时间。此时该软件就有大用途,可以将待参考的内容分别截图、贴图,然后自己随意排列组合在当前页面中供你参考。
<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 命令行工具的可视化整合工具,可以在开发和生产中使用。
常规用法是先启动软件,然后选择本地的 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....
<br/><br/>
5.1.2 kafka集群体验
有一个网站提供kafka集群的体验:https://www.cloudkarafka.com/
<br/><br/>
5.1.3 leetcode
此处,不得不提的是鼎鼎大名的 leetcode。
该网站提供了在算法、数据库和Shell 脚本的练习题。
<br/><br/>
5.1.4 数据结构可视化
接下来推荐一个数据结构可视化的网站。可以选择某种数据结构,动态添加数据,观察变化过程。
<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教程
<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/ 提供了很多英文图书的下载。
我们 Java 开发需要用到知名英文书籍几乎都可以在上面找到电子版。
强烈建议大家购买纸质版经典的 Java 技术图书,反复学习。
<br/><br/>
5.2.5 GitHub
GitHub 也可堪称是百宝箱,大家可以通过它来搜索想学技术的源码和相关示例代码。
大家可以在 Java 的 topic栏目 了解 stars 最多的,最近更新的,最佳的 Java项目等。