导航和编辑 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。或者,你可以从上下文菜单中选择转到定义(右键单击,然后选择转到定义)。当符号只有一个定义时,你将直接导航到其位置,否则,竞争的定义将如上一节所述在速览窗口中显示,你必须选择要转到的定义。
转到超级实现
你可以通过在悬停时点击转到超级实现链接来跟踪类的实现和重写方法。
调用层次结构
调用层次结构视图显示了某个函数的所有调用方或被调用方,并允许你深入查看调用者的调用者和调用的调用。右键单击一个函数并选择速览 > 速览调用层次结构。
你也可以在函数体中右键单击并选择显示调用层次结构。
类型层次结构
类型层次结构视图显示了 Java 对象之间的继承关系。你可以在一个类型上右键单击并选择显示类型层次结构。
折叠区域
折叠区域允许你折叠或展开代码片段以更好地查看源代码。
智能选择
通过智能选择(语义选择),你可以根据源代码中光标位置的语义信息来扩展或收缩选择范围。
- 要扩展选择,请使用 ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)。
- 要收缩选择,请使用 ⌃⇧⌘← (Windows, Linux Shift+Alt+Left)。
语义高亮
语法高亮是一项重要功能,它能让你更有效地阅读代码。借助语义高亮,VS Code 可以根据来自 Java 语言服务的符号信息提供更准确的源代码着色。
下面只是一个例子,左边是启用语义高亮后的行为,右边是只有语法高亮的行为。
你可以在 Java 语言支持扩展的 wiki 上了解更多关于 Java 语义高亮的细节。
使用 Spring Boot 导航代码
Spring Boot Tools 扩展为 Spring Boot 项目提供了增强的导航和代码补全支持。
@/
显示所有已定义的请求映射(映射路径、请求方法、源位置)@+
显示所有已定义的 Bean(Bean 名称、Bean 类型、源位置)@>
显示所有函数(原型实现)@
显示代码中的所有 Spring 注解
要了解有关 Visual Studio Code 对 Spring Boot 的支持的更多信息,请阅读在 Visual Studio Code 中使用 Spring Boot。
代码编辑
通过智能感知(IntelliSense)提供的智能代码补全和签名细节,编辑代码也变得轻而易举。你还可以使用代码片段以及各种代码操作(例如生成 Getters/Setters 和组织导入)来进一步提高你的生产力。
Visual Studio Code 中的 Java 支持会自动检测代码中的问题,并为你提供快速修复建议。
有关重构和代码操作的更多详细信息,请参阅重构和源代码操作。
IntelliSense
Visual Studio Code for Java 中的代码补全由 Language Support for Java™ by Red Hat 提供。该扩展由 Eclipse 背后的相同 Java 开发工具 (JDT) 提供支持,因此你可以期待同样级别的支持。
此外,还有一种名为 IntelliCode 的 AI 辅助智能感知功能。它通过将你最可能使用的内容放在补全列表的顶部来节省你的时间。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) {}
的代码片段。
完整的快捷方式列表如下
代码片段快捷键
快捷键 | 描述 |
---|---|
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) | 创建一个 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 循环 |