导航并编辑 Java 源代码

Visual Studio Code 首先是一个源代码编辑器,具备丰富的编辑功能。在本文档中,我们将介绍一些对 Java 开发非常有用的 Java 特有功能。

如果您在使用以下功能时遇到任何问题,可以通过提交问题联系我们。

代码导航

借助 大纲视图 (Outline view),您可以方便地导航当前文件中的成员。项目视图 (Projects view) 也提供了项目概览。作为 Java 编辑器,它还支持调用层次结构、类型层次结构、定义导航、在工作区中搜索类型等功能。

搜索符号

您可以搜索当前文件或工作区中的符号,以更快速地导航代码。

在工作区中搜索符号

要在当前工作区中搜索符号,请按 ⌘T (Windows, Linux Ctrl+T),然后输入符号名称。匹配列表将如前所示出现。如果您选择的匹配项位于尚未打开的文件中,系统将在导航到该位置前打开该文件。或者,您也可以使用快速打开 (Quick Open) (⌘P (Windows, Linux Ctrl+P)),然后输入“#”命令来搜索当前工作区。⌘T (Windows, Linux Ctrl+T) 只是“#”命令的快捷方式,因此功能完全一致。

在当前文件中搜索符号

要在当前文件中搜索符号,请使用快速打开 (Quick Open) (⌘P (Windows, Linux Ctrl+P)),然后输入“@”命令,接着输入您要查找的符号名称。潜在匹配项列表将会出现,并随您的输入实时过滤。从匹配列表中选择即可导航到目标位置。

速览定义

您可以使用“速览定义 (Peek Definition)”功能快速查看符号的定义。此功能会在一个速览窗口中显示定义附近的几行代码,这样您无需离开当前位置即可进行查看。

要速览符号定义,请将光标置于源代码中该符号的任何使用位置,然后按 ⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10)。或者,您可以从右键菜单中选择速览定义 (Peek Definition)

转到定义

您还可以使用“转到定义 (Go to Definition)”功能快速导航到符号的定义位置。

要转到符号定义,请将光标置于源代码中该符号的任何使用位置,然后按 F12。或者,您可以从右键菜单中选择转到定义 (Go to Definition)。当符号仅有一个定义时,您将直接跳转到该位置;否则,竞争的定义将显示在上一节所述的速览窗口中,您需要从中选择要前往的定义。

转到超级实现 (Super Implementation)

通过点击悬停时显示的转到超级实现 (Go to Super Implementation) 链接,您可以跟踪类实现和重写方法。

Spring Navigation

调用层次结构 (Call Hierarchy)

调用层次结构 (Call Hierarchy) 视图显示了函数的所有调用者和被调用者,并允许您深入查看调用者的调用者或调用者的调用。右键点击函数并选择速览 (Peek) > 速览调用层次结构 (Peek Call Hierarchy)

Call Hierarchy Peek

您也可以在函数体内右键点击并选择显示调用层次结构 (Show Call Hierarchy)

Call Hierarchy Menu

类型层次结构 (Type Hierarchy)

类型层次结构 (Type Hierarchy) 视图显示 Java 对象之间的继承关系。您可以右键点击某个类型并选择显示类型层次结构 (Show Type Hierarchy)

折叠区域

折叠区域允许您折叠或展开代码片段,以便更好地查看源代码。

智能选择 (Smart Selection)

借助 智能选择 (Smart Selection)(语义选择),您可以根据源代码中插入点位置的语义信息来扩大或缩小选择范围。

  • 要扩大选择范围,请使用 ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)
  • 要缩小选择范围,请使用 ⌃⇧⌘← (Windows, Linux Shift+Alt+Left)

语义高亮 (Semantic Highlighting)

语法高亮是一项让您可以更高效阅读代码的重要功能。在 语义高亮 (Semantic Highlighting) 的帮助下,VS Code 可以根据 Java 语言服务提供的符号信息提供更准确的源代码着色。

以下是一个示例,左侧是启用语义高亮后的效果,右侧仅显示语法高亮。

Semantic Highlighting

您可以在 Java 语言支持扩展 Wiki 上了解有关 Java 语义高亮的更多详细信息。

