四、导航
想去哪儿就去哪儿,定位问题与查阅代码都很方便。、
1. 文件
- 类全局查找:
Ctrl+N
- 文件全局查找:
Ctrl+Shift+N
- 符号全局查找:
Ctrl+Alt+Shift+N
- 行/列定位:
Ctrl+G
- 退回上/下一个位置:
Ctrl+Alt + Left/Right
- 跳转到上/下一个标签页:
Alt + Left/Right
- 跳转到文件上/下一个修改的位置:
Ctrl+Alt+Shift + Top/Bottom
- 切换文件标签页:
Ctrl+Tab
和Ctrl+Shift+Tab
2. 代码
- 跳转到属性、方法、类定义的位置:
Ctrl+B
- 跳转到接口、方法实现的位置:
Ctrl+Alt+B
- 跳转到类型定义的位置:
Ctrl+Shift+B
- 跳转到父类,父方法的位置:
Ctrl+U
- 跳转类测试类、方法的位置:
Ctrl+Shift+T
- 跳转到下一个错误位置:
F2
- 跳转到上一个错误位置:
Shift+F2
- 跳转到上/下一个方法位置:
Alt + Top/Bottom
- 跳转到大括号开头/结尾:
Ctrl + [/]
在代码编辑器的左侧会存在Gutter图标,在设置 File | Settings | Editor | General | Gutter Icons 中我们可以看到这些图标的含义,单击图标也可以跳转到对应的位置。
比如:Spring注入的Bean定义的位置。
3. 结构
- 查看文件结构:
Ctrl+F12
- 查看文件路径:
Ctrl+Alt+F12
- 查看类型层次结构:
Ctrl+H
- 查看方法层次结构:
Ctrl+Shift+H
- 查看调用层次结构:
Ctrl+Alt+H
技巧
- 在查找类、文件的时候可以通过特殊符号定位到类中的某个方法或某行。
这个方法在定位问题的时候大有用处,而且只需简单的规则,就可以形成代码的坐标。
- 使用
#
标记类或文件中的某个方法或属性:HttpProxy#get
- 使用
:
标记类或文件中的某行某列:HttpProxy:37:10
在团队之间发送代码位置的时候,使用右击菜单中 Copy Reference(Ctrl+Alt+Shift+C
)来复制某个类、方法、属性等的唯一坐标,然后开发人员可以使用Ctrl+N
输入坐标来定位代码。
- 查看类型层次结构的时候可以使用
Ctrl+Alt+U
来显示类的UML图,也可以在Project项目文件树中选中类生成。
五、代码
高效编辑代码,节省苦力活,缩短开发时间,今晚不加班。
1. 插入
- 重写父类方法:
Ctrl+O
- 实现父类接口:
Ctrl+I
- 生成代理方法:Code | Delegate Methods
- 生成多种代码:
Alt+Insert
Constructor
:构造方法Getter
:Get方法Setter
:Set方法Getter and Setter
:Get方法和Set方法equals() and hashCode()
:equals方法和hashCode方法toString()
:toString方法Test
:测试类或测试方法Copyright
:版权信息@Autowired Dependency
:注入Spring Bean
- 插入包围代码:
Ctrl+Alt+T
if / else / while / for
try / catch / finally
synchronized / Runnable
region...endregion Comments
- 去除包围代码:
Ctrl+Shift+Delete
- 补全当前词语:
Alt+/
或Alt+Shift+/
- 当前行前面插入一行:
Ctrl+Alt+Enter
- 当前行后面插入一行:
Shift+Enter
- 删除当前行或选中行:
Ctrl+Y
- 重复插入当前行或选中行:
Ctrl+D
在编写代码的时候,经常会要记录一些非代码文件,可以使用
Ctrl+Alt+Shift+Insert
来新建草稿文件,支持多种格式,新建好的草稿文件会保存在 Project 文件树的/Scratches and Consoles/Scratches
目录下。
2. 选择
- 选择当前光标所在区域:
Ctrl+W
,重复使用扩大选择范围 - 缩小当前选择范围:
Ctrl+Shift+W
- 选择当前光标所在表达式:
Ctrl+Shift+P
3. 格式
- 插入行注释:
Ctrl+/
- 插入块注释:
Ctrl+Shift+/
- 格式化代码:
Ctrl+Alt+L
- 自动缩进对齐:
Ctrl+Alt+I
- 生动优化导包:
Ctrl+Alt+O
- 列自动对齐:Code | Align to Columns
- 代码折叠
- 折叠/展开当前代码段:
Ctrl + -/+
- 折叠/展开全部代码:
Ctrl+Shift + -/+
- 折叠全部文档注释:Code | Folding | Collapse doc comments
- 展开全部文档注释:Code | Folding | Expand doc comments
4. 移动
- 代码语句上/下移动:
Ctrl+Shift + Up/Bottom
,可以简单移动方法的位置 - 代码行上/下移动:
Alt+Shift + Up/Bottom
5. 片段
在快捷键与编辑器配置中说到了如何配置代码片段,代码片段可以明显地提高编辑代码的速度,由其插入高频代码。
智能片段:可以直接输入,也可以使用Ctrl+J
来选择
包围片段:可以选中一段代码使用Ctrl+Alt+J
插入,也可以使用Ctrl+Alt+T
6. 纠错
- 在代码中存在红色波浪线的代码都是有问题的代码
- 右侧滚动条上方图标不为绿色的对钩时表示该文件中存在有问题的代码
- 可以点击滚动条的彩色条来定位有问题的代码
- 也可以使用
F2
和Shift+F2
来快速定位有问题的代码 - 滚动条的彩色条颜色决定着问题的严重性,例:警告、错误等
- 光标置于错误代码的时候,左侧会出现电灯泡,单击它有解决办法
- 使用快捷键
Alt+Enter
和单击电灯泡的功能一样
不管代码有什么问题,使用 Alt+Enter
总能找到解决办法。
不要轻易关闭代码的错误提示,级别较低的警告可以酌情处理
技巧
- 在接口名称
AE
选择 Implement interface 快速添加接口的实现类。 - 在抽象类名称
AE
选择 Implement abstract class 快速添加抽象类的实现类。 - 在类名称
AE
选择 Create subclass 快速添加该类的子类。 - 在接口、抽象类、类名称
AE
选择 Create Test 快速添加类的测试类。 - 在方法名称
AE
选择 Generate missed test methods 创建测试方法。 - 在方法名称
AE
选择 Generate overloaded method with default parameter values 创建当前方法的重载方法。 - 在属性、方法、类名称
AE
选择 Add Javadoc 快速添加文档注释。 - 在正则表达式字符串
AE
选择 Check RegExp 校验正则表达式。
AE
表示使用Alt+Enter
快捷键
- 在鼠标光标拖动选择的时候按住
Alt
键可以垂直选择进行多行编辑。 - 按住
Alt+Shift
键使用鼠标光标单击多个地方可以进行多个位置编辑。 - 在使用
Ctrl+F
的时候,想要编辑所有的结果可以使用Ctrl+Alt+Shift+J
。 - 在当前输入的字符串位置
AE
选择 Inject language or reference 可以标注当前字符串是哪种语言,比如选择JSON,当前字符串应付支持JSON格式的高亮和代码提示,其他语言也一样,比如SQL,这让输入字符串变得的更加简单。
如果标注的是JSON,还可以 AE
选择 Edit JSON Fragment 来格式化编辑JSON,自动生成转义字符。
六、分析
分析项目,分析代码,才能分析设计。
1. 代码
- 检查代码:Analyze | Inspect Code
- 检查代码并修复:Analyze | Code Cleanup
2. 依赖
- 分析依赖信息:Analyze | Analyze Dependencies
- 分析被依赖信息:Analyze | Analyze Backward Dependencies
- 分析Module依赖信息:Analyze | Analyze Module Dependencies
- 分析依赖矩阵:Analyze | Analyze Dependency Matrix
3. 数据
- 分析传递到当前的数据流:Analyze | Analyze Data Flow to Here
- 分析从当前开始传递的数据流:Analyze | Analyze Data Flow from Here
- 分析异常堆栈信息:Analyze | Analyze Stack Trace
技巧
- 分析数据流可以追踪方法调用关系。
可以使用分析异常堆栈信息来处理异常日志。
七、重构
珍惜每一次重构的机会,尽量把项目设计的更好。
1. 重构
- 重构当前代码:
Ctrl+Alt+Shift+T
- 重命名:
Shift+F6
- 修改类或方法签名:
Ctrl+F6
- 修改定义类型:
Ctrl+Shift+F6
- 修改成静态定义:Refactor | Make Static
- 修改成实例方法:Refactor | Convert To Instance Method
- 移动/复制:
F6/F5
(可以移动静态变量或方法) - 安全删除:
Alt+Delete
- 提取方法生成代理类:Refactor | Extract | Delegate
- 提取方法生成接口:Refactor | Extract | Interface
- 提取方法生成父类:Refactor | Extract | Superclass
2. 优化
- 对当前表达式提取并封装:Refactor | Extract
- 提取为变量:
Ctrl+Alt+V
- 提取为常量:
Ctrl+Alt+C
- 提取为类属性:
Ctrl+Alt+F
- 提取为方法参数:
Ctrl+Alt+P
- 提取为函数式参数:
Ctrl+Alt+Shift+P
- 提取为函数式变量:Refactor | Extract | Functional Variable
- 提取方法的多个参数封装为对象:Refactor | Extract | Parameter Object
- 提取为方法:
Ctrl+Alt+M
- 提取为方法并封装成对象:Refactor | Extract | Method Object
- 对当前表达式去除封装:Refactor | Inline
- 查找并封装重复代码:Refactor | Find and Replace Code Duplicates
- 倒置布尔类型:Refactor | Invert Boolean
- 去除中介调用:Refactor | Remove Middleman
- 包装方法返回结果:Refactor | Wrap Method Return Value
- 使用方法概括属性:Refactor | Encapsulate Fields
- 变量的初始化提取为方法:Refactor | Replace Temp with Query
- 使用工厂方法替换构造方法:Refactor | Replace Constructor with Factory Method
- 使用构建器替换构造方法:Refactor | Replace Constructor with Builder
- 使用安全的类型填充泛型:Refactor | Generify
3. 继承
- 将类成员推送到父类:Refactor | Pull Members Up
- 将类成员拉取到子类:Refactor | Push Members Dowm
- 使用接口替换类定义:Refactor | Use Interface Where Possible
- 使用代理来替换继承:Refactor | Replace Inheritance with Delegation
- 匿名类替换成内部类:Refactor | Convert Anonymous to Inner
技巧
- 在Controller方法中,使用 Refactor | Extract | Parameter Object 把多个接收表单的参数封装成VO类。