存档

2010年2月25日 的存档

IntelliJ IDEA 推广 介绍 入门

2010年2月25日 13 条评论

注:这文章写得太水了。周日和ZY的一场不太和谐的争论以后,我决定尝试一下Eclipse,结果发现Eclipse其实也有不少技巧,我只是不知道它们而已。还发现了一篇Terse Systems : Why IntelliJ IDEA sucks,是一个Eclipse的重度用户攻击IDEA不好用的文章,请关注它的评论中有不少有趣的反击。总之IDEA现在看来,是个好工具,不过并没有到艳压群芳的地步,我只是井底之蛙,发现了一片天空,以为就是一个美丽新世界而已。文章依然保留,就当是蝴蝶拍了一下小翅膀。

IntelliJ IDEA似乎还不是一个很流行的Java IDE,因为最近两年来,一直在使用它,渐渐得有了一些心得。想,也许我应该写一点东西来推广一下它。

为什么我会这么推崇IntelliJ呢?原因是,它能够做到超高效率的编码。

IntelliJ IDEA的宣传单上有一句话:“我们与其他软件不一样,我们的默认快捷键是精心设置过,如果您以前使用的其他IDE和我们的快捷键不同,请尝试一下我们的。”我想说的是,这句话并没有任何言过其实。

IntelliJ的快捷键,是一种容易上瘾的东西,花10分钟到半小时学习一下,你会发现自己从此就不需要鼠标了。

首先举一个搜索的例子:

您忘了工程里一个类位于哪个包下,很简单,ctrl + n,输入类名,IntelliJ会帮你搜索。不仅如此,它还支持星号和问号通配符。更简单的,对于ImportDataNodesQuickAction这样的类,您可以输入IDNQA(所有的大写字母),或者ImportDNQA(相当于省略了星号的通配符)。超强。

如果您想找的是个资源文件比如图片,而不是一个Java类,很简单,ctrl+shift+n,输入关键字。

如果您想找的既不是类又不是文件,而是Java类里面的一个函数名或一个全局变量,很简单ctrl +alt +shift +n,输入关键字。

JBuilder下有个强大的功能就是模板。输入数个字符就可以生成一大段代码。IntelliJ IDEA更是把这个做到极致。请让我介绍一下它的Live Template功能。

当您第一次尝试IntelliJ,第一个程序当然是HelloWorld。

那么main函数您怎么写,挨个敲入public static void main(String[] args) ?太长了太长了,在IntelliJ下您这样做:

首先按ctrl+j,出现一个下拉框,别理他,接着输入psvm,回车。怎么样,所有的代码都有了。光标还自动停在了你准备编码的位置上!

然后您一定是准备输入:System.out.println(“Hello World”); 然后再添加import java.lang.System申明 ?在IntelliJ下面您这样做:

