IDEA初探:深入理解 Structure 功能

image

一、Structure - 类视图

  Structure 是 IDEA 中的一个视图工具,它提供了对当前文件中结构元素的快速访问。通过 Structure,我们可以方便地查看和导航到代码中的各个部分,从而提高代码编辑和浏览的效率。

1.1 基本概念

  Structure 视图以树形结构展示了当前文件中的元素,包括类、方法、变量等。通过这个视图,可以快速定位到所需的代码元素,并进行编辑或跳转。

1.2 使用方法

  要打开 Structure 视图,也可以在菜单栏中选择 View > Tool Windows > Structure,或者使用 Alt+7 打开。
image

  这将在IntelliJ的右侧打开一个新的窗口,显示项目中所有类的结构。在该窗口中,可以查看类的层次结构、方法和属性,并且可以可以通过单击元素名称来快速跳转到代码中的相应位置。
image

  • sort

    选项说明
    Alphabetically按字母顺序对类中的元素进行排序。
    By Visibility按项的可见性按以下顺序对项进行排序:public - protected - package local - private。

    启用这两个选项后,视图中的项将根据其可见性级别进行分组。在每个可见性级别组中,项目按字母顺序排序。当这两个选项都处于禁用状态时,这些项将按它们在代码中的显示顺序显示。

  • Show

    选项说明
    Anonymous Classes在树视图中显示内部匿名类。
    Fields显示树中的所有字段(属性)。
    Inherited显示当前类继承的和可从该类访问的所有方法和字段。继承的成员显示为灰色,以区别于当前类中定义的成员。
    Lambdas显示树中的所有 lambda。
    Non-public显示所有非 public 类成员。关闭该选项可隐藏所有非公共成员。
    HTML Outline(仅适用于 HTML 文件)显示 HTML 文件的 HTML 5 轮廓
    DDL statements(仅适用于 SQL 文件)仅显示 DDL 语句
    DML statements(仅适用于 SQL 文件)仅显示 DML 语句
    Select statements(仅适用于 SQL 文件)仅显示语句
    Other(仅适用于 SQL 文件)仅显示不属于上述类别的语句。
  • Group

    选项说明
    Methods by Defining Type按定义类型的方法,将重写或实现特定类或接口的方法的所有方法分组到与该类或接口对应的节点下。
    Properties显示树中的 getter、setter 和字段。
    Group by type(仅适用于 SQL 文件)按类型对语句进行分组

1.3 实际应用

  在编写代码时,可以使用 Structure 视图来快速浏览和编辑类、方法或变量。例如,当想重命名一个类或方法时,可以在 Structure 视图中找到该元素,然后直接在视图中进行编辑,而无需进入源代码编辑模式。另外,Structure 视图还可以帮助快速查找某个元素在整个项目中的引用,从而提高重构代码的效率。

二、Project Structure - 项目结构

  本节介绍 IntelliJ IDEA 的 Project Structure 配置,包括如何打开、项目配置如Project name、SDK,以及Modules配置中的项目名称、JDK版本、目录结构和依赖。强调了保持项目一致性的重要性,并提供了导入、新建和配置Module的方法。

2.1 功能介绍

  在IDEA中构建项目,我们肯定离不开 Project Structure 即“项目结构”,它几乎涵盖了一个项目所有的个性化的配置项。一般我们可以在 File->Project Structure 打开下图这个面板,当然也可以通过快捷键 Ctrl+Alt+Shift+S(Windows/Linux)Command+Option+Shift+S(Mac) 打开这个面板,那么接下来我们就来看看这个面板上的内容。
image

配置项说明及备注
Project Settings项目级别的设置
Project项目设置项目级别的设置,用来指定项目名称、SDK版本、语言级别、编译文件输出路径。
Modules模块信息设置模块名称、模块目录结构、模块编译、JavaDoc和外部注释的输出路径、模块依赖
Libraries项目类库项目级别的类库管理,用来管理依赖包。
Facets项目特征翻译为特性,配置模块使用的框架、工具等信息,常见的有WEB、Spring等。
Artifacts项目成品将来将我们的工程的打包成什么产品(jar、war……)
Platform Settings全局设置
SDKs平台SDK一般来讲,全局的JDK都会配置在此处。
Global Libraries全局类库全局类库,所有的项目都可以使用这里配置的类库。
Problems项目问题在项目异常的时候很有用,可以根据提示进行项目修复。

2.2 Project Settings(项目设置)

Project - 项目基本信息

image

