IDEA使用技巧
日常使用
- 快速输入 - public static void main(String[] args){}- psvm+ tab即可
- 快速输入 - System.out.println();
- sout+ tab即可
- 可以先输入任何想要输出的变量,再.sout
- 想创建对象或使用一个能返回对象的方法时,直接写 - new ClassName()/- ClassName.methodName(parameters),再- Alt + Enter,即可自动产生对象名。
- 谷歌 - IDEA优化,进行相关操作
- 运行Java文件 
- 上次运行过的文件:Shift + F10
- 当前文件:Ctrl + Shift + F10
- 反编译 - 工具栏 - Project Structure… - Project - Project compiler output,找到编译成字节码的class文件输出地址,在文件资源管理器中打开该地址;
- IDEA中,在中意的Package右键 - Show in Explore
- 在文件资源管理器中,复制class文件到java文件所在的目录,之后再在IDEA中打开,即可查看反编译后的内容。
 
- 编写构造器 - Alt + insert –> Constructor 
- 编写Getter和Setter方法 - Alt + insert –> Getter and Setter 
- 方法的重载 - Alt + insert –> Override Methods… - // 创建重载方法后,IDEA 会自动写一个注解(有功能的注释) @Override public void overrideMethod() { // 方法体 }
- 包裹选中的代码 - Ctrl + Alt + T 
- 自动清除无效import - Settings -> Editor -> General -> Auto Import -> Java - 勾选 - Optimize imports on the fly。 
- 在底部的Git标签页中,添加Local Changes标签页 - 效果:  - 操作:File - Settings - Version Control - Commit - 取消勾选Use non-modal commit interfce   
- 去掉import自动合并 
- Endpoints:查看web应用程序的请求映射- view-- Tool Windows-- Endpoints   
日志
设置快捷生成日志的提示:
- File - Settings - Editor - Live Templates - 加号 - Live Template

- Abbreviation填写期望的快捷缩写,Template text填写期望的填充效果 - private static final Logger LOGGER = LoggerFactory.getLogger($CLASS_NAME$.class);
- Edit Variables… - Expression选择 - className()
- 左下角 - Define,设置生效的场景:- java: declaration 
文件和代码模板
创建类时自动添加注释
- File - Settings - Editor - File and Code Tmplates
- Scheme: Default
- Includes - File Header
 
Debug
断点
IDEA中有4种基础断点:
- 行断点
- 方法断点
- 属性断点
- 异常断点
以此4种断点为基础,衍生出了4种断点:
- **条件断点。**右键断点,添加Condition。只有在满足条件时,断点才会阻断程序运行。
 
- 源断点。可以在不阻断代码的情况下,在控制台上输出某些信息。
Shift+鼠标左键 添加断点,勾选"Breakpoint hit" message和Evaluate and log
- "Breakpoint hit" message:在调试控制台中输出断点被触发的消息。默认消息为 “Breakpoint hit at <文件名>:<行号>”。
- Evaluate and log:执行输入框中输入的表达式,并将结果输出到控制台。

- 多线程断点。模拟线程的轮询执行。
右键断点,Suspend选择Thread。实际debug过程中,可以在Debugger的标签页看到不同的线程,通过切换线程进行Debug,就能模拟线程的轮询执行。
 
- **Stream断点。**在Stream的代码行加上断点,就可以在运行到这行代码时,点击Trace Current Stream Chain,看到数据的流转情况。

进入断点之后的调试技巧
- Step Over:一行行往下执行,不会进入方法内部。
 
- Step Into:进入方法内部。但是一些外部Jar包的方法会无法进入。如果想要进入外部Jar包方法,可以使用- Force Step Into
 
 
- Step Out:跳转到调用方法处。
- Run to Cursor:跳转到鼠标光标所在位置。
 
回退重新执行方法 Reset Frame
在调用栈中,点击希望回退的位置对应方法左侧的回退图标Reset Frame,就能实现回退。

跳转至下一个断点 Resume Program
如果没有后续断点,就会将程序执行至结束。
 
观察指定变量的变化情况 Watches
Debug过程中,所有的变量都会被展示在Debugger栏中,如果只想要观察某几个特定的变量,不便于观察。
勾选Debug标签页右侧Layout Settings下的Separate Watches选项。再添加一个想要监听的变量或表达式,就能只关注自己关心的变量信息。
 
手动修改变量的值
通过Evaluate Expression...,就可以实现手动修改变量值,以快速进入某个代码逻辑中。
 
手动抛出异常,测试异常处理的代码逻辑
选择栈中方法后,右键选择Throw Exception:
 
例如构造一个空指针异常:
 
监控断点的开销
有时候打了断点会让项目执行很慢,尤其是一些复杂的条件断点。勾选Overhead,就能看到断点的执行次数和执行耗时。
如果发现断点耗时,可以去掉,节约资源。
 
添加JVM启动参数
 
 
 

- -Xms:堆内存最小值,例如- -Xms1m
- -Xmx:堆内存最大值,例如- -Xmx1m
- -Xss:指定线程栈的大小- 通常不需要修改值,如果遇到栈溢出报错,可以适当增大;如果需要创建大量线程,可以适当减小。 
- -XX:+HeapDumpOnOutOfMemoryError:发生OOM后,生成相应的dump文件
- -XX:HeapDumpPath=[指定的存放路径]:dump文件存放路径
- -Xlog:gc*:查看GC日志
- -XX:MaxTenuringThreshold:设置对象从Survivor区晋升到老年代的年龄阈值
- -Dserver.port=[目标端口号]:指定运行的端口
Spring Boot多实例运行
参考:IntelliJIDEA中实现Spring Boot多实例运行:修改配置与批量启动详解-CSDN博客
允许多实例
右上角工具栏 - 选择Edit Configurations...
 
选择目标Spring Boot项目 - Modify options - Allow multiple instances(好像也不用勾选?)

指定端口
参照添加JVM启动参数章节,添加-Dserver.port=[目标端口号],保存。
批量操作
Copy Configuration…,指定不同的端口。点击IDEA左下角的Services,如果没有显示Spring Boot项目的启动类,选择Run Configuration... - Spring Boot,就能够显示。
 
 
可以进行批量操作,启动后会显示服务对应的端口:
 
方式二?直接Copy Configuration