依旧按ctrl+j,接着输入sout,回车。自动生成了代码不说,连Import都帮您自动完成了!光标还停在println(“的位置上,就等着您直接输入Hello World。

如果您坚持看到这里,毫无疑问,您是一位Java程序员,这点小伎俩当然无法让您留下哈喇子,那么我接着来点猛料。

好了,下一步,我们建一个类,让它实现Runnable接口。首先建立一个新类ThreadTest (这个貌似没有快捷键,我们不应该这么懒对不对)

第一步,当然是在类名后加上implements Runnable, 请只输入前两个字符im,然后按ctrl+空格,(唔,中文输入法出来了是不是?请您把中文输入法的快捷键改成别的或者去掉,您依然可以用ctrl+shift来切换输入法),您看自动完成了implements ,然后输入Ru,按ctrl+空格您看Runnable也自动完成了。

先别急着换行什么的去实现方法,听我号令。您看到public class ThreadTest implements Runnable下面有一道红线是不是?这时候按alt+回车,出现一个下拉框,有两个选项“Implement Methods”和“Make ThreadTest abstract”,直接回车,再回车。。。

您看到了,这工程就是全自动贵宾式服务。以上其实介绍了两个快捷键,ctrl+空格Alt+回车。。。一个是自动完成:一个是自动纠错(它不只是帮您实现方法,它还可以帮您添加异常检测,帮您Import工程库,一键式服务,搞定多种难题:难言之隐,一键了之),。总之有了这两个利器,您变成超级大懒虫指日可待。。。IntelliJ IDEA的口号是Develop with pleasure!什么意思,就是出门有人帮开车,进门有人帮拎包,开房有人帮您叫小姐。。。前面这些只是冰山一角,还有很多快捷键充当皮条客为您服务。而这些皮条客的名字绝对不会像VIM那样难记(不知道VIM是什么东东请无视这一句)。

IntelliJ IDEA,乃是杀人放火打家劫舍之利器。

当然了,对高级用户而言,特别是Eclipse用户而言,能够支持各种奇怪的需求才是王道,比如Ant,比如Maven,比如JAXB,比如UML。。。这些也没有任何问题,且听下回分解(有没有下回,就看有没有回帖了;当然不排除自己犯贱的可能性)。

最后说一句,这玩意有商业版和开源社区版。在这里下载。


IntelliJ的缺点:

1,内存占用大大的。。。在我的3G的内存的办公机上,有时候也会慢得我受不了重启IntelliJ。。。当然这个也取决你的工程有多大(公司的工程有8400多个文件,81万行代码)。我的IBM T43跑只有几个文件的小工程就从来没有慢到要重启。

2,界面设计器和JBuilder的思路不同,采用一种特有的XML方式存取界面,总之不推荐使用。因此我练就了手写GridBagLayout参数的基本功。

3,IntelliJ启动的时候会扫描工程中所有Java类的结构,然后用在它超强的搜索里面。因此如果您的工程有百万行代码的话,启动时间就至少有30秒之多。当然启动完了以后,一切都会好起来的。


关于为什么不使用EMACS

楼下回复提到EMACS,作为一个连VIM我都没能摸熟的菜鸟,我当然没用过EMACS。。。shame。。。

但是我有了一些想法,决定写下来。我有个朋友跟我说,写代码,NotePad就够了。还有一个朋友跟我说,不能依赖编译器,你得在编译器帮你检查出错误之前自己用眼睛挑出来,更进一步,你必须一边写代码一边就在查错,这样才能保证代码的正确性。我得说,这些话都是对的。但是IDE这种东西之所以存在,就是因为我这样的菜鸟程序员太多。如果程序员也有末尾淘汰制,每年一定会有一群IDE爱好者被赶出程序员队伍,并强制转行为皮条客。(只有更左没有更左,IDE爱好者被赶尽杀绝的一天,下一步就应该轮到VIM爱好者,哈哈哈。)

您看,我如果有练过EMACS,当然不屑于IntelliJ了,问题就在于EMACS至少要闭关数年,方能神功炼成天下无敌。天下无敌是爽,但是IntelliJ只要练30分钟可以出去试试能不能把比武招亲的姑娘搞定了,所以我爽在前面您爽在后面。

IntelliJ有个有趣的地方就是:它的门槛低,快捷键虽然有上百个,但是一个不会都没关系,照用。。。我就在没用快捷键的日子里度过了好长一段日子,慢慢地,发现了一些有趣的键,然后是发现另外一些,然后,你永远不知道什么时候能够发现一些你不知道的好姑娘。。。我之所以在用AutoHotKey绑定系统热键的时候专挑Win键,一个非常重要的原因就是我的IntelliJ热键知识还在不断增长中;我不喜欢某一天我在IntelliJ里面按ctrl + p试图查看函数参数时,却跳出个截图软件出来。

对EMACS,我想说的,尺有所短寸有所长,您牛人配置出ctrl + 空格这样懒人自动完成键一定是超级容易的(或者从上千个命令中秒检出一个适用命令),我的小小的不成的。这里有一篇:10个用EMACS蹬掉Java IDE的理由 ,写得真是太好了,太牛了,可是对我不管用:小子我刚刚学会开小轿车,就让我控制洲际导弹,我玩死自己是铁板钉钉。

其实我拼死抵赖,也无法改变我强词夺理的本质。人类之所以能进步,就在于能够学习。正如楼下向我推销EMACS,就如我向JBuilder用户推销IDEA一样。从这一点来说,我在狠狠地抽自己的嘴巴。


我用过的Java的IDE有这么几种:JBuilder用的时间最长,用了6年。Eclipse和NetBeans都用的时间不算太多,一共加起来可能只用了1年不到,还是为了在澳洲找工作准备的,NetBeans没啥印象,Eclipse强大的插件功能让我五体投地,有一阵子我甚至有可能成为它的忠实用户,直到IntelliJ IDEA的出现。

我用IntelliJ IDEA,最开始是被迫的,因为公司要求用,而且是花钱买的正版(公司也有人在用正版的JBuilder,但是很快这家伙也迁移到IntelliJ IDEA上来了)。一开始我并不喜欢它,慢慢得就离不开它。

作为一个JBuilder的用户,我最喜欢的几个功能是:强大的界面设计器;快速查找类的位置。其他功能我用得很少很少。

迁移到IntelliJ以后,我遇到两个问题:

1,界面设计器没了,这个很让我失望。(也不是完全没有,IntelliJ提供了一个New GUI Form/ GUI Dialog设计器,但我研究一下表明,这设计最后是保存为xml文件,也就是不通用。因此我直接忽略了这个功能。值得一提的是,IntelliJ IDEA提供了一个Ant任务包,让你可以脱离IntelliJ IDEA独立编译这些XML格式的界面文件)

2,另一个困难是:IDEA引入了模块的概念。这个在JBuilder貌似是没有的。模块的用途是让代码更清晰,模块的依赖性更明显,比如强制不允许服务器端模块去引用客户端代码否则就编译错误。这个理念对刚接触IntelliJ IDEA的我而言有点超前,过了挺长时间才明白模块的作用。

虽然不是大问题,但是实实在在地打击了我。。。但风雨过后就会有彩虹,现在的我,腰也直了,腿也不抖了,吃饭蛮香,睡觉倍棒,您瞅准了,IntelliJ牌IDE,值得一试。

原创的话痨如需转载请注明来源:http://blog.chenyi1976.com/blog/11047;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签: