Java开发神器IDEA使用技巧

本片文章所用idea的版本是2019.2.1系统是Windows,其他版本的配置可能会有稍许差别,但大多都差不多,Mac的配置也与此类似

1.注释

1.1class注释

File-settings-Editor-File and Code Templates

默认是这样的

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
public class ${NAME} {
}

我们只需修改File Header里面的内容,那么class、Interface和Enum里面的内容也会随之改变

点击includes 然后点击File Header,加入以下内容

/**
​
*@description 
​
*@author ${USER}
​
*@date ${YEAR}-${MONTH}-${DAY} ${TIME}
​
*@version v1.0
​
**/

 

1.2方法注释

File-settings-Editor-Live Templates

点击+,新建一个template group

然后点击这个group,在下面点击live template创建模板

在Abbreviation里面填写需要触发快捷操作的键,这里填写m,然后在Description里面填写描述:方法注释

在Template text中填写具体的模板内容,$END$表示光标停留的位置

**
 * $END$
 * @author $user$
 * @date $date$ $param$
 * @throws Exception    
 * @return
 **/
​

然后为变量关联表达式,点击 EDIT VARIABLES

在 user的Expression中填写 user()

在date的Expression中填写 date("yyyy-MM-dd HH:mm:ss")

在param的Expression中填写

groovyScript("if(\"${_1}\".length() == 2) {return '';} else {def result='\\n'; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {result+=' * @param ' + params[i] + ((i < params.size() - 1) ? '\\n' : '')}; return result}", methodParameters())
​

或者在DefaultValue中填写

groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {result+=' * @param ' + params[i] + ((i < params.size() - 1) ? '\\n':'')}; return result", methodParameters())groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {result+=' * @param ' + params[i] + ((i < params.size() - 1) ? '\\n':'')}; return result", methodParameters())

点击Define,选择java,选择触发快捷操作的方式,在Options的Expand width选择Space。

然后再方法上面 输入 /m 然后按空格键就可以生成注释了。

1.3字段注释

同样在新建一个template,在Abbreviation里面填写 *,然后在Description里面填写描述:字段注释,

在Template text中填写具体的模板内容

**
* $END$
**/

在定义的字段上面输入 /*就可以生成注释了

2.模板快捷生成

这里还是在template中新建template进行操作

2.1.成员变量快速定义

$VAR1$表示生产代码后光标第一次停留的位置,$VAR2$表示第一个输入完成之后跳转的位置,依次类推

ps

/**
 * $VAR1$
 * */
private String $VAR2$;
​
$VAR3$

pi

/**
 * $VAR1$
 * */
private Integer $VAR2$;
​
$VAR3$

po

/**
 * $VAR1$
 * */
private Object $VAR2$;
​
$VAR3$

pf

/**
 * $VAR1$
 * */
private Float $VAR2$;
​
$VAR3$

pc

/**
 * $VAR1$
 * */
private Character $VAR2$;
​
$VAR3$

pd

/**
 * $VAR1$
 * */
private Double $VAR2$;
​
$VAR3$

psfs

public static final String $VAR1$ = $VAR2$;
​
$VAR3$

psfi

public static final Integer $VAR1$ = $VAR2$;
​
$VAR3$

 

2.2方法快速生成

psm

public String $END$(){
    
    return null;
}

pom

public void $END$(){
    
}

pbm

public Object $END$(){
    
    return null;
}

还可以定义许多其他类型的函数模板,读者可根据自己的时机情况自己定义即可。

2.3 模板文件快速生成

2.3.1 快速生成带有头部的mybatis-cfg.xml

File-settings-Editor-File and Code Templates

在files这一列就是我们点击新建会弹出的选项,默认并没有xml,现在我们来新建一个mybatis-cfg.xml

点击+新建,在Name输入 mybatis-cfg.xml,在Extension输入 xml

在下面的内容框中输入

最后还要点击下面的 Enable live Templates激活这个模板,然后点击OK完成

 

Java开发神器IDEA使用技巧_第1张图片

这时我们在点击File New 新建文件的选项中就有mybatis-cfg.xml这个选项了。

Java开发神器IDEA使用技巧_第2张图片

 

 

