编码效率翻倍的 Intellij IDEA 使用技巧
疫情期间宅在屋子里捣鼓了各种东西。最近又把IDEA好好的学习了下,毕竟是吃饭的家伙。工欲善其事必先利其器嘛!
学习路径:
-
推荐看慕课网 闪电侠的免费课程《 IntelliJ IDEA神器使用技巧》,大约两个小时的课程,边看边用IDEA,将近花了1天的时间。感觉我的宝剑开锋了,剩下的就是熟练掌握,绝对是工作上的一大利器。
-
Intellij Idea使用教程汇总篇 非常全面的教程汇总,先收藏了!
IDEA 菜单介绍
菜单名称 | 含义 |
---|---|
File | 项目的创建,以及该软件的设置,导入导出,配置路径等; |
Edit | 编辑,文件文本编辑操作 |
View | 视图,是你视野中能够看到窗口 |
Navigate | 导航,在项目工程中跳转,快速找到方法 |
Code | 源码文件进行操作 |
Analyze | 源码进行分析,看类与类的依赖关系 |
Refactor | 快捷操作:比如抽取静态类,抽取函数,抽取抽象方法 |
Build | 构建,编译工程 |
Run | 运行,调试 |
Tools | 提供一些工具,插件设置等 |
CVS | 版本控制,GIT,SVN |
Window | 窗口,切换工程 |
Help | 帮助 |
很多时候不知道快捷键,如果知道在哪个菜单中,那么点开菜单,按钮后面就有快捷键写着的。
Live Templates
何谓 Live Templates
?翻译过来就是动态模版,根据你定义好的模版,只要打出快捷缩写,就能生成你预设好的代码。
实际效果如下:
[图片上传失败...(image-9566ff-1583113941949)]
- Settings > Editor > Live Templates 下设置:

注释模版
我的注释模版提示用的是des,在实际使用的使用先敲一个/
,然后打上des就可以弹出注释内容。
注意,代码中是以**
星号开头的,/
斜杠不能写到代码中,否则在实际使用中参数会无法加载出来- 具体参数设置看下图
在这里插入图片描述
其中params
用脚本解析
groovyScript("if(\"${_1}\".length() == 2) {return '';} else {def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();for(i = 0; i < params.size(); i++) {if(i<(params.size()-1)){result+=' * @Param ' + params[i] + ' : ' + '\\n'}else{result+=' * @Param ' + params[i] + ' : '}}; return result;}", methodParameters());
分别复制下面3个注释模版,然后去 Live Templates 中粘贴即可。操作看动图!!非常方便有木有
由于我的3个注释模版缩写都是一样的,需要分别复制到不同的组中,下面的属性模版
和打印模版
可以直接一块复制粘贴即可。

