在 VS Code 中尝试

导航和编辑 Java 源代码

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

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

代码导航

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

搜索符号

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

在工作区中搜索符号

要在当前工作区中搜索符号,首先按 ⌘T(Windows、Linux Ctrl+T,然后输入符号名称。与之前一样,将显示潜在匹配项列表。如果您选择了一个在未打开的文件中找到的匹配项,该文件将在导航到匹配项位置之前打开。或者,您也可以使用快速打开⌘P(Windows、Linux Ctrl+P),然后输入“#”命令来搜索当前工作区。⌘T(Windows、Linux Ctrl+T只是“#”命令的快捷方式,因此一切工作方式相同。

在当前文件中搜索符号

要在当前文件中搜索符号,请使用快速打开⌘P(Windows、Linux Ctrl+P),然后输入“@”命令,接着输入要查找的符号名称。潜在匹配项列表将出现并随您键入进行筛选。从匹配项列表中选择以导航到其位置。

速览定义

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

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

转到定义

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

要转到符号的定义,请将光标放在源代码中任何使用该符号的位置,然后按 F12。或者,您可以从上下文菜单中选择转到定义(右键单击,然后选择转到定义)。当符号只有一个定义时,您将直接导航到其位置;否则,竞争定义将如上一节所述在速览窗口中显示,您必须选择要转到的定义。

转到超级实现

通过单击悬停时的转到超级实现链接,您可以跟踪类实现和重写方法。

Spring Navigation

调用层次结构

“调用层次结构”视图显示函数的所有调用来源或去向,并允许您深入查看调用者的调用者和调用的调用。右键单击函数并选择速览 > 速览调用层次结构

Call Hierarchy Peek

您也可以在函数体中右键单击并选择显示调用层次结构

Call Hierarchy Menu

类型层次结构

“类型层次结构”视图显示 Java 对象之间的继承关系。您可以右键单击类型并选择显示类型层次结构

折叠区域

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

智能选择

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

  • 要展开选区,请使用 ⌃⇧⌘→(Windows、Linux Shift+Alt+Right
  • 要缩小选区,请使用 ⌃⇧⌘←(Windows、Linux Shift+Alt+Left

语义高亮

语法高亮是让您更高效地阅读代码的重要功能。借助语义高亮,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),编辑代码也变得轻而易举。您可以使用代码片段以及各种代码操作,例如生成 Getters/Setters 和组织导入,以进一步提高您的生产力。

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

有关重构和代码操作的更多详细信息,请参阅重构和源操作

智能感知 (IntelliSense)

Visual Studio Code 中对 Java 的代码补全由 Red Hat 的 Java™ 语言支持提供。该扩展由 Eclipse 背后的相同 Java 开发工具 (JDT) 提供支持,因此您可以期待相同级别的支持。

此外,还有一种 AI 辅助的智能感知 (IntelliSense),名为 智能代码 (IntelliCode)。它将您最可能使用的内容放在补全列表的顶部,从而节省您的时间。智能代码 (IntelliCode) 的建议基于 GitHub 上数千个拥有 100 多个星标的开源项目进行训练,因此它训练于高质量项目中最重要的常见用法。结合您的代码上下文,补全列表会进行调整以推广这些实践。以下是智能代码 (IntelliCode) 在 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 检查 not 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) 创建 if 语句并检查表达式是否不为 null
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 循环