Java开发神器IDEA使用技巧_第3张图片

依据此方法我们也可以创建许多自己平时需要的模板文件。

 

2.3.2 快速生成mapper的xml文件

跟上述类似,在名字中输入mapper,扩展还是输入xml,内容变成如下,

这里我使用了一个环境变量 NAMESPACE,所以在新建的时候需要我们手动输入这个命名空间的值,当然也可以留空,等新建完成之后再去修改。

 

2.3.3 快速生成spring的xml文件

步骤跟上述一样,然后再内容里面加入如下配置


在实际项目的开发过程中可以根据需要生成许多自己适用的模板,这里就不在赘述了。

2.3.4 maven的简单配置

在已有的template中我们可以看到有一个maven的template group,但是他默认的只有三个配置,这里我们加入一些我们平常所使用的简单配置。

Java开发神器IDEA使用技巧_第4张图片

 

新建一个live template,输入名字 prop 描述properties,然后在下面输入


        UTF-8
        1.8

这个是设置编码为UTF-8和java版本1.8,注意在define的时候选择Maven。

下面再来设置一个springboot的编译插件,名字输入boot,然后define这里依然选择Maven


    org.springframework.boot
    spring-boot-maven-plugin

这里先介绍这两个,读者可根据自己的需要定义快捷键即可。

3.代码助手的妙用

3.1 fori

生成指定number次数的循环

输入

50.fori

会生成

for (int i = 0; i < 50; i++) {    }

同理对于数组,list等也可以用此方法

int[] a = new int[100];

输入 a.fori

会生成

for (int i = 0; i < a.length; i++) {    }

3.2 forr

生成指定number次数的逆循环,这个的功能跟fori差不多,不过是逆向遍历,

输入

50.forr

会生成

for (int i = 50; i > 0; i--) {    }

3.3 for

对于可迭代的数组,集合等可以使用

对于上面的数组a,

输入

a.for

会生成

for (int i : a) {    }

对于Map

Map map = new HashMap();

输入

map.entrySet().for

会生成

for (Map.Entry stringObjectEntry : map.entrySet()) {    }

3.4 iter

跟for的功能差不多

对于上面的数组a

输入

a.iter

会生成

for (int i : a) {}

对于一个List

List list = new ArrayList();

输入

list.iter

会生成

for (String s : list) {}

3.5 itar

快速遍历数组

定义一个数组array,

String[] array = new String[100];

输入

itar

会生成

for (int i = 0; i < array.length; i++) {    String s = array[i];    }

3.6 var

输入

new ArrayList().var

会生成

ArrayList strings = new ArrayList();

3.7 Field

输入

public class Foo {
  public Foo(int arg) {
    arg.field
  }
}

会生成

public class Foo {
    private int foo;
​
    public Foo(int arg) {
        foo = arg;
    }
}

通过在构造方法中输入成员变量.arg可以快速生成成员变量和带成员变量的构造方法。

3.8 nn

输入

HashMap map = new HashMap();
map.nn

会生成

if (map != null) {
​
}

3.9 try

输入

public void test(){
    m().try
}
public void m() throws Exception{
        
}

会生成

try {
    m();
} catch (Exception e) {
    e.printStackTrace();
}

3.10 return

输入

"hello".return

会生成

return "hello";

更多的代码补全方案可以查看 设置里面的Postfix Completion

Java开发神器IDEA使用技巧_第5张图片

 

3.11 alt+enter

这个键的功能很多,比如修复代码,自动修复错误等等。

比如在代码中输入

List list = new ArrayList();
test(list);

由于test函数不存在,那么就会提示错误,鼠标点击到test上面,按 alt+enter然后选择创建就可以自动帮我们创建一个test方法。

Java开发神器IDEA使用技巧_第6张图片

 

private void test(List list) {
}

在我们定义接口的时候也可以利用这个额快捷键,

这里新建一个UsersService的接口

public interface IUserService {
    void addUser(User user);
    User query(Integer id);
}

鼠标选中接口的地方,按住alt+enter,选择Implement interface

Java开发神器IDEA使用技巧_第7张图片

 

在弹出的窗口中输入名字和包名即可,默认是当前包下面。

Java开发神器IDEA使用技巧_第8张图片

 

