编码效率翻倍的 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 下设置:
截屏.gif

注释模版

  1. 我的注释模版提示用的是des,在实际使用的使用先敲一个/ ,然后打上des就可以弹出注释内容。
    注意,代码中是以**星号开头的, / 斜杠不能写到代码中,否则在实际使用中参数会无法加载出来
  2. 具体参数设置看下图
    在这里插入图片描述

    其中 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="**&#10; * @Description &#10;$params$&#10; * @Return $returns$&#10; * @Author $user$&#10; * @Date $date$ $time$&#10; */" description="详细注释,包含参数,返回值" toReformat="true" toShortenFQNames="true">
  <variable name="params" expression="" defaultValue="groovyScript(&quot;if(\&quot;${_1}\&quot;.length() == 2) {return '';} else {def result=''; def params=\&quot;${_1}\&quot;.replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();for(i = 0; i &lt; params.size(); i++) {if(i&lt;(params.size()-1)){result+=' * @Param ' + params[i] + ' : ' + '\\n'}else{result+=' * @Param ' + params[i] + ' : '}}; return result;}&quot;, 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="**&#10; * @Description &#10; * @Author $user$&#10; * @Date $date$ $time$&#10; */" 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="**&#10; * $END$&#10; */" description="空白注释" toReformat="true" toShortenFQNames="true">
  <context>
    <option name="OTHER" value="true" />
  </context>
</template>

打印模版

  1. System.out. 的模版是内置就有的,在Live Templates中找一下即可,下面是经过我的一些加工。
  2. $var1$ 指的是当代码出现后光标会停留在此处,直接敲键盘就能输入你的内容,回车后光标移动到下一个 var2 中。
    $END$ 的含义是,当你结束所有的 var 参数后,光标停留在此处。
<template name="sout" value="System.out.println($var1$);&#10;&#10;$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(&quot;$CLASS_NAME$.$METHOD_NAME$&quot;);&#10;&#10;$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$);&#10;&#10;$END$" description="输出方法参数" toReformat="true" toShortenFQNames="true">
  <variable name="FORMAT" expression="groovyScript(&quot;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 ? '' : '\&quot;' + parameters.collect { def prefix = it.name + ' = '; def type = it.type; return type instanceof PsiArrayType ? type.componentType instanceof PsiPrimitiveType ? prefix + '\&quot; + java.util.Arrays.toString(' + it.name + ')' : prefix + '\&quot; + java.util.Arrays.deepToString(' + it.name + ')' : prefix + '\&quot; + ' + it.name }.join(' + \&quot;, ')&quot;, methodParameters())" defaultValue="" alwaysStopAt="false" />
  <context>
    <option name="JAVA_STATEMENT" value="true" />
  </context>
</template>
<template name="soutv" value="System.out.println(&quot;$EXPR_COPY$ = &quot; + $EXPR$);&#10;&#10;$END$" description="输出变量" toReformat="true" toShortenFQNames="true">
  <variable name="EXPR" expression="variableOfType(&quot;&quot;)" defaultValue="&quot;expr&quot;" 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&lt;$var1$&gt; $var2$ = new ArrayList&lt;$var3$&gt;();" 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="/**&#10; * $var1$&#10; */&#10;private int $var2$;&#10;&#10;$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="/**&#10; * $var1$&#10; */&#10;private String $var2$;&#10;&#10;$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 CompletionIDEA 内置的,不可修改编辑的。

实际使用的效果如下:


在这里插入图片描述
  • 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每次改了代码需要重启才能生效。但据说这个软件收费,如何破解自行百度。