VS Code 开发Java之代码导航和代码编辑

news2024/11/24 11:42:06

快速导航

VS Code提供了一些功能可以在Java开发时快速导航。

代码导航

  • 大纲视图(Outline view): 方便地导航当前文件中的成员
  • 项目视图(Projects view): 项目的详细概述
  • Java编辑器: 支持调用层次结构、类型层次结构、定义导航、工作区中的搜索类型等

搜索功能 (#@)

通过搜索,可以在当前文件或工作区快速导航到代码。

1.在工作区搜索

步骤如下:

  1. Ctrl+T
  2. 输入需要搜索的符号就可以在当前的工作区进行搜索。
  3. 输入字符时会显示 匹配的列表(搜索匹配的文件), 如果匹配的文件没有打开,则会首先打开文件。

还有一种操作方式是:

  1. Ctrl + P 打开命令
  2. 输入# 然后进行搜索
    也就是说 , # 命令是Ctrl+T的快捷方式。

在这里插入图片描述

2. 在当前文件搜索

在当前文件搜索的步骤如下:

  1. 按下 Ctrl+P 打开命令选项板
    在这里插入图片描述

  2. 输入 @

  3. 输入需要在当前文件搜索的内容。

  4. 输入的时候会显示匹配的列表, 选择符合的选项点击即可

Peek Definition ( 窥视定义)

在 Visual Studio Code(VS Code)中,“Peek Definition” 是一个强大的功能,允许你在同一个编辑窗口中快速查看和编辑代码的定义,而无须导航到其他文件或位置。

如何使用 "Peek Definition"的功能:

  • 方式1: 通过右键菜单操作: 在你的代码中右击你想要查看定义的类、函数或变量,然后在弹出的右键菜单中选择 “Peek Definition”。

  • 方式2: 通过快捷键操作: 将光标放在想要查看定义的类、函数或变量上,然后按 Alt+F12 (在 MacOS 上是 Option+F12)。

无论通过哪种方式操作,VS Code 都会在当前编辑窗口中打开一个小窗口,显示被你查看的项的定义。你可以在这个小窗口中查看和编辑代码,并可以通过点击右上角的 “x” 或者再次按 Esc 键来关闭它。

“Peek Definition” 是一个十分便捷的功能,尤其在处理大型代码库或复杂逻辑操作时,它能够节省你在不同代码文件和代码段之间切换的时间,提高编程效率。

这里以查看 println()函数的定义为例:

  1. 选中函数, 右键单击后弹出菜单, 选择 Peek > Peek Definition
    在这里插入图片描述

  2. 点击后显示如下:

在这里插入图片描述

上方会显示在哪个文件里定义了这个方法 以及方法的具体定义。 最右方的 "x"按钮点击之后就可以关闭这个窗口了。

Go to Definition(转到定义)

使用 “Go to Definition” 可以快速的转到定义的地方,“Go To Definition” 是一个非常实用的功能,用于导航到代码元素的定义处。这样可以让开发者更轻松地理解和维护代码。

使用 “Go To Definition” 的方式有多种, 包括:

  • 方式1: 使用右键菜单操作:右键点击需要去到定义的变量、函数或类,然后在弹出的菜单中选择 “Go to Definition”。
  • 方式2: 使用快捷键操作:将光标放在需要去到定义的变量、函数或类上,然后按F12键。在 macOS 上,默认快捷键是F12

成功执行 “Go to Definition” 后,VS Code 将会跳转到选中元素的定义位置。如果定义在当前文件,VS Code 会跳转到文件中对应的位置;如果定义在其他文件,VS Code 会打开那个文件并跳转到对应位置。

如果定义位置有多个(例如,Java 接口的多个实现),VS Code 将在 “Go to Definition” 的下拉列表中列出所有位置,让你选择要跳转的目标。

同样以上面的println()函数的定义为例, 查看后的效果如下图:
在这里插入图片描述

Go to Definition 和 Peek Definition 查看的最终结果类似, 但是显示的方式不同, 前者是打开目标文件进行显示, 后者就是在同一个文件进行显示。

Go to Super Implementation(转到父类)

在 Visual Studio Code(VS Code)中,“Go to Super Implementation” 是一个用于导航到当前方法或类的超类(父类)或接口实现的功能。它是在处理面向对象编程时非常实用的功能,帮助你理解和跟踪类的继承关系和接口实现。

不过,要注意的是,VS Code 默认并不支持 “Go to Super Implementation” 功能,需要安装 Java Language Support 插件(由 Red Hat 提供)才能使用这个功能。使用 “Go to Super Implementation” 也有多种方式:

  • 方式1: 使用右键菜单操作: 右键点击需要导航到超类或接口实现的方法或类,然后在弹出的菜单中选择 “Go to Super Implementation”。

  • 方式2: 使用快捷键操作: 将光标放在需要导航到超类或接口实现的方法或类上,然后按 Ctrl 键并用鼠标点击。在 macOS 上,默认快捷键是 Cmd + 鼠标点击。

如果方法或类有超类或接口实现,VS Code 将会跳转到对应的实现代码。如果有多个实现,VS Code 将显示一个包含所有实现的列表供你选择。

使用 “Go to Super Implementation” 功能可以帮助你更有效地理解代码的结构和逻辑,特别是在处理大型项目和复杂的类和接口结构时。

举例来看,定义了一个如下类:

public class Animal extends Object{
    
    public String toString(){
        return "";
    }
}

  • Animal 类继承自Object, toString() 方法也是重写的父类的方法,

在这里插入图片描述

选中 toString() 方法之后点击 “Go to Super Implementation” , 会打开Object.class 并定位到toString() 方法的定义。
在这里插入图片描述

查看调用的层级结构

在VS Code 中可以显示和导航当前函数或方法的调用图。
查看"Call Hierarchy"的方式:

  • 方式1:通过右键菜单操作: 在你的代码中,右键点击你想要查看调用层次的函数或方法,然后在弹出的菜单中选择 “Peek > Peek Call Hierarchy”。
  • 方式2:右键单击函数体并选择“Show Call Hierarchy”。
  • 方式3::通过快捷键操作: 将光标放在你想要查看调用层次的函数或方法上,然后按 Ctrl+Shift+Alt+H (在 MacOS 上是 Ctrl+Option+Shift+H)。

无论选择哪种方式,VS Code 都将在当前窗口的底部打开一个 “Call Hierarchy” 窗口。在这个窗口里,你可以看到两个选项:

  • 一个是 “Calls From”,显示其他哪些函数或方法调用了当前的函数或方法;
  • 另一个是 “Calls To”,显示当前函数或方法调用了哪些其他的函数或方法。
    可以在窗口中点击任何一个函数或方法来跳转到其在代码中的位置。

“Call Hierarchy” 是一个方便且实用的功能,让你能快速理解代码结构和函数调用关系,尤其在处理大型项目或者复杂逻辑时,更能提高你的效率。

注意:不同的编程语言或框架的 VS Code 插件可能有不同的 “Call Hierarchy” 支持程度。比如在 JavaScript/TypeScript 或 C++ 中,你可能需要具备最新的插件和语言服务来使用这个功能。在 Java 中,需要安装 “Language Support for Java™ by Red Hat” 插件才能使用这个功能。

示例:

在这里插入图片描述

点击右侧的按钮进行Calls From 和 Calls To的切换

Type Hierarchy (类型层次结构)

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

在这里插入图片描述

显示的效果如下:
在这里插入图片描述

折叠区块

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

在这里插入图片描述

智能选择

通过智能选择(语义选择),可以根据源代码中插入符位置的语义信息来扩大或缩小选择范围。

  • 要扩大选择范围,请使用 Shift+Alt+Right。
  • 要缩小选择范围,请使用 Shift+Alt+Left。
    在这里插入图片描述

semantic Highlighting(语义高亮)

借助语义高亮,VS Code 可以根据来自 Java 语言服务的符号信息提供更准确的源代码着色。

下面只是一个例子,左边是启用语义高亮后的行为,右边是仅语法高亮的行为。
在这里插入图片描述

“Sematic Highlighting”,又叫语义高亮,是 Visual Studio Code (VS Code) 提供的一项很强大的功能。它可以基于代码的语义(例如变量、函数、类等的类型和作用范围)为代码元素提供更丰富、更多样化的颜色高亮,而不仅仅是基于语法(例如关键字、运算符等)。

如何启用或禁用 Sematic Highlighting:

“Sematic Highlighting” 的开启状态依赖于你使用的语言和对应的 VS Code 插件。一些语言的支持插件(例如 C++ 或 TypeScript/JavaScript)默认就开启了这个功能;一些其他语言可能需要在你的设置 (settings.json) 文件中显式开启。例如,对于 TypeScript/JavaScript,你可以添加 “editor.semanticHighlighting.enabled”: true 以开启 Sematic Highlighting,

这个设置有以下几种选项:

  • “editor.semanticHighlighting.enabled”: true:为所有文件启用语义高亮。
  • “editor.semanticHighlighting.enabled”: false:为所有文件禁用语义高亮。
  • “editor.semanticHighlighting.enabled”: “configuredByTheme”:根据当前使用的主题配置是否启用语义高亮(这是默认的设置)。
    注意,如果主题不支持语义高亮,即使启用了语义高亮,也看不到不同。可以尝试切换到一个支持语义高亮的主题,比如内置的 “Dark+” 或 “Light+” 主题。

无论是否使用语义高亮取决于你的个人喜好。有些人觉得语义高亮使他们更容易理解代码,有些人则觉得它使代码颜色过于繁复。最重要的是找到一个适合你自己的设置。

Code Snippets 代码段

在Visual Studio Code (VS Code)中,代码段(Code Snippets)是一项非常实用的功能,允许你快速输入常用代码片段。VS Code内置了一些常用的代码段,同时你也可以自定义自己的代码段。

可以使用代码片段来构建类和方法, VS Code也提供了IntelliSense用于自动补全代码。
Visual Studio Code 支持各种流行的 Java 代码片段,使您提高工作效率,例如类/接口、syserr、sysout、if/else、try/catch、静态 main 方法。 使用来自 Java 语言服务器的信息,它还可以在选择过程中提供代码片段的预览。

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

代码段快捷方式:

快捷键描述
ctor公共构造方法
dowhileDo-while语句
foreach, iter数组的迭代
fori数组上迭代
ifif语句
ifelseIf-else语句
ifnull检查为空的if语句
ifnotnull检查不为空的if语句
main, psvm公共的静态主方法
new创建新的对象
private_method私有方法
private_static_method私有静态方法
prf私有字段
protected_method受保护的方法
public_method公共方法
switchswitch 语句
syserr, serr标准错误输出
sysout, sout标准输出
systrace, soutm打印当前方法到标准输出
try_catchTry/catch 语句块
try_resourcesTry-with-resources语句
whileWhile 语句

Postfix 代码片段快捷方式

快捷键模板内容描述
cast((SomeType) expr)将表达式转换为新类型
elseif (!expr)创建否定的if语句
forfor (T item : expr)创建for语句
forifor (int i = 0; i < expr.length; i++)创建一个在数组上迭代的for语句
forrfor (int i = expr.length-1; i >= 0; i–)创建一个以相反顺序迭代数组的for语句
ifif (expr)创建if语句
nnullif (expr != null)创建if语句并检查表达式是否未解析为null
nullif (expr == null)创建一个if语句,用于检查表达式是否解析为null
sysoutSystem.out.println(expr)将受影响的字符串发送到System.out.println
throwthrow expr抛出给定的异常
varT name = expr创建新变量
whilewhile (expr) {}创建while循环

shortcut key template content description
cast ((SomeType) expr) Casts the expression to a new type
else if (!expr) Creates a negated if statement
for for (T item : expr) Creates a for statement
fori for (int i = 0; i < expr.length; i++) Creates a for statement which iterates over an array
forr for (int i = expr.length-1; i >= 0; i–) Creates a for statement which iterates over an array in reverse order
if if (expr) Creates a if statement
nnull if (expr != null) Creates an if statement and checks if the expression does not resolve to null
null if (expr == null) Creates an if statement which checks if expression resolves to null
sysout System.out.println(expr) Sends the affected string to a System.out.println(…) call
throw throw expr Throws the given Exception
var T name = expr Creates a new variable
while while (expr) {} Creates a while loop

如何创建和使用代码段:

  • 打开代码段设置:可以通过点击左上角文件菜单的文件 > 首选项 > 用户代码片段打开代码段设置。
    在这里插入图片描述

  • 创建新的代码段文件:在打开的选项卡你可以选择已经存在的代码段文件进行编辑,或者通过点击新建全局代码片段文件创建全新的代码段。全局代码段可用于所有项目,如果你想创建指定项目的代码段,可以在项目根目录下的.vscode文件夹创建yourname.code-snippets文件。

编写代码段:在代码段文件中,你可以编写自己的代码段。以下是一个简单的代码段示例,它创建一个包含 System.out.println() 的 Java 代码段:

{
    "Print to console": {
        "prefix": "print",
        "body": [
            "System.out.println($1);"
        ],
        "description": "Print output to console"
    }
}

在这个例子中,“Print to console” 是代码段的名称, “print” 是激活代码段的前缀,当你在 VS Code 的编辑器中输入 “print” 并按下 Tab 键时,代码段就会被插入进来

  • “body” 定义了代码段的代码
  • “$1” 是一个位置参数,代表光标自动跳转到的位置,
  • “description” 是代码段的描述,会在自动完成列表中显示。

使用代码段:保存完自定义的代码段文件后,就可以在 VS Code 的编辑器中使用你的代码段了。只需开始输入你为代码段定义的前缀,然后 VS Code 就会弹出代码段的建议,你只需在下拉列表中选择你的代码段即可。
VS Code 的代码段非常灵活且强大,你可以创建任何语言的代码段,包括跨文件和多行的代码段,非常适合用来提高开发效率。

示例:
将上面的内容保存到文件 myjava.code-snippets
在这里插入图片描述

在编码的时候输入 print 就会出现如下效果。
在这里插入图片描述

代码编辑

使用 IntelliSense 实现智能代码补全和签名详细信息,编辑代码也很容易。 您可以使用代码片段以及各种代码操作(例如生成 Getter/Setter 和组织导入)来进一步提高工作效率。

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

IntelliSense(智能感知)

Visual Studio Code for Java 中的代码完成由 Red Hat 的 Language Support for Java™ 提供。 该扩展由 Eclipse 背后的相同 Java development tools (JDT) 提供支持。

此外,还有人工智能辅助的 IntelliSense,称为 IntelliCode。 通过将最有可能使用的内容放在完成列表的顶部,可以节省您的时间。 IntelliCode 建议基于 GitHub 上的数千个开源项目,每个项目都有超过 100 颗星,因此它根据高质量项目的最常见用法进行了培训。 当与代码的上下文相结合时,完成列表将被定制以促进这些实践。

IntelliCode 与 Java SE 和 Spring 等流行的 Java 库和框架配合良好。 无论您是在开发单体 Web 应用程序还是现代微服务,它都会对您有所帮助。
在这里插入图片描述

参考

  • https://code.visualstudio.com/docs/java/java-tutorial
  • https://code.visualstudio.com/docs/java/java-editing


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1164698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模电学习路径

交流通路实质 列出电路方程1&#xff0c;方程1对时刻t做微分 所得方程1‘ 即为 交流通路 方程1对时刻t做微分&#xff1a;两个不同时刻的方程1相减&#xff0c;并 令两时刻差为 无穷小 微分 改成 差 模电学习路径&#xff1a; 理论 《电路原理》清华大学 于歆杰 朱桂萍 陆文…

3D模型格式转换工具HOOPS Exchange:如何将3D PDF转换为STEP格式?

3D CAD数据在制造、工程和设计等各个领域都扮演着重要的角色。为了促进不同软件应用程序之间的协作和互操作性&#xff0c;它通常以不同的格式进行交换。 HOOPS Exchange是一个强大的软件开发工具包&#xff0c;提供了处理和将3D CAD数据从一种格式转换为另一种格式的解决方案…

WoShop跨境电商源码:告别繁琐,一键实现批量发货

随着全球电子商务的飞速发展&#xff0c;越来越多的商家开始进军跨境电商领域。然而&#xff0c;搭建一个成功的跨境电商平台需要考虑众多因素&#xff0c;如订单处理、物流配送、支付结算等。在这个过程中&#xff0c;WoShop跨境电商源码因其强大的功能和简易的操作&#xff0…

NOIP2023模拟9联测30 金牌

题目大意 有一棵 n n n个顶点的树&#xff0c;这棵树上长度为 d d d的简单路径的价值为 2 d 2^d 2d。 有 q q q次询问&#xff0c;每次给出两个正整数 x , y x,y x,y&#xff0c;请你回答所有通过顶点 x x x和 y y y的简单路径的价值之和&#xff0c;输出答案模 998244353 99…

【kubernetes】k8s对象☞pod

文章目录 1、什么是pod2、pod的使用2.1 用于管理pod的工作负载资源2.2 pod怎样管理多个容器2.3 pod 操作系统2.4 pod和控制器2.5 pod模板 3、pod的更新与替换3.1 资源共享和通信3.2 pod中的存储3.3 pod联网 4、容器的特权模式4.1 linux 特权容器4.2 windows特权容器 5、静态pod…

uniapp之actionsheet 自定义组件

uniapp本身自带的actionsheet太丑&#xff0c;不够美观。闲着也是闲着&#xff0c;自己实现了一个类似的选择器。 支持功能&#xff1a; 1、左对齐 2、右对齐 3、居中 4、可加图标 下面贴出使用教程&#xff1a; <template><view><action-sheet alignment&…

在Google Kubernetes集群创建分布式Jenkins(一)

因为项目需要&#xff0c;在GKE的集群上需要创建一个CICD的环境&#xff0c;记录一下安装部署一个分布式Jenkins集群的过程。 分布式Jenkins由一个主服务器和多个Agent组成&#xff0c;Agent可以执行主服务器分派的任务。如下图所示&#xff1a; 如上图&#xff0c;Jenkins Ag…

大数据毕业设计选题推荐-系统运行情况监控系统-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制

文章目录 openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制 openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制 行级访问控制特性将数据库访问控制精确到数据表行级别&#xff0c;使数据库达到行级访问控制的能力。不同用户执…

Github 自动化部署到腾讯云服务器

1.准备工作 新建仓库 新建项目 推送到远程仓库 2.配置仓库密钥 点击 Settings -> Sectets and variables -> Actions -> New repository sectet 依次添加以下变量 Name&#xff1a;SERVER_HOST / Secret&#xff1a;服务器公网IP Name&#xff1a;SERVER_USERNAME /…

软件测试/测试开发丨Python:易学、强大、多用途的编程语言

点此获取更多相关资料 Python 发展历史 Python 是一门高级编程语言&#xff0c;由 Guido van Rossum&#xff08;龟叔&#xff09; 在 1989 年发明&#xff0c;设计 Python 语言的初衷是为了创造一种介于 C 和 shell 之间&#xff0c;简洁方便&#xff0c;易学易用&#xff0…

第十三章,枚举与泛型例题

例题1 package 例题;interface SeasonInterface{//四季接口int SPRING 1, SUMMER 2, AUTUMN 3, WINTER 4; }enum SeasonEnum{//四季枚举SPRING,SUMMER,AUTUMN,WINTER }public class 例题1 {//定义方法public static void printSeason1(int season){switch (season) {case …

MAA连不上MUMU模拟器

之前一直能正常用&#xff0c;最近突然连接不上&#xff0c;最终发现是adb版本不同造成的&#xff0c;我系统变量的adb版本如下&#xff1a; MUMU自带adb版本如下&#xff1a; 解决办法&#xff1a; 把mumu的adb复制到系统变量路径下&#xff0c;或者把adb的系统变量删除

基于OpenHarmony的启航开发板的基础操作

文章目录 前言一、前提准备二、基础操作1.hb set命令的使用2.hb build -f 命令的使用3.Hello World 案例 前言 在物联网&#xff08;IoT&#xff09;领域&#xff0c;开发板扮演着至关重要的角色&#xff0c;为开发人员提供了实验和原型设计的平台。而OpenHarmony作为一个开源…

NOR Flash基本原理

目录 1. Flash Memory中存储的信息 2. Flash操作 2.1 Read操作 2.2 Program操作 2.3 Erase操作 3 电压阈值分布 4 Block Erase 4.1 Pre-Program Phase 4.2 Erase Phase 4.3 Recovery Phase 5 Erase 中断 6 注意要点 这是之前搞Flash IP时的一个学习笔记&#xff0c…

力扣 搜索旋转排序数组 二分

&#x1f468;‍&#x1f3eb; 33. 搜索旋转排序数组 class Solution {public int search(int[] nums, int target){int l 0;int r nums.length - 1;while (l < r){int m l r >> 1;//else大法&#xff0c;把无序段抛给else&#xff0c;if只处理有序段 // 需要特…

Flutter屏幕适配

文章目录 一、Flutter单位二、设备信息三、常见适配方案四、flutter_screenutil 一、Flutter单位 Flutter使用的是类似IOS中的点pt&#xff08;point&#xff09;。 iPhone6的尺寸是375x667&#xff0c;分辨率为750x1334。 iPhone6的dpr( devicePixelRatio ) 是2.0。 DPR 物…

论文 辅助笔记:t2vec train.py

1 train 1.1 加载training和validation数据 def train(args):logging.basicConfig(filenameos.path.join(args.data, "training.log"), levellogging.INFO)设置了日志的基本配置。将日志信息保存到名为 "training.log" 的文件中日志的级别被设置为 INFO&…

Vue动态树、配置请求路径、表格数据显示、实现分页、创建书本管理组件、点击菜单实现路由跳转以及系统首页配置。

目录 1. 准备工作 2. 动态树 2.1 在配置请求路径 2.2 使用动态数据构建导航菜单 2.2.1 通过接口获取数据 2.2.3 通过后台获取的数据构建菜单导航 2.2.3.1 先构建一级导航菜单 2.3 点击菜单实现路由跳转 2.3.1 创建书本管理组件 3. 系统首页配置 4. 表格数据显示 4.…

探密工业互联网网络体系:构建端到端的稳定传输

什么是工业互联网网络&#xff1f; 工业互联网网络是一种将工业设备、传感器和计算机系统连接到一起&#xff0c;以便它们可以共同工作、共享数据和实现更高效的生产和控制。这个网络体系的目标是提高工业过程的效率、可靠性和安全性。 在数字时代的今天&#xff0c;工业互联网…