生成的class如下

public class IUserServiceImpl implements IUserService {
    @Override
    public void addUser(User user) {
        
    }
​
    @Override
    public User query(Integer id) {
        return null;
    }
}

 

4.文件跳转

4.1alt+数字键:显示或关闭界面视图

alt+1显示和隐藏工程的目录结构

alt+2显示和隐藏Favorities

4.2跳转

4.2.1 多个工程之间的跳转

ctrl+alt+[ 跳转到上一个idea工程窗口

ctrl+alt+] 跳转到下一个idea工程窗口

4.2.2 文件之间跳转

ctrl+e 查看最近浏览过的文件,会以列表的形式展开文件列表

Java开发神器IDEA使用技巧_第9张图片

 

ctrl+shift+e 查看最近浏览过得文件并一文件+代码的形式展开。

Java开发神器IDEA使用技巧_第10张图片

 

alt+shift+c 查看最近进行过得操作,包括修改文件,新建文件,删除文件,或者对编辑器的一些设置等

Java开发神器IDEA使用技巧_第11张图片

 

默认Recently Changed Files最近修改的文件没有快捷键,下面我们为这个功能增加一个快捷键,打开设置的窗口,在搜索栏中输入recent即可查看到相应的栏目。

Java开发神器IDEA使用技巧_第12张图片

 

鼠标右键点击Add Keyboard Shortcut,然后输入自己的快捷键即可,注意不要跟其他的快捷键冲突

Java开发神器IDEA使用技巧_第13张图片

Java开发神器IDEA使用技巧_第14张图片

 

 

设置完成后

alt+e就可以查看到最近修改过得文件了。

ctrl+shift+backspace 跳转到最后一次修改过得地方

alt+← 跳转到上一个文件最后一次浏览过的地方

alt+→ 跳转到下一个文件最后一次浏览过的地方

4.2.3书签跳转

F11 为当前光标所在的行加上书签

 

此时在Favorities视图的Bookmarks中就会显示刚才加入的书签。通过点击就可以跳转到刚才标记的地方

Java开发神器IDEA使用技巧_第15张图片

 

ctrl+F11 带有符号标记的书签,在弹出的窗口中选择一个数字

Java开发神器IDEA使用技巧_第16张图片

 

然后按住ctrl+对应的数字就可以跳转到书签的地方。

4.2.4收藏列表

收藏类 鼠标定位到类名上并按住alt+shift+F

收藏方法 鼠标定位到方法名上并按住alt+shift+F

可以选择加入默认的列表也可以新建一个列表

 

5.精确查找

5.1 类查找

ctrl+n

如果要查找jar包中的类,点击Project Files的下拉框选择Project and Libraries即可,

这个下拉框中有很多选项,读者不妨试一试其他的选项,比如最近查看的文件,最近修改的文件等等。

Java开发神器IDEA使用技巧_第17张图片

 

5.2 文件查找

ctrl+shift+n

如果要查找jar包中的文件,点击Project Files的下拉框选择Project and Libraries即可

Java开发神器IDEA使用技巧_第18张图片

 

5.3 函数查找

ctrl+alt+shift+n

如果要查找jar包中的文件,点击Project Files的下拉框选择Project and Libraries即可

Java开发神器IDEA使用技巧_第19张图片

 

5.4 查找所有

到这里细心的同学可能已经发现了,这三次查找打开的窗口都是一样的只是上面的选项Classes、Files、Symbols等在切换而已,在打开这个窗口的时候,如果我们点击All,那么就会将所有的类,文件、函数等都给查找出来,

我们再点击 include non-project items那么就会将jar包中的文件函数也都列举出来。

Java开发神器IDEA使用技巧_第20张图片

 

5.5 字符串搜索

ctrl+F 在当前页面搜索,其中Match Case是是否忽略大小写,Words是否单词,Regex是否正则表达式搜索

 

ctrl+shift+f 全局搜索,其中File mask可以指定搜索的文件范围。

Java开发神器IDEA使用技巧_第21张图片

 

6.列操作

前提条件:多行代码有相同的特点,并且需要进行类似的操作