序号说明
项目名称,使用此字段编辑项目名称。
就个人而言,一般会将此处的项目名与项目目录名和pom文件中的name三处保持一致,同时也避免IDEA在左侧会显示多个名称标识。
目的SDK版本。项目下的所有模块,默认使用此SDK版本,每个模块也可以指定各自的SDK版本。
者边界选中的SDK,点击后跳转到Platform Settings 下的 SDKs列表。
选择项目的语言级别。即项目的编译级别,也可以理解为项目的最低支持语言版本。
不同的JDK版本选择,对代码的语法有一定的影响,比如选择JDK8以前的版本,那么代码中有基于Lambda的语法将会报错。
项目编译器输出,指定IntelliJ IDEA将存储编译结果的路径。
各个模块的编译文件,默认都放在此路径下,当然各模块也可以指定各自的存放路径。
可以自定义输出路径

Modules - 模块信息

  Module 可谓是重点中的重点,甚至是最重要。毕竟 Module 作为实际存在形式,所有的源代码、配置、依赖等都在这里,因此大有可学呀。Modules 中的配置用的比较多的情况就是一组项目时,可以配置独立每个项目的参数。包括项目名称、目录结构、输出路径、依赖等。
image

  下面分析一下图中标注的四项内容,其中第三和第四项属于Source选项的子项。

  • 第一项,加号可以导入、新增各类Module项目,当然后面的减号可以移除对应的项目。
  • 第二项,项目名称,使用方式与前面的一致,也同样建议多处保持一致。
  • 第三项,JDK版本,与Project中一样,但此处针对的是当前Module。
  • 第四项,项目目录结构。对Module的开发目录进行文件夹分类,不同类型的文件进行指定的文件类型。
Souces

  这里对 Module 的开发目录进行文件夹分类,就是说这个模块里有什么内容,说明了不同性质的内容放在哪里。这些不同内容的标记代表了一个标准Java工程的各项内容,IDEA就是根据这些标记来识别一个Java工程的各项内容。比如,它会用javac去编译标记为Sources的源码,打包的时候会把标记为Resources的资源拷贝到jar包中,并且忽略标记为Exluded的内容。左边显示的是在选中内容的预览。
image

  其中,Language level 即语言级别列表,使用此列表为模块选择Java语言级别,可用选项对应于JDK版本。而Sources 为模块的资源分类,标识出文件夹用途,哪些是源码,哪些是配置文件等。
image

Sources源码源代码存放的文件,蓝色,一般用于标注类似 src 这种可编译目录。
只有 Sources 这种可编译目录才可以新建 Java 类和包,这一点需要牢记。
Tests设置测试代码存放的文件件,绿色,一般用于标注可编译的单元测试目录。
Resources配置文件,如:log4j.properties,application.yml,一般用于标注资源文件目录。
Test Resources这个对应着Tests文件夹,存放着Tests代码的配置文件。
Excluded排除的目录,一般是编译文件的输出目录。
被排除的目录相当于被 IntelliJ IDEA 废弃,该目录下的代码文件是不具备代码检查和智能提示等常规代码功能。
Paths

  为模块配置编译器输出路径,还可以指定与模块关联的外部JavaDocs和外部注释的位置。
image

Compiler output编译输出路径。
Inherit project compile output path继承项目编译输出路径,选择此选项以使用为项目指定的路径。
即上面在Project选项中设置的out文件路径。
Use module compile output path使用模块编译输出路径,可分为以下:
Output path:编译输出路径。
Test output path:测试代码编译输出路径。
Exclude output paths: 选中此复选框可以排除输出目录。
JavaDoc使用可用控件组合与模块关联的外部JavaDocs存储位置的列表。
External Annotations外部注释。管理与模块关联的外部注释的位置(目录)列表。
Dependencies

  在此选项卡上,可以定义模块SDK并形成模块依赖关系列表。一个中大型项目一般有多个模块,它们各司其职。模块与模块之间一般都存在依赖关系,比如常见的xxx-core模块一般会被其它几乎所有模块所依赖。
image

Module SDK模块SDK,选择模块SDK。要将项目SDK与模块相关联,请选择Project SDK。
Export依赖列表。

Libraries - 项目类库

  管理项目的类库,模块中需要引用才能使用这里的类库,如下图所示。
在这里插入图片描述

Facets - 项目特征

  Facets 可理解为用于配置 Project 项目的框架区,它能看到项目的每个Module模块使用的框架、语言等情况,并且还可以对它们进行配置。比如Spring框架,如果某个模块使用了它就可以来这里统一配置。优点是你会发现借助IDEA强大的功能它都给你想好了哪些地方可配置,你可以更改,让你实现配置界面化。