/*(详细注释,包含参数,返回值)*/
<template name="des" value="** * @Description $params$ * @Return $returns$ * @Author $user$ * @Date $date$ $time$ */" description="详细注释,包含参数,返回值" toReformat="true" toShortenFQNames="true">
<variable name="params" expression="" defaultValue="groovyScript("if(\"${_1}\".length() == 2) {return '';} else {def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();for(i = 0; i < params.size(); i++) {if(i<(params.size()-1)){result+=' * @Param ' + params[i] + ' : ' + '\\n'}else{result+=' * @Param ' + params[i] + ' : '}}; return result;}", methodParameters()); " alwaysStopAt="true" />
<variable name="returns" expression="methodReturnType()" defaultValue="" alwaysStopAt="true" />
<variable name="user" expression="user()" defaultValue="" alwaysStopAt="true" />
<variable name="date" expression="date()" defaultValue="" alwaysStopAt="true" />
<variable name="time" expression="time()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="OTHER" value="true" />
</context>
</template>
/*只需要粘贴以下即可(简单注释,无参无返回)*/
<template name="des" value="** * @Description * @Author $user$ * @Date $date$ $time$ */" description="简单注释,无参无返回" toReformat="true" toShortenFQNames="true">
<variable name="user" expression="user()" defaultValue="" alwaysStopAt="true" />
<variable name="date" expression="date()" defaultValue="" alwaysStopAt="true" />
<variable name="time" expression="time()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="OTHER" value="true" />
</context>
</template>
/*只需要粘贴以下即可(空白注释)*/
<template name="des" value="** * $END$ */" description="空白注释" toReformat="true" toShortenFQNames="true">
<context>
<option name="OTHER" value="true" />
</context>
</template>
打印模版
-
System.out.
的模版是内置就有的,在Live Templates
中找一下即可,下面是经过我的一些加工。 -
$var1$
指的是当代码出现后光标会停留在此处,直接敲键盘就能输入你的内容,回车后光标移动到下一个var2
中。
$END$
的含义是,当你结束所有的var
参数后,光标停留在此处。
<template name="sout" value="System.out.println($var1$); $END$" description="System.out.println" toReformat="true" toShortenFQNames="true">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="soutm" value="System.out.println("$CLASS_NAME$.$METHOD_NAME$"); $END$" description="输出类名和方法名" toReformat="true" toShortenFQNames="true">
<variable name="CLASS_NAME" expression="className()" defaultValue="" alwaysStopAt="false" />
<variable name="METHOD_NAME" expression="methodName()" defaultValue="" alwaysStopAt="false" />
<context>
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="soutp" value="System.out.println($FORMAT$); $END$" description="输出方法参数" toReformat="true" toShortenFQNames="true">
<variable name="FORMAT" expression="groovyScript("import com.intellij.psi.*;import com.intellij.psi.util.PsiTreeUtil; def file = PsiDocumentManager.getInstance(_editor.project).getPsiFile(_editor.document); PsiMethod method = PsiTreeUtil.findElementOfClassAtOffset(file, _editor.caretModel.offset, PsiMethod.class, false); PsiParameter[] parameters = method == null ? PsiParameter.EMPTY_ARRAY : method.parameterList.parameters; return parameters.size() == 0 ? '' : '\"' + parameters.collect { def prefix = it.name + ' = '; def type = it.type; return type instanceof PsiArrayType ? type.componentType instanceof PsiPrimitiveType ? prefix + '\" + java.util.Arrays.toString(' + it.name + ')' : prefix + '\" + java.util.Arrays.deepToString(' + it.name + ')' : prefix + '\" + ' + it.name }.join(' + \", ')", methodParameters())" defaultValue="" alwaysStopAt="false" />
<context>
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="soutv" value="System.out.println("$EXPR_COPY$ = " + $EXPR$); $END$" description="输出变量" toReformat="true" toShortenFQNames="true">
<variable name="EXPR" expression="variableOfType("")" defaultValue=""expr"" alwaysStopAt="true" />
<variable name="EXPR_COPY" expression="escapeString(EXPR)" defaultValue="" alwaysStopAt="false" />
<context>
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
属性模版
操作和上面一样,复制粘贴即可~~~
<template name="li" value="List<$var1$> $var2$ = new ArrayList<$var3$>();" description="ArrayList" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="var2" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="var3" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="GROOVY_STATEMENT" value="true" />
<option name="JAVA_DECLARATION" value="true" />
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="pri" value="private int $var1$;" description="private int" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="GROOVY_STATEMENT" value="true" />
<option name="JAVA_DECLARATION" value="true" />
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="pric" value="/** * $var1$ */ private int $var2$; $END$" description="private int 带注释" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="var2" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="GROOVY_STATEMENT" value="true" />
<option name="JAVA_DECLARATION" value="true" />
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="prs" value="private String $var1$;" description="private String" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="GROOVY_STATEMENT" value="true" />
<option name="JAVA_DECLARATION" value="true" />
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="prsc" value="/** * $var1$ */ private String $var2$; $END$" description="private String 带注释" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="var2" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="GROOVY_STATEMENT" value="true" />
<option name="JAVA_DECLARATION" value="true" />
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="psfi" value="public static final int $var1$ = $var2$;" description="public static final int" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="var2" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="psfs" value="public static final String $var1$ = $var2$;" description="public static final String" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="var2" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="pui" value="public int $var1$;" description="public int" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="GROOVY_STATEMENT" value="true" />
<option name="JAVA_DECLARATION" value="true" />
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="pus" value="public String $var1$;" description="public String" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="GROOVY_STATEMENT" value="true" />
<option name="JAVA_DECLARATION" value="true" />
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="st" value="String $var1$ = $var2$;" description="String" toReformat="false" toShortenFQNames="false">
<variable name="var1" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="var2" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="GROOVY_DECLARATION" value="true" />
<option name="GROOVY_STATEMENT" value="true" />
<option name="JAVA_DECLARATION" value="true" />
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
Postfix Completion
和 Live Templates
类似,同样会自动生成代码。不同的是,Postfix Completion
是 IDEA
内置的,不可修改编辑的。
实际使用的效果如下:

- Settings > Editor > General >Postfix Completion 下设置
这个其实没啥好说的,常用的主要有
for
,fori
,forr
,iter
,field
,nn
等等。
具体的用法可以看下说明,多查一查用一用。知道有这么一个东西就行啦~~~
收藏、书签功能
-
ALT + 2
调出 IDEA 收藏夹。在代码左侧右键Set Bookmarks
即可对当前行代码设置书签。 - Set bookmark with mnemonic 给标签设置序号,之后可以直接输入
Ctrl + 序号
跳转对应的标签,对于阅读源码有很大的帮助哦。
- Add to Favorites (
Alt+Shift+F
) 添加到收藏夹,是指对当前文件收藏。对于写的比较好,或者打算回头细读的代码做收藏。
调试
调试代码平时是我们使用最多的一个功能了。但下面两点个功能你知道吗?
-
条件断点
一般用于循环,判断中,当满足设定的值,才进入断点
在这里插入图片描述
-
改变调试值(SetValue)
调试过程中修改变量的值
在这里插入图片描述
Git
Git我们的版本控制工具,平时小伙伴用的特别多吧。这里还有个小功能你知道吗?
结构图
简直是阅读代码的一大利器!!这个功能使用得当,会让你阅读框架源码得心应手。
-
查看当前类 Field Method大纲
Navigae -> File Structure 快捷键因人而异,我用的是Eclipse的快捷键所以是Ctrl+F3/Ctrl+O
-
查看maven、类图、依赖
选中类/pom.xml 右键 > Show Diagram / Show Dependencies 快捷键(Ctrl+Alt+shift+U
)
Mave依赖图
在这里插入图片描述
类的依赖图
实线箭头是指继承关系,虚线箭头是指接口实现关系
在这里插入图片描述
-
查看类方法调用层次
Navigae -> Call Hierarchy (Ctrl+Alt+H
)查看方法被哪些调用以及调用了哪些,用来查看调用层次
在这里插入图片描述
-
查看类的结构体
进入某个类后,如果还想快速地查看该类的其他方法,还可以利用IDEA提供的structure功能,快捷键Alt+7
在这里插入图片描述
掌握好以上几个结构图的使用,那么查看源码,了解框架还不手到擒来??
插件推荐
-
Key promoterX ★★★★★
快捷键提示插件,多次用鼠标点击某个功能,右下角会提示快捷键 -
Statistic ★★★★
统计工程中代码行数 -
JRebel Plugin ★★★★
热部署插件,IDEA每次改了代码需要重启才能生效。但据说这个软件收费,如何破解自行百度。