使用 Spring Boot 进行代码导航

Spring Boot Tools 扩展为 Spring Boot 项目提供了增强的导航和代码补全支持。

  • @/ 显示所有已定义的请求映射(映射路径、请求方法、源位置)
  • @+ 显示所有已定义的 Bean(Bean 名称、Bean 类型、源位置)
  • @> 显示所有函数(原型实现)
  • @ 显示代码中所有的 Spring 注解

Spring Navigation

要了解有关 Visual Studio Code 对 Spring Boot 支持的更多信息,请阅读 Visual Studio Code 中的 Spring Boot

代码编辑

借助智能代码补全和签名详情的 IntelliSense,代码编辑变得非常简单。您可以使用代码片段以及各种代码操作(如生成 Getter/Setter 和组织导入),进一步提高工作效率。

Visual Studio Code 中的 Java 支持会自动检测代码中的问题,并为您提供快速修复建议。

有关重构和代码操作的更多详情,请参阅 重构与源代码操作

IntelliSense

Visual Studio Code 对 Java 的代码补全功能由 Language Support for Java™ by Red Hat 提供。该扩展由 Eclipse 背后的同款 Java 开发工具 (JDT) 驱动,因此您可以期待相同级别的支持。

此外,还有一种名为 IntelliCode 的 AI 辅助 IntelliSense。它通过将您最可能使用的内容置于补全列表顶部来节省您的时间。IntelliCode 的建议基于 GitHub 上数千个超过 100 星的开源项目,因此它是通过高质量项目中通用的使用习惯训练而来的。结合您的代码上下文,补全列表会经过定制以推广这些实践。以下是 IntelliCode for Java 的实际演示。

IntelliCode 适用于主流的 Java 库和框架,如 Java SE 和 Spring。无论您是在开发单体 Web 应用还是现代微服务,它都能为您提供帮助。

创建新文件

VS Code 支持在创建 Java 源文件时应用模板。当您在资源管理器中创建 .java 文件时,语言服务器将自动为您生成类体并填充包信息。

代码片段

Visual Studio Code 支持多种流行的 Java 代码片段以提高您的工作效率,例如 class/interface、syserr、sysout、if/else、try/catch、静态 main 方法等。利用 Java 语言服务器提供的信息,它还会在选择时预览代码片段。

例如,输入“sout”或“sysout”将生成 System.out.println() 的代码片段。
同样,输入“main”或“psvm”将生成 public static void main(String[] args) {} 的代码片段。

Code Snippet

完整快捷方式列表如下

代码片段快捷方式

快捷键 描述
ctor 公共构造函数
dowhile Do-while 语句
foreach, iter 遍历数组或 Iterable
fori 遍历数组
if If 语句
ifelse If-else 语句
ifnull 检查是否为 null 的 if 语句
ifnotnull 检查是否不为 null 的 if 语句
main, psvm 公共静态 main 方法
new 创建新对象
private_method 私有方法
private_static_method 私有静态方法
prf 私有字段
protected_method 受保护方法
public_method 公共方法
public_static_method 公共静态方法
switch Switch 语句
syserr, serr 打印到标准错误输出
sysout, sout 打印到标准输出
systrace, soutm 将当前方法打印到标准输出
try_catch Try/catch 块
try_resources Try-with-resources 语句
while While 语句

后缀代码片段快捷方式

快捷键 模板内容 描述
cast ((SomeType) expr) 将表达式强制转换为新类型
else if (!expr) 创建否定形式的 if 语句
for for (T item : expr) 创建 for 循环语句
fori for (int i = 0; i < expr.length; i++) 创建用于遍历数组的 for 循环
forr for (int i = expr.length-1; i >= 0; i--) 创建用于反向遍历数组的 for 循环
if if (expr) 创建 if 语句
nnull if (expr != null) 创建检查表达式不为 null 的 if 语句
null if (expr == null) 创建检查表达式是否为 null 的 if 语句
sysout System.out.println(expr) 将受影响的字符串发送到 System.out.println(..) 调用
throw throw expr 抛出给定的异常
var T name = expr 创建新变量
while while (expr) {} 创建 while 循环
© . This site is unofficial and not affiliated with Microsoft.