image

  不同的Facet对应的最右端窗口内容配置项是不一样的,通过此视窗,可以看到你当前Project项目,哪些模块使用了Spring框架,哪些是web项目,一目了然。它有个非常大的作用就是站在Project的视角对每个模块进行整体把控,比如若你发现有个模块不需要是web项目(并不需要对外提供服务接口),那铁定就是多引包了或者职责不清晰导致的,就可立马针对性解决,消除隐患。

Artifacts - 项目成品

  在Maven大行其道的今天,虽然用IDEA打包很少使用了,但是有些时候它对你本地调试还是蛮有用的,并且对理解maven的打包依旧有效,来,了解一下。Artifacts 这个概念不是特别好理解,Artifact 是 maven 中的一个概念,表示某个模块要何种打包形式,例如 war exploded、war、jar 等。Artifact 是一个项目资源的组合体,整合编译后的 java 文件、资源文件等。对于一个 module 而言,有了 Artifacts 就可以部署到应用服务器中了。

说明:war 和 war exploded区别就是后者不压缩,开发时选后者便于实时看到修改文件后的效果。
image

  默认情况下,IDEA 的 Modules 和 Artifacts 的 output 目录已经设置好了,不需要更改。打成 war 包 的时候会自动在 WEB-INF 目录 下生产 classes 目录 ,然后把编译后的文件放进去。

  • Web Application:Exploded:这个是以文件夹形式发布项目,发布项目时就会自动生成文件夹在指定的output directory。
  • Web Application:Archive:就是war包形式,将项目打成一个war包在指定位置。

2.3 Platform Settings(平台设置)

SDKs

  所有的项目都可以使用这里配置的SDK,此处看一下图,操作比较简单,就不展开了。
image

小结

  本文对 IntelliJ IDEA 的项目结构 Project Structure 的每个页签进行了分析,很多小伙伴们觉得 IntelliJ IDEA 不需要专门的学习分析,会用它导入maven项目、跑跑main函数启动下Spring Boot就成啦,我却不以为然。衡量一个新手和一个高手的差异不是顺风顺水时,而是遇到问题时谁能够快速解决,谁又只能望洋兴叹,相信薪资的差异也体现在此。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot:植物健康监测的智能先锋

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了植物健康系统的开发全过程。通过分析植物健康系统管理的不足,创建了一个计算机管理植物健康系统的方案。文章介绍了植物健康系统的系统分析部分&…

一文带你搞懂RabbitMQ 如何保证消息不丢失

RabbitMQ使用场景: 异步发送(验证码、短信、邮件)MySQL和Redis,ES之间的数据同步分布式事务削峰填谷 什么情况下消息容易丢失: 消息未到达交换机消息未到达队列队列中消息丢失消费者未接收到消息 解决消息丢失的方法…

python查询并安装项目所依赖的所有包

引言 如果需要进行代码的移植,肯定少不了在另一台pc或者服务器上进行环境的搭建,那么首先是要知道在已有的工程的代码中用到了哪些包,此时,如果是用人工去一个一个的代码文件中去查看调用了哪些包,这个工作甚是繁琐。…

js面试问题笔记(一)

一.热门js面试 1.简述同步和异步的区别? 同步: 浏览器访问服务器请求,用户看到页面刷新 ,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作 异步: 浏览器访问服务器请求,用户正常操作,浏览器后端进行请求,等请求完,页面不刷新,新内容也会出现,用户看到…

【HarmonyOS Next】原生沉浸式界面

背景 在实际项目中,为了软件使用整体色调看起来统一,一般顶部和底部的颜色需要铺满整个手机屏幕。因此,这篇帖子是介绍设置的方法,也是应用沉浸式效果。如下图:底部的绿色延伸到上面的状态栏和下面的导航栏 UI 在鸿蒙…

Grid View 网格视图

GoTo DevExpress Data Grid 数据网格 Grid View 网格视图 GridView 是默认的数据网格视图,它以传统的表格格式显示数据。View 将数据源记录呈现为行,将数据源字段呈现为列。数据值显示在各个单元格中。 以下文档包含有关此表格布局的主要元素的深入信…

多线程——线程安全的集合类

目录 前言 一、多线程环境使用 ArrayList 1.进行加锁 2.使用 SynchronizedList 类 3.使用 CopyOnWriteArrayList 类 二、多线程环境使用队列 1.进行加锁 2.使用阻塞队列 三、多线程环境使用哈希表 1.Hashtable 2.ConcurrentHashMap (1)缩小锁…

