IDEA源码阅读技巧

阅读代码(源码)是我们经常需要做的事情。那么 IDEA 有什么技巧可以帮助我们更好、效率更高地去阅读代码(源码)呢?

[[toc]]

下面均以阅读 JpaRepository 源码为例。

1.1 查看当前接口/类源码

使用频率 相关快捷键
⭐⭐⭐⭐⭐ Ctrl+左键(Win) / Command+左键 (Mac)

平时,我们如果想要查看某个类或接口的源代码时,我们可以将鼠标移动到该类/接口上,然后按住 Ctrl 后,鼠标左键点击,就会跳转到该类/接口的源码。

或者将光标移动到该类/接口上,然后按下 F4。

1.2 查看当前方法/类的实现

使用频率 相关快捷键
⭐⭐⭐⭐⭐ Ctrl+Alt+左键 (Win) / Command+option+左键 (Mac)

当我们调用一个方法/类,想要知道它是怎么实现的时候,我们可能会习惯性地通过 Ctrl+左键,但发现看到的只是一个抽象方法/抽象类,或者接口。

实际上,遇到这种情况,我们应该使用 Ctrl + Alt + B/鼠标左键 (Win) / Command + option + B/鼠标左键 (Mac),直接跳转到该方法/类的实现。

如果对应的方法/类只有一种实现,则会直接跳转过去,如果有多个,IDEA 则会弹框让我们进行选择要跳转的实现。此时我们根据需求进行跳转即可。

1.3 查看当前类/接口的层次结构

使用频率 相关快捷键
⭐⭐⭐⭐⭐ Ctrl + H

在阅读源码的过程中,我们经常需要查看某个接口/类的层次结构(子类层次结构,或父类层次结构),以此查看该类/接口继承自谁,又被谁继承实现了,从而了解该类/接口的”前世今生“。

例如 JpaRepository 的子类层次结构为:

image-20220415161022505

由此看出,

JpaRepository 被 JpaRepositoryImplementation 继承,

JpaRepositoryImplementation 又被 SimpleJpaRepository 实现,

SimpleJpaRepository 又被 QuerydslJpaRepository 继承

一层接着一层,非常清晰。同理,其父类层次结构为:

image-20220415161343689

1.4 查看最近使用的文件/操作

使用频率 相关快捷键
⭐⭐⭐⭐⭐ Ctrl + E(Win) / Command +E (Mac)

如果我们想要查看最近使用过的文件/操作,我们可以通过该快捷键调取,IDEA 会弹出如下窗口:

image-20220415165912312

1.5 快速检索类/文件/符号/操作/Git 命令

使用频率 相关快捷键
⭐⭐⭐⭐⭐ 双击Shift

该操作常用于:

  • 想要搜索打开最近使用的文件
  • 想要搜索某个包下文件(类、接口、配置等等,项目内的以及项目的依赖包内的),常用于搜索某个依赖包下的某个类。
  • 快速搜索并执行某个 IDEA 或 Git 的操作/命令

image-20220415170640761

1.6 查看当前类/接口的结构

使用频率 相关快捷键
⭐⭐⭐⭐ Alt + 7(Win) / Command +7 (Mac)

一般情况下,如果我们直接查看某个类/接口的源代码,会发现代码非常多且杂乱,无法快速的定位到我们要想要看的部分,或者无法快速了解到该类/接口都有哪些方法、字段、内部类等等。

这个时候我们就可以借助 IDEA 技巧,在要查看的类/接口上按下 Alt+7(win)/Command+7(Mac),IDEA 就会弹出类似小窗口,将该类/接口的整体结构展示出来。

image-20220415165429888

1.7 查看类/接口/方法被调用的情况

使用频率 相关快捷键
⭐⭐⭐⭐ Alt + F7

如果我们想要知道某个类/接口/方法在哪里被调用了,我们可以通过在方法名上使用快捷键 Alt + F7 来查看。

image-20220415165705991

1.8 查看当前类/接口的继承链路(图表形式)

使用频率 相关快捷键
⭐⭐⭐⭐ 相关快捷键较多,不建议记,直接右键选定即可

在类/接口名称上右键 ,选择 Shw Diagrams(显示图表) 即可查看图表形式的类继承链。

image-20220415171108449

我们还可以对图表进行一些操作。比如,可以点击图表中具体的类/接口 右键,然后选择显示它的实现、父类,或者依赖项,也可以查看该类/接口被调用的情况,甚至可以直接跳转到其源码进行查看。

此外,最上边的工具栏还支持查看选中的类/接口的方法、变量、内部类等等,还支持将图表导出。

总之,功能非常多,想要全部记住是不现实的,需要用到哪个,再进行摸索就可以了。

image-20220415171423744

1.9 源码阅读技巧之插件推荐

除了上面使用到的 IDEA 自带的技巧,我们还可以借助一些插件,大致了解项目的情况,例如项目的代码量、类或接口的数量、注释的占比等等,以及图形化方法调用链路。

1.9.1 一键生成方法调用时序图

序列图(Sequence Diagram),亦称为循序图,是一种 UML 行为图。表示系统执行某个方法/操作(如登录操作)时,对象之间的顺序调用关系。

这个顺序调用关系可以这样理解: 你需要执行系统中某个对象 a 提供的方法/操作 login(登录),但是这个对象又依赖了对象 b 提供的方法 getUser(获取用户)。因此,这里就有了 a -> b 调用关系之说。

我们可以通过 SequenceDiagram 这个插件一键生成方法的序列图。

安装之后,我们选中方法名(不能是类/接口名),然后右键,选择 Sequence Diagram 选项。

image-20220415172639932

我们还可以对时序图的展示做一些配置,例如调用深度、是否显示构造方法等等

image-20220415172822462

此外,我们还可以在时序图中,点击定位到相关的代码中,让我们快速了解该方法的内容,同时,还能将生成的时序图导出为图片。

1.9.2 项目代码数据统计

该插件能够帮助我们快速分析项目情况,我们可以对项目的 代码的总行数、单个文件的代码行数、注释行数等信息进行统计。

我们可以非常直观地看到项目中所有类型的文件的信息,比如数量、大小等等,可以帮助我们更好地了解项目。

image-20220415173209584

还可以使用它看所有类的总行数、有效代码行数、注释行数、以及有效代码比重等等这些东西。

image-20220415173246950

当然,如果项目太大,该插件会运行一段时间,好在插件本身可以设置为启动时不激活,当我们需要查看项目情况的时候,再点击底部 Tab 栏进行激活。