下面演示一个将json格式的文件转换成枚举类的操作,通过这个来深刻理解列操作的好处

    100: "Continue"
    102: "Processing"
    103: "Checkpoint
    
    200: "OK"
    201: "Created"
    202: "Accept"
    
    302: "Found"
    
    401: "Unauthorized"
    409: "Conflict"
    410: "Gone"

上面是一段关于后端响应码的json字符,要将它转换成一个枚举类,传统的做法是一行一行的写,下面来演示如何利用列操作进行快速编写。

新建一个枚举类,并将这段json复制进去,

public enum Status {
​
    100: "Continue"
    102: "Processing"
    103: "Checkpoint
​
    200: "OK"
    201: "Created"
    202: "Accept"
​
    302: "Found"
​
    401: "Unauthorized"
    409: "Conflict"
    410: "Gone"
​
​
    private int code;
    Status(int code){
        this.code = code;
    }
}

这里需要将他变成 CONTINUE(100), 这样的格式。观察json字符即可发现他们的结构是完全一样的,所以可以很方便的进行列操作,首先选中他们都拥有的字符,我们先选择100后面的那个冒号,然后按住 ctrl+alt+shift+j,

这时所有行的:都被我们选中了,这时就可以进行列操作了。

Java开发神器IDEA使用技巧_第22张图片

 

我们选中Continue利用ctrl+shift+U将他转换成大写,然后剪切,移动光标到100的前面然后粘贴,加一个左括号,选中后面的:""删除,然后加上右括号和逗号,这时最后一行会报错,我们按住F2定位到这一行将,改成;就可以了。

7.重构

7.1重构

shift+f6 重命名当前页面的所有变量名,包括函数名

ctrl+f6 重构函数

比如

定义了一个sayHello的函数

public void sayHello(String firstName){
        System.out.println(firstName);
}

对其添加一个参数lastName,在弹出的窗口中国填入参数类型和名字即可

Java开发神器IDEA使用技巧_第23张图片

 

然后再调用的时候加上lastName参数即可。

当然这个需求也可以使用alt+enter来完成,在调用时先加上lastName参数,然后按alt+enter,选择第一行就可以了

 

7.2抽取

比如有下面这段代码

public void test(){
    sayHello("firstName");
    sayHello("firstName");
    sayHello("firstName");
    sayHello("firstName");
    sayHello("firstName");
}

7.2.1 变量抽取

我们要将firstName抽取出来作为一个变量,防止以后修改的时候要改多行。

ctrl+alt+v

 

选择Replace all

就会自动帮我们修改

String firstName = "firstName";
sayHello(firstName);
sayHello(firstName);
sayHello(firstName);
sayHello(firstName);
sayHello(firstName);

7.2.2 成员变量抽取

跟上面的一样只是将局部变量抽取成了成员变量,根据实际业务情况自行选择

ctrl+alt+f

private String firstName;
public void test(){
​
    firstName = "firstName";
    sayHello(firstName);
    sayHello("firstName");
    sayHello("firstName");
    sayHello("firstName");
    sayHello("firstName");
}

7.2.3 静态变量抽取

将参数抽取成一个静态的常量

ctrl+alt+c

public static final String FIRST_NAME = "firstName";
public void test(){
​
        sayHello(FIRST_NAME);
        sayHello(FIRST_NAME);
        sayHello(FIRST_NAME);
        sayHello(FIRST_NAME);
        sayHello(FIRST_NAME);
}

7.3 抽取方法

7.3.1方法参数

sayHello的方法体中我们需要将其lastName也进行获取,得到一个全名,但是在我们的方法定义中,又要尽量避免使用成员变量,尽量使用局部变量,所以这里就需要将lastName抽取成局部变量

private String lastName;
public String sayHello(String firstName){
    String fullName = firstName + lastName;
    return fullName;
}

ctrl+alt+p

生成代码如下

public String sayHello(String firstName, String lastName){
        String fullName = firstName + lastName;
        return fullName;
    }
​
    public void test(){
​
        sayHello("firstName", lastName);
        sayHello("firstName", lastName);
        sayHello("firstName", lastName);
        sayHello("firstName", lastName);
        sayHello("firstName", lastName);
    }

这样方法的定义就不依赖成员变量,只是在调用的时候传入成员变量即可。