vue文件转AST,并恢复成vue文件(适用于antdv版本升级)

vue文件转AST,并恢复成vue文件---antdvV3升级V4 vue文件转AST,重新转回原文件过程如何获取项目路径读取项目文件,判断文件类型分别获取vue文件 template js(vue2和vue3)处理vue 文件template部分处理vue script部分uti…

【线下+线上会议|国内外双会场】2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)-悉尼/郑州双会场

2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)-悉尼/郑州双会场 2024 4th International Conference on Digital Society and Intelligent Systems 会议官网:www.dsins.org 2024 4th International Conference on Digital Soc…

龙迅#LT89101 适用于 MIPI DSI/CSI摄像头和 LVDS 中继信号延长功能,分辨率可支持 1080P@60HZ!

1. 描述 Lontium LT89101 是一款高性能 MIPI DSI/CSI-2 和 LVDS 中继器,用于汽车系统应用的移动显示或摄像头信号整形。 LT89101采用先进的 CMOS 工艺制造,并采用小外形 7.5mm x 7.5mm QFN64 封装。该封装符合 RoHS 标准,额定工作温度范围为 …

MySQL8.0.40编译安装

近期MySQL发布了8.0.40版本,与之前的版本相比,部分依赖包发生了变化,因此重新编译一版,也便于大家参考。 1. 下载源码 选择对应的版本、选择源码、操作系统 如果没有登录或者没有MySQL官网账号,可以选择只下载 2. 进…

element 按钮变形 el-button样式异常

什么都没动,element UI的按钮变形了,莫名其妙,连官网的也变形了,换了其它浏览器又正常, 难道这是element UI的问题?NO,是浏览器的插件影响到了!去扩展插件里面一个个关闭扩展&#x…

MySql中的锁的分类

锁的分类 MySQL锁可以按模式分类为:乐观锁与悲观锁。按粒度分可以分为全局锁、表级锁、页级锁、行级锁。按属性可以分为:共享锁、排它锁。按状态分为:意向共享锁、意向排它锁。按算法分为:间隙锁、临键锁、记录锁。 二、全局锁、表…

ClickHouse与各种组件的关系

ClickHouse和其他组件关系如下: Flink支持ClickHouse Sink支持Hive/SparkSQL数据批量导入ClickHouseHetuEngine支持ClickHouse数据源常用第三方工具如DBeaver支持ClickHouse对接ClickHouse依赖ZooKeeper实现了分布式DDL执行以及ReplicatedMergeTree表主备节点之间的…

多线程—— JUC 的常见类

目录 前言 一、Callable 接口 1.Callable 介绍 2.代码示例 3.创建线程的方式 二、ReentrantLock 类 1.ReentrantLock 介绍 2.代码示例 3.与 synchronized 的区别 三、信号量 Semaphore 类 1.Semaphore 介绍 2.代码示例 3.保证线程安全的方式 四、CountDownLatch …

二、Spring的执行流程

文章目录 1. spring的初始化过程1.1 ClassPathXmlApplicationContext的构造方法1.2 refresh方法(核心流程)1.2.1 prepareRefresh() 方法1.2.2 obtainFreshBeanFactory() 方法1.2.3 prepareBeanFactory() 方法1.2.4 invokeBeanFactoryPostProcessors() 方…

(linux驱动学习 - 12). IIC 驱动实验

目录 一.IIC 总线驱动相关结构体与函数 1.i2c_adapter 结构体 2.i2c_algorithm 结构体 3.向系统注册设置好的 i2c_adapter 结构体 - i2c_add_adapter 4.向系统注册设置好的 i2c_adapter 结构体 - i2c_add_numbered_adapter 5.删除 I2C 适配器 - i2c_del_adapter 二.IIC 设…

【C++算法】11.滑动窗口_最大连续1的个数lll

文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: 1004. 最大连续 1 的个数 III 题目描述: 解法 解法一:暴力枚举zero计数器 转化找出最长的子数组,0的个数不超过k个。 例如&#xf…

计算机网络——有连接传输层协议TCP

序号 序号一般不从0开始,这个在双方建立连接后约定一个数 这样做可以避免网络中滞留的TCP段对新的连接的干扰

Flutter状态管理

StatefulWidget按状态划分StatelessWidgetStatefulWidget 按照作用域划分组件内私有状态实现跨组件状态管理全局状态 状态组件的组成 DataTableInheritedWidget生命周期无状态组件有状态组件initState()didChangeDependencies()build()setState()didUpdateWidget()deactivate()…