详细介绍idea开发工具及使用技巧
1. 2023版安装
1.1删除老版本
如果以前装有idea需要先删除,以避免冲突,在idea安装目录/bin/Uninstall.exe双击
1.2 下载及安装
最新版本
https://www.jetbrains.com/idea/download/?section=windows
历史版本
https://www.jetbrains.com/idea/download/other.html
注意:一定要下载旗舰版
卸载老版本 IDEA 完成后,双击刚刚下载好的 IDEA 2023.3 版本安装包。弹框会提示选择安装路径,
, 然后点击 Next 按钮:
IDEA 运行成功后,会弹出如下对号框,强制用户需要先登录 JetBrains 账户才能使用,点击退出
1.3 新建演示工程
未来配置相关的信息,我们必须新建一个工程进入,选择一个最基础的java工程,如图
2.常见配置
我们创建一个工程后,就可以File->Setting配置Idea的常见属性
2.1窗体外观和UI设置
2.1.1Appearance 外观
这里外观指的是idea窗口和按钮相关,不涉及到到编辑内容区
2.1.2 New UI 2023新外观
2023新增一个UI模式,默认选中,取消重启后回到经典模式
2.2内容区的字体和大小
在Appearance里调整的窗体的字体大小等,内容编辑区的字体和大小需要在Font里配置,
File | Settings | Editor | Font
编辑区的字体动态大小
我们可以设置动态调整编辑区字体大小
File | Settings | Editor | General
勾选后,我们在内容区,可以按住Ctrl+鼠标滚轮进行动态的放大和缩小
2.3编码设置UTF-8
我们一般采用utf-8编码
File | Settings | Editor | File Encodings
2.4编辑标识*设置
idea2023内容区编辑后,系统是自动保存的,默认没有任何提示,可能有些用户不习惯,可以设置,正操作未保存的内容区有个圆点,表示正在编辑
File | Settings | Editor | General | Editor Tabs
2.5方法参数补全
默认情况下,idea是不启用参数补全的(节约性能),这个在我们调用是不是很智能。
File | Settings | Editor | General | Code Completion
效果
还有水印提示,这样就很智能了
2.6 本地maven配置
File | Settings | Build, Execution, Deployment | Build Tools | Maven
2.7 新建项目配置复用
1.idea主题、字体这些,一次配置后,以后新增项目都有效
2.编码、maven、工具这些,新建项目时依然要配置
1.utf-8编码:File | Settings | Editor | File Encodings
2.自动编译:File | Settings | Build, Execution, Deployment | Compiler
3.自动导包:File | Settings | Other Settings | Auto Import
4.git配置:File | Settings | Version Control | Git
5.maven配置:File | Settings | Build, Execution, Deployment | Build Tools | Maven
setting:当前项目配置
new projects Setup|Setting for new Project :新建项目配置,和setting配置一样
进入后,可把maven和utf-8配置了
2.8文件生成模板
我们创建各种文件,都有对应模板,可以修改,最常见的是类的注释
File | Settings | Editor | File and Code Templates
2.8.1 修改模板
比如我们给类加上注释
输入:
/**
*@class: ${PACKAGE_NAME}.${NAME}
*@description: ${description}
*@author: jiangzengkui
*@company: 教育家
*@create: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE}
*/
生成类的注释
/**
* @class: com.jsoft.example.X
* @description:
* @author: jiangzengkui
* @company: 教育家
* @create: 2023-12-15 12:32
*/
2.8.2 新增模板
我们新增一个mybatis的后缀模板
我们点击新增文件,模板名称就出现了
2.9 自动导包
我们在粘贴复制代码时,所使用导的其他地方的类,可以自动导入
File | Settings | Editor | General | Auto Import
都勾选上
Add unambiguous imports on the fly:自动导入不明确的结构 Optimize imports on the
fly:自动帮我们优化导入的包
2.10 导出导入配置
我们配置好的内容,可以保存下来,到其他地方使用,也可以导入,导出的是一个压缩包settings.zip
3. 使用技巧
idea是一款高智能化的开发工具,很多技巧能提升开发效率
3.1 查看类图
把光标放置对应类上,右键,选择Diagrams-Show Diagram
可以查看这个类及互相依赖的类的UML类图
3.2关闭升级
如果比较习惯这个版本,可以关闭版本升级提示
3.3 常用快捷键
idea里面非常多的快捷键,详细的可参考相关指南,个人觉得重要的列举入下
3.3.1 显示类属性和方法 ALT+7
场景:一个类的方法太多,想看到所有方法和属性,利于我们更快了解类的方法和属性
3.3.2 代码注释ctrl + /
选中要注释的代码,执行以下操作
单行注释 ctrl + /
多行注释 ctrl + shift + /
// System.out.println("ffff");// System.out.println("ffff");/*System.out.println("aa");
System.out.println("aa");*/}
3.3.3 查看源码CTRL+dbclick
我们要看一个类的源码,有两种情况:
1.代码里已经有类,则按住ctrl+点击这个类
2.我们知道类名或者部分类名,trl + shift + t
这个可以用于查找jdk的源码和自己写的文件
3.3.4 查找CTRL+F
在工具条:Edit->find
Ctrl+F是在本页查找,Ctrl+Shift+F是全局查找
3.3.5 查看类的继承关系 CTRL+H
在具体类里,或者光标放到到一个类名上
3.3.6 查找类或者文件 CTRL+N
已知道某个类或者文件的名称(部分名称),查找这个类或者文件
3.3.7 代码格式化Ctrl + Alt + L
或者菜单:code|Refmact code
打开最近关闭的文件
3.3.8 打开最近关闭的文件Ctrl + E
我们操作了很多文件又关闭了,从包里找太麻烦,就把最近打开的文件调出来
3.3.9 参数提示 Ctrl + P
忘记方法的参数了,直接Ctrl+p
3.3.10 展开关闭左边菜单 Alt+1
为突出编辑区,可alt+1折叠左边菜单
3.3.11 查找类被哪些调用过 Alt+F7
在类里直接alt+f7,或把光标放置到类名上alt+f7,可以查询出这个类被哪些类调用过
3.3.12 万能快捷键 Alt+Enter
Alt+Enter属于万能快捷键,在很多场景都有应用,在不知道怎么办时,不妨试试整个快捷键组合
1.接口实现类
把光标放置在接口名上,Alt+Enter,可快速生成实现类
2…接口跳转到实现类
把光标放置在接口名上,Alt+Enter
- 捕捉异常
4.自动导包
3.4后缀补全 Postfix Completion
我们在一个变量直接输入一下后缀,便可以生成相关代码
配置项:
File | Settings | Editor | General | Postfix Completion
.var声明一个变量. sout打印一个变量.fori正循环一个数组,带索引.forr倒循环一个数组,,带索引.forfor(String s:sz),不用索引的循环,可用于数组\list.iter和.for效果一样.null生成if(xx==null) {}.nn生成if(xx!=null) {}.ifx>10.if 生成if(x>10){}
写一个代码,声明基本变量,对象,数组、list变量,尝试一下即知道效果了
3.5缩写模板-Live Templates
缩写快捷方式能提升编码效率,可以用已有的,也可自定义
模板可以在两个地方定义
1.Editor – Live Templates 和
3.5.1 已有缩写
缩写生成代码soutSystem.out.println();mainpublic static void main(String[] args) {};iterfor (Integer i : list) {}; 和后缀补全效果一样x.iter,容易混淆ifnif (list == null) {}; 和后缀补全效果一样x.null,容易混淆innif (list != null) {}; 和后缀补全效果一样x.nn,容易混淆
配置:File | Settings | Editor | Live Templates
3.5.2 自定义缩写模板
可以自定义缩写模板,把我们日常用到比较多的粘贴复制等做成缩写
1.可以先新增一个分组,存放自己写的方法
2.选中一个分组,点击新增一个模板
3.填写模板内容
注意:$变量名$,如果没有表达式,就是光标所在地,点击回车到第二个变量
我们下面写几个自定义模板
(1)map遍历
Abbreviation:maplist
Description:生成map的遍历
Template tex:
for(String key : $VAR1$.keySet()){
$VAR2$ value = map.get(key);//map值
$EDN$
}
(2)定义字符串变量
Abbreviation:vars
Description:声明字符串变量
Template tex:
privateString $VAR1$;//$VAR2$
$END$
(3)测试方法
Abbreviation:test
Description:test测试方法
Template tex:
@Testpublicvoid test$VAR1$(){
$END$
}
(3)优化方法注释
Abbreviation:*Description:优化函数注释
Template tex:注意不是/**,这样读不出表达式数据出来
**
* @Description: $description$
* @Create:$Date$ $Time$
* @Param: $param$
* @Return: $return$
*/
注意:这里必须用*,Expand with:enter
其变量表达式如下:
3.5.2 缩写模板live template和后缀补全的区别
很多效果是一样吗,如null 迭代,但写法不一样,
缩写就是输入说些,后缀补全是在对象后面加.+后缀
3.6 取消单行显示 tabs 的操作
默认打开文件过多,只显示一行,其他省略
可以设置为多行,不隐藏
效果如图:
4. idea工程项目
4.1 项目Project 和modul的理解
在 Eclipse 中我们有 Workspace(工作空间)和 Project(工程)的概念,在 IDEA
中只有 Project(工程)和 Module(模块)的概念。这里的对应关系为:
Eclipse 中 workspace 相当于 IDEA 中的 Project
Eclipse 中 Project 相当于 IDEA 中的 Module
2.在 IntelliJ IDEA 中 Project 是最顶级的级别,次级别是 Module。一个 Project
可以有多个 Module。目前主流的大型项目都是分布式部署的,结构都是类似这种多 Module 结构
这类项目一般是这样划分的,比如:core Module、web Module、plugin Module、solr Module 等等,模块之间彼此可以相互依赖。通过这些 Module 的命名也可以看出,他们之间都是处于同一个项目业务下的模块,彼此之间是有不可分割的业务关系的
3.相比较于多 Module 项目,小项目就无需搞得这么复杂。只有一个 Module 的结构 IntelliJ IDEA 也是支持的,并且 IntelliJ IDEA 创建项目的时候,默认就是单Module 的结构的
DEA有两个概念,一个是Project(工程),一个是Module(模块)。
其中,一个模块相当于MyEclipse中的一个项目,也就是一个包。而一个工程就是由多个包组成的整体。在IDEA中,并没有对Project和Module进行强关联和强约束。主要起到一个项目定义、范围约束、规范类型的效果。
比如,我接了一个供方系统的工程,这个工程有一个前端的项目包,一个后端的项目包,也就是两个模块。那么我就会建一个文件夹叫做supplier(供方系统),然后把前后端的两个项目包都放在这个文件夹中。项目包就叫模块,整个文件夹就表示一个工程。
通过上面的介绍,我们知道:在 IntelliJ IDEA 中Project是最顶级的结构单元,然后就是Module,一个Project可以有多个Module。目前,主流的大型项目结构基本都是多Module的结构,这类项目一般是按功能划分的,比如:user-core-module、user-facade-module和user-hessian-module等等,模块之间彼此可以相互依赖。通过这些Module的命名可以看出,它们都是处于同一个项目中的模块,彼此之间是有着不可分割的业务关系的。
因此,我们可以大致总结出:一个Project是由一个或多个Module组成,尽量让各模块处于同一项目之中,此时彼此之间具有互相依赖的关联关系。在这里,之所以说“尽量”,是因为 IntelliJ IDEA 的Project是一个没有具备任何编码设置、构建等开发功能的,主要起到一个项目定义、范围约束、规范类型的效果,或许,我们也可以简单地理解Project就是一个单纯的目录,只是这个目录在命名上必须有其代表性的意义。在一般情况下,IntelliJ IDEA 是默认单Project单Module的,这时Project和Module合二为一,在没有修改存储路径的时候,显然Project对Module具有强约束作用啦!不过说实话,这里就是将Module的内容放在了Project的目录下,实际上还是Module自己约束自己。
4.2 Project Structure理解
File|Project Structure是项目工程的框架结构
4.2.1 左边面板结构
4.2.2 项目信息
4.2.2Modules信息
4.2.3 lib信息Libraries
4.2.4 Facets
发布的web项目的web.xml
4.2.5 打包方式artifacts
4.3创建空项目
空项目没有任何东西,可以理解成一个文件夹
4.4创建新工程
4.4.1 maven工程
我们选择创建maven工程
这里重点是Build system:Itellij就是不带构建工具的普通java工程
生成maven工程后,可以按照maven的框架来构建代码,具体maven知识请参考mave知识讲解
4.4.2 web工程
虽然 目前都采用前后端分离技术,但老的项目依然在用
选择je22和servlet
工程结构
查看pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jsoft</groupId><artifactId>idea_web</artifactId><version>1.0-SNAPSHOT</version><name>idea_web</name><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.source>1.8</maven.compiler.source><junit.version>5.9.2</junit.version></properties><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.2</version></plugin></plugins></build></project>
配置tomcat
配置tomcat路径和端口
部署
4.4.2 springboot工程
选择springboot版本及依赖功能
springboot工程结构
运营启动类,项目启动成功即可
5.插件
插件通过 File | Settings | Plugins来管理的,优秀的插件能提升开发效率,下面介绍几个常用的插件
5.1 lombok插件
lombok是一个简写vo的get set 构造函数的第三方库,idea2023已经默认下载安装了lombok插件,spring也集成了lombok
pom
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency>
lombok注解
注册语法说明@NonNullnull检查,如果是null,抛出异常,表述在变量前@Data自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor,标注在类名上@NoArgsConstructor生成无参构造函数,标注在类名上@AllArgsConstructor生成全参构造函数,标注在类名上@Getter @Setter生成get set,标注在属性上,
eg:@Getter @Setter private int age;
@Data@NoArgsConstructor@AllArgsConstructorpublicclassUser{privateString id;privateString name;publicvoidtest(@NonNullUser user){}}
5.2 翻译插件-Translation
市场输入Translation
翻译:
选中内容,右键选中Translation
5.3正则表达式-any-rule插件
插件市场输入any-rule
在内容区右键
默认从开头对比到结尾,删除红框中的内容,/^表示开头,$/表示结尾。
将单斜杠改为双斜杠
//默认从开头对比到结尾,删除红框中的内容,/^表示开头,$/表示结尾。String regExp="/^\d{15,17}$/";//将单斜杠改为双斜杠
regExp="\\d{15,17}";
5.4 序列化ID插件-erialVersionUID
市场输入generateSerial
创建一个类,实现Serializable接口
右键,选择Generate,选择SerialVersionUID,则生成id
publicclassPersonimplementsSerializable{privatestaticfinallong serialVersionUID =-5037059499277861230L;}
5.5 类时序图插件-sequenceDiagram
生成类的时序图
光标置于方法上,右键
5.6 数据库插件
idea2023已经已经集成了数据库插件
配置数据库连接和下载驱动程序
就可以对表进行查询及操作了
5.7 mybatis插件 -Free MyBatis Tool
市场输入Free MyBatis Tool
生成mapper xml文件
快速从代码跳转到mapper及从mapper返回代码
mybatis自动补全及语法错误提示
集成mybatis generator gui界面
根据数据库注解,生成swagger model注
可以点击绿色小箭头,在mapper.java和xml对应切换,非常方便
5.8接口查询-RestfulTool
前端的请求路径,不用一个个的controller里找了,直接 Ctrl + Alt + /就可以帮助我们精确定位!
提供了一个 Services tree 的显示窗口
双击 URL 直接跳转到对应的方法定义
一个简单的 http 请求工具
支持 Spring 体系 (Spring MVC / Spring Boot)
支持 JAX-RS
支持Navigate -> Request Service
搜索 Mapping (Ctrl + Alt + /)
5.9 json自动转vo类-GsonFormat
Web 应用中大量使用 RESTful API,而 API 中又大量使用 JSON 数据格式。每次将 JSON 格式的数据对应编写为实体类,并依次定义属性,是一个非常痛苦的事情。
类里右键,选择Generate
把json粘贴进入
6.idea调试
修改程序问题是程序员的日常工作,有程序员喜欢用打印数据的模式跟踪,这种模式是非常低效的,擅长IDEA的调试模式,能更容易跟踪并发现问题。
6.1启动调试模式
单独java类测试,右键选择调试模式
tomcat调试,选择爬虫图标
6.2基础调试介绍
测试代码
packagecom.example.newweb;importjava.util.ArrayList;importjava.util.List;/**
* @class: com.example.newweb.Person
* @description:
* @author: jiangzengkui
* @company: 教育家
* @create: 2023-12-20 18:11
*/publicclassPerson{publicstaticvoidmain(String[] args){System.out.println("main");Person person =newPerson();
person.t();}publicvoidt(){System.out.println("t-1111");String s1="1";List<String> list=newArrayList<>();
list.add("t-1");
list.add("t-2");dd();String s2="t-2";System.out.println("t-2222");}publicvoiddd(){List<String> list=newArrayList<>();
list.add("dd-1");
list.add("dd-2");System.out.println("dd3");}}
1.在左侧要调试暂停的地方点击一下,标注最常用的行断点,如图
2.启动调试模式
点击debug,启动
3.调试面板介绍
点击启动调式后,代码将跳转到打了断点的行上,并展示调试面板
(1)调试按钮
最重要的三个调试按钮
step over
点击此按钮,或者F8,就是一行一行往下执行,右边变量展示区展示每步骤变量的变化step into
这按钮是进入子方法的意思,一般应用场景是,方法里子方法,如果我们不想跟踪这个子方法的内部执行,则点击Step over,如果要进入这个子方法,则点击此按钮,进入此子程序,比如jdk自带的方法,我们就不执行,我们自己写的程序就step into
step out
跳出子方法
其他方法
resume program
恢复程序运行,但如果该断点下面还有断点,则停在下一个断点上。stop
停止所有断点调试,执行程序。return
返回到第一个断点view breakpoints
查看所有断点mute breakpoints
所有断点失效
变量跟踪区
调试内容的展示区,可跟踪变量的变化情况
在代码编辑区也有提示水印
6.3高级调试技巧
6.3.1方法断点
功能:在方法入口(entry)和出口(exit)都会自动暂停。在方法入口暂停可以让我们从头调试整个方法,而在方法出口处暂停可以让我们看到方法执行完毕时,方法内各个变量的数据情况。
一个比较好的应用场景
有时候我们的一个接口会存在很多实现类,我们短时间内难以分析究竟是运行到了哪个实现类中,这个时候就可以使用方法断点,我们将断点打在接口方法上,运行到该方法时,会自动跳到实际执行的实现类,无需通过上下文环境去分析是哪个实现类。
例如:
publicinterfaceAnimal{voidt();}publicclassPersonimplementsAnimal{publicstaticvoidmain(String[] args){System.out.println("main");Person person =newPerson();
person.t();}publicvoidt(){System.out.println("t-1111");String s1="1";List<String> list=newArrayList<>();
list.add("t-1");
list.add("t-2");}}
6.3.2 字段断点
在字段左侧点击,增加字段断点,默认修改这个字段的值时,形成断点暂停,便于我们观察
断点上点击右键即弹出下图可匹配
6.3.3 debug调试条件设置
比如在循环遍历中,我们不需要那么多循环遍历,可以修改遍历的条件,只把预期想执行的循环来调试,则可以设置条件
例如:
这里我们要调试循环,这么多循环是我们不需要的,我们只想观察count=9时候的调试,则在调试图标上右键,输入count==9即可,如果是大于则设置count>9
如果是字符串,则用字符串变量.equasl(预期值)
如:
6.3.4 Stream 调试(Trace Current Stream Chain)
我们跟踪Stream时,可以设置
功能:当我们暂停在 Stream 的处理代码行时,可以将 Stream 的整个处理流程以图形化界面的形式展示。
6.3.5 表达式设置
我们可以修改一些值,改变程序的运行逻辑,比如:
我们正常程序可能很难获得id小于0的数据,就无法测试分支else,那我们可以手动改变他
。启动调试(必须启动),在调试栏点击…,弹出
把变量id=0,在真实情况下可以修改任何对象、变量的值
再比如:
我们可以修改对象的值
修改后的效果,测试对象的值就改变了:
6.4 远程调试
功能:调试部署在远程服务器上的代码。
远程调试最常见的使用场景是排查线上问题,下面举个例子。
有一个用户(userId=8888)请求某个接口会出现异常,但是其他用户是正常的,包括我们的各种测试账号
此时我们可以使用测试账号(userId=1222),在预发布环境向该接口发起请求,并且我们会通过远程 Debug 在接口入口处拦截住该请求,然后我们通过执行表达式功能,将userId从1222修改为8888,则接下来我们就可以模拟出现问题的用户来调试整个接口了,从而帮助我们快速定位到问题。
注意:使用远程Debug的环境必须不能对外网访问,否则可能存在安全隐患。
6.4.1配置远程调试
6.4.2启动服务
以springboot为例子,启动服务,把配置的参数带上
如:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005-jar java-study-demo-0.0.1-SNAPSHOT.jar
启动后效果:
就可以利用本地代码做远程调试了
版权归原作者 蒋增奎 所有, 如有侵权,请联系我们删除。