原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:『互联网架构』软件架构-Intellij IDEA技巧篇(七)
从09年开始java的开发,用了很多的开发工具从myeclipse,eclipse,netbeans每个开发工具都有自己的特色,netbeans做gui很方便,myeclipse最初的时候插件比eclipse丰富。eclipse更加轻量。从17年跟同事国美哥,开始熟悉使用idea,这款捷克这个小国家开发的工具。IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的,多亏了国美哥,刘司令,感谢国美哥,刘司令让我上路idea,来不及握手,已经再见了。用了一款软件多年,换个新的工具总有适应期,大概2-3周熟悉了就美滋滋了。源码:https://github.com/limingios/netFuture/tree/master/idea
![](https://img.haomeiwen.com/i11223715/71bbd0321fabe770.png)
IDEA
- 历史
2001年1月发布IntelliJ IDEA 1.0版本,同年七月发布2.0,接下来基本每年发布一个版本(2003除外),当然每年对各个版本都是一些升级。3.0版本之后,IDEA屡获大奖,其中又以2003年的赢得的“Jolt Productivity Award”,“JavaWorld Editors’s Choice Award”为标志,从而奠定了IDEA在IDE中的地位。
- 评价
虽然业界认为最好的java开发工具,但是怎么个最,还需要自己来体会。支持多种语言,数据库等等操作,代码索引的查找,git插件强过eclipse的git插件。尽管IDEA目前还有些不足,但作为一个超过10年生命力还如此强劲的IDEA,得到如此的美誉并不简单。
为什么要使用它
快捷搜索,分析,定位,重构高效。
- 优点
- 智能选取
选择一块代码,只是瞬间的问题。
- 导航模式
很多想法很适合程序员的想法,maven插件啊用起来很方便。
- 历史记录
git和svn就有历史的工具,但是idea本身都自带历史记录的工具。历史改变配套的一些工具。
- 重构
正常做软件开发,迭代的开发,改代码改历史,代码一直是在前进的,重构是程序员老铁必修的课程。
- 编码辅助
get set toString瞬间生成。
- 智能排版,控制
导入导出,智能控制格式化。特别方便的。
- 查找
- 缺点
收费
怎么使用
- 安装篇
一路next
演示技巧
配置编码问题
![](https://img.haomeiwen.com/i11223715/4ed3f1bee359a0bf.png)
![](https://img.haomeiwen.com/i11223715/671ad31d8ba394f5.png)
显示工具栏以及工具按钮栏
![](https://img.haomeiwen.com/i11223715/e9dbcf5fce0f3d15.png)
配置相关的工作空间
![](https://img.haomeiwen.com/i11223715/22e8a525b7c3ddb9.png)
重点理解项目class文件生成(运行打包编译文件存储路径)配置
![](https://img.haomeiwen.com/i11223715/3e56a179125b4401.png)
![](https://img.haomeiwen.com/i11223715/c8f7a3b4c06f6c4c.png)
IDEA构建项目的时候默认生成的iml文件配置改成.classpath类型的文件
![](https://img.haomeiwen.com/i11223715/19cf6deba20d8047.png)
设置工作空间中项目的相关的设置
![](https://img.haomeiwen.com/i11223715/bf509a28a03b7fe6.png)
设置编码区字体的大小、字体类型、代码行距距离等
![](https://img.haomeiwen.com/i11223715/1243148a50632b02.png)
![](https://img.haomeiwen.com/i11223715/7c1ec510bc013623.png)
![](https://img.haomeiwen.com/i11223715/7b511a5b6b80ff65.png)
工具按钮可以在区域范围中推动摆设
![](https://img.haomeiwen.com/i11223715/b558b28fe6065255.png)
DEDUG模式调试配置
![](https://img.haomeiwen.com/i11223715/e1f5fee5005b892b.png)
![](https://img.haomeiwen.com/i11223715/fb898616301dbb7e.png)
![](https://img.haomeiwen.com/i11223715/d04311567a5622f1.png)
![](https://img.haomeiwen.com/i11223715/38c9e65476718683.png)
配置各种文件的生成模板
这里我就配置一个class文件成的模板
![](https://img.haomeiwen.com/i11223715/318f630811929028.png)
![](https://img.haomeiwen.com/i11223715/313fddc8e84d1e8c.png)
![](https://img.haomeiwen.com/i11223715/acc5cd39b4a1ead4.png)
快捷键设置
![](https://img.haomeiwen.com/i11223715/7c2ef9ebfa7619bb.png)
![](https://img.haomeiwen.com/i11223715/b6424efcb42e5b39.png)
![](https://img.haomeiwen.com/i11223715/8dc6525faeaf6177.png)
控制台打印日志的各种级别的颜色配置
![](https://img.haomeiwen.com/i11223715/a1df80a9c91e3744.png)
空格与tab缩进设置
![](https://img.haomeiwen.com/i11223715/86d3bea598e683e2.png)
![](https://img.haomeiwen.com/i11223715/0c394da459be6126.png)
常用快捷键
说实话 我不想说,我建议还是自己看,因为什么吧,不同的套路(eclipse,idea)显示的快捷键的名字。只告诉如何看吧
![](https://img.haomeiwen.com/i11223715/c5a0cc7c1f4cc83c.png)
DEA中导出jar的源码
如果是Maven项目的时候,自动默认下载源码包,如果是javaWeb或者简单的java项目,自定义加入的jar是没有源码的,这时候手动添加源码包。
![](https://img.haomeiwen.com/i11223715/91ddbce4c5af021f.png)
![](https://img.haomeiwen.com/i11223715/c191f50b580876a8.png)
![](https://img.haomeiwen.com/i11223715/239736110a8b5f8e.png)
![](https://img.haomeiwen.com/i11223715/d27209244a4fa344.png)
web项目tomcat
正常开发的一个套路,项目导入或者创建后,配置服务器,添加项目。
![](https://img.haomeiwen.com/i11223715/f4ebec69c16835d9.png)
![](https://img.haomeiwen.com/i11223715/430859604421d98f.png)
![](https://img.haomeiwen.com/i11223715/fcb1ff15a3737375.png)
![](https://img.haomeiwen.com/i11223715/a4b10b9fc6f31b52.png)
![](https://img.haomeiwen.com/i11223715/04a17a9e98000a9a.png)
![](https://img.haomeiwen.com/i11223715/bd06af36d6c039d2.png)
![](https://img.haomeiwen.com/i11223715/c631fea7a36b2189.png)
![](https://img.haomeiwen.com/i11223715/24960223c8cb207a.png)
![](https://img.haomeiwen.com/i11223715/bc6912dca7a286b0.png)
创建maven项目
![](https://img.haomeiwen.com/i11223715/8db5f59db5ea4cb8.png)
![](https://img.haomeiwen.com/i11223715/4f6871463e287ef7.png)
![](https://img.haomeiwen.com/i11223715/56cea0e97aeae402.png)
![](https://img.haomeiwen.com/i11223715/9f6216c3231c2eeb.png)
![](https://img.haomeiwen.com/i11223715/9685f4f0f980cc6a.png)
配置完tomcat,跟上边的war项目一样,注意选择的时候maven的要选exploded
![](https://img.haomeiwen.com/i11223715/e7fc9c95ff0f879f.png)
![](https://img.haomeiwen.com/i11223715/a38696163f12a061.png)
先进行clean,intall,在目录里面target里面会生成一个war包
![](https://img.haomeiwen.com/i11223715/3fd727f7bb24d581.png)
启动tomcat
![](https://img.haomeiwen.com/i11223715/62ffafa9bab569a7.png)
tomcat远程调试
首先保证打出来的war包跟目前的项目是一致的,通过命令mvn package打成war包放入tomcat的webapps目录下
![](https://img.haomeiwen.com/i11223715/b03390d66f470c2b.png)
![](https://img.haomeiwen.com/i11223715/fa814807faa75e4c.png)
命令tomcat的bin目录下:
catalina.bat jpda start
![](https://img.haomeiwen.com/i11223715/cce9fdd95e3181db.png)
![](https://img.haomeiwen.com/i11223715/aafa2a4a55995625.png)
![](https://img.haomeiwen.com/i11223715/5a33a036ec8b6c56.png)
![](https://img.haomeiwen.com/i11223715/ee444367b3d68758.png)
![](https://img.haomeiwen.com/i11223715/0a01fdb6c049243e.png)
![](https://img.haomeiwen.com/i11223715/a4aa54ecf233f4bb.png)
![](https://img.haomeiwen.com/i11223715/ef0fc9d7315e1a35.png)
![](https://img.haomeiwen.com/i11223715/39d8a2cf1ec5c84f.png)
debug模式下的修改参数的值
debug 已经有了某个参数,可以通过new watch的方式对变量赋值
![](https://img.haomeiwen.com/i11223715/511d8b9243baa4fe.png)
![](https://img.haomeiwen.com/i11223715/9d4496855efc2cf5.png)
填写完在执行一步,自动就变成了,刚对message赋的新值
![](https://img.haomeiwen.com/i11223715/45ae112fa9252d6e.png)
删除new watch,重新进入就变成原来的值了
![](https://img.haomeiwen.com/i11223715/78d9f05336192368.png)
如果断点太多可以在这里处理
![](https://img.haomeiwen.com/i11223715/56943f84634f0986.png)
断点介绍
![](https://img.haomeiwen.com/i11223715/b51aee354f0d94c3.png)
插件安装
举例:checkstyle 强烈推荐这个插件真心爽!
![](https://img.haomeiwen.com/i11223715/54e60150e60920b5.png)
![](https://img.haomeiwen.com/i11223715/fc279f2592b52edf.png)
![](https://img.haomeiwen.com/i11223715/a1dff6978eab014b.png)
![](https://img.haomeiwen.com/i11223715/0a634c9e1f26c062.png)
![](https://img.haomeiwen.com/i11223715/e85d9c695585a408.png)
软件重构
- 名称统一修改
修改后,全部发生变化
![](https://img.haomeiwen.com/i11223715/a26b939bbeef9d15.png)
- 方法变更参数
选中某个方法完成参数的变更
![](https://img.haomeiwen.com/i11223715/10aec790c58354f1.png)
![](https://img.haomeiwen.com/i11223715/6227e7c31c012545.png)
![](https://img.haomeiwen.com/i11223715/41f8762b8057766c.png)
- 方法迁移的方式
A类a方法移动到B类,让B类产生a方法
![]()
![](https://img.haomeiwen.com/i11223715/37441109404d4fba.png)
![](https://img.haomeiwen.com/i11223715/131a50559e9c54aa.png)
- 方法提取到上浮和下浮
在开发会遇见这样的场景,如果A类和B类都写完了,需要写一个公共类C把A和B的方法抽离到一起,放入C中。A类和B类都集成C,如果手动要改的话,比较麻烦。原来idea本身都自带这个功能
![](https://img.haomeiwen.com/i11223715/04f3f2e650fe7eab.png)
![](https://img.haomeiwen.com/i11223715/b37e7adcfb57dac8.png)
![](https://img.haomeiwen.com/i11223715/009fd371f8222fd3.png)
![](https://img.haomeiwen.com/i11223715/1369682bee421cbf.png)
![](https://img.haomeiwen.com/i11223715/bdf0d5302d8c551c.png)
![](https://img.haomeiwen.com/i11223715/2190aca468c238c4.png)
如果是C类不想要了,可以下浮到A和B类
![](https://img.haomeiwen.com/i11223715/efc92765a5367ab8.png)
idea分析器
如何代码进行check,查看代码的重复块,覆盖率,异常堆栈,数据的来源和去向。
- 代码进行check <项目比较大不要选择整个项目,小心翻车>
当太多的问题,堆积起来那就是绝对的问题了。针对接手一个新的项目,可能存在的问题,提前有个预警。不熟悉的东西来讲查询很方便。
![](https://img.haomeiwen.com/i11223715/94034957d38d3819.png)
![](https://img.haomeiwen.com/i11223715/bde430cd44fd1d9e.png)
里面有显示建议,有哪些参数未被使用,哪些是有问题的。
![](https://img.haomeiwen.com/i11223715/43cda6243d4c01b2.png)
- 代码的重复块<项目比较大不要选择整个项目,小心翻车>
真正展示技术的时候了,看看搬砖多,还是造航母多,通过这个工具就暴露了,太可怕了这个工具我真心不敢写,怕害了各位老铁。
![](https://img.haomeiwen.com/i11223715/d698021064488d56.png)
![](https://img.haomeiwen.com/i11223715/24fec0eb526d15af.png)
![](https://img.haomeiwen.com/i11223715/601206bc3061d5d8.png)
B继承C,B里面又写了一遍重复了,这都能检查出来,还有什么检查不出来的老铁。
![](https://img.haomeiwen.com/i11223715/00e0cdfd88ae7562.png)
- 分析堆栈
客户说报错,报错内容捞出来看下,发给了我,我应该怎么使用分析堆栈呢,这也是idea最牛逼的一点。
- 写个java类制造个异常
public class Main {
public static void bbb(){
throw new RuntimeException("故意制造异常!");
}
public static void main(String[] args)
{
bbb();
System.out.println("Hello World!");
}
}
运行出现异常信息
![](https://img.haomeiwen.com/i11223715/9a875bffe7db79a1.png)
![](https://img.haomeiwen.com/i11223715/1f3762835a156464.png)
![](https://img.haomeiwen.com/i11223715/68c79842f7fa5e01.png)
点击按钮后就可以直接到指定异常的类了,慢慢分析代码吧,一种检查问题的方式,非常方便。
![](https://img.haomeiwen.com/i11223715/0f8ee23f95cd3fb5.png)
数据的走向从哪里来,要去哪里
很多时候想分析一个变量的走向要记住这个变量的名称然后一步一步ctrl+F的方式慢慢的找,从一个类到另一个类,有了这个工具一切都不是问题了。这个工具是跟踪变量的。
![](https://img.haomeiwen.com/i11223715/d13eeb5ecaa87f7e.png)
![](https://img.haomeiwen.com/i11223715/8120dad92308f71e.png)
PS:工欲善其事,必先利其器。当然,无论如何的夸它,都只是别人的体验,若真想了解它,唯一的就是自己亲自去体验。沒有最流行的框架,只有最流行的helloword。最好的并不是最合适的。最合适的最好。简单得东西对用过的人都会感觉很简单,对没用过的其实感觉好难。在使用idea开发的时候,经常都是写这运行这,小步快走的思路,尽量让代码稳。
网友评论