7.3.2抽取函数

在一个方法中写了太多的代码,是非常难以阅读和维护的,这就需要对一些特定功能的代码进行抽取,将之封装成一个个的函数,每个函数都有一个单独的功能。

比如有以下代码

public void test1(){
    System.out.println("validate");
    System.out.println("encrypt");
    System.out.println("save");
    System.out.println("feedback");
}

上面的代码用一行来表示实际过程中的一段逻辑的代码,下面将这个封装成四个函数,然后再test1里面进行调用即可。

选择第一行

ctrl+alt+m

输入函数名 validate

Java开发神器IDEA使用技巧_第24张图片

 

以此方法生成其他三个函数

public void test1(){
        validate("validate");
        encrypt("encrypt");
        save("save");
        feedback("feedback");
    }
​
    private void feedback(String feedback) {
        System.out.println(feedback);
    }
​
    private void save(String save) {
        System.out.println(save);
    }
​
    private void encrypt(String encrypt) {
        System.out.println(encrypt);
    }
​
    private void validate(String validate) {
        System.out.println(validate);
    }

8.插件配置

  1. Alibaba Java Coding Guidelines 阿里巴巴代码检查规范

  2. Background Image Plus 代码编辑区域背景图片

  3. CodeGlance 代码编辑区缩放图

  4. GenerateSerialVersionUID 自动生成serialId

  5. Grep Console 多颜色控制台

  6. IDEA restart 重启

  7. Key Promoter X 快捷键提示

  8. Lomback 支持lomback

  9. Material Theme UI 非常炫酷的主题

  10. Maven Helper maven辅助插件

  11. Mybatis Log Plugin mybaits日志插件

  12. Mybatis X mybatis辅助插件

  13. Nyan Progress Bar 多彩进度条插件

  14. RestfulToolkit restful辅助开发工具

  15. String Manipulation 字符串的许多快捷操作

  16. Translation 谷歌翻译插件

9.断点调试

F8 下一步,不会进入函数内部

F7 下一步,遇到函数会进入函数内部继续执行

F9 执行完当前断点,进入下一个断点,如果没有下一个断点则执行完整个程序

ctrl+shift+F8 查看所有断点

alt+F9 跳过中间的程序一直执行到光标所在的位置

Mute Breakpoints 禁止所有断点

条件断点

比如有以下代码

for (int i = 0; i < 50; i++) {
    System.out.println(i);
}

我只需要在i是10的倍数的时候查看i的值,这时就可以使用条件断点,把断点打在打印i这一行,然后鼠标选中这一行,按 ctrl+shift+F8,这时就会弹出一个输入框,在里面输入表达式即可

Java开发神器IDEA使用技巧_第25张图片

 

进入断点时,我们直接按F9,然后就只会在 0,10,20,30,40的时候停留

表达式求值

先来一段简单的代码

List list = new ArrayList();
        Map map = new HashMap();
        map.put("id",1);
        list.add(1);
        list.add("aa");
        list.add(map);
​
        for (Object o : list) {
            System.out.println(o);
        }

进入断点调试,这里将断点打在for循环这里,这时如果我们想要知道list中到底有哪些东西,或者是list的某一项是什么,就可以利用这个功能

按住 alt+F8

然后在Expression表达式中输入 list回车就可以查看到list的详细信息了

Java开发神器IDEA使用技巧_第26张图片

 

可以看到,list有三项,第一个为Integer 值为1,第二个为String值为aa第三个为HashMap size为1,在这里我们还可以输入表达式,比如list.size(),list.get(1)等等。

 

Java开发神器IDEA使用技巧_第27张图片

Java开发神器IDEA使用技巧_第28张图片

动态设置变量的值

还是上面那个程序,我们在list.add(map)这行打上一个端点,当运行到这里时,我们点击下面端点的变量区域,点击map,按f2,然后输入null,此时map的值就为null了,然后继续运行,这时可以看到list增加了一个null。

Java开发神器IDEA使用技巧_第29张图片

10.其他设置

10.1智能提示忽略大小写

File-settings-Code Completion,去掉Match Case前面的√

Java开发神器IDEA使用技巧_第30张图片

 

你可能感兴趣的:(工具)