说到Java的IDE,似乎eclipse和Idea是目前的主流。然而,OO的课程组却一直在推荐使用eclipse,于是很多人就这样错过了Idea这样强大的IDE工具。本文将会对于Idea和Idea的一些常见(实际上,很多是Jetbrain系列IDE的代表性操作)操作进行一些介绍。

Jetbrain & Idea

Jetbrain

Jetbrain是捷克的一家企业(Jetbrain官网),目前其主打产品是各个现代主流语言的IDE,包含PythonRubyPHPSQL等语言(对于企业用户还提供一些teamwork管理工具)。其IDE用过的人都知道,颇具现代感,很多功能解决了令不少程序猿们头疼多年的难题(后面将会详细讲到)。

Idea

Idea则是Jetbrain全家桶的一员(Idea官网),其除了Jetbrain一些共性的王牌功能之外,还针对Java这门语言的一些特性进行了进一步的用户体验优化。(后文也将详细阐述

Idea的那些事

初次使用Idea

初次打开Idea的下载页面,一下子就懵了:

499刀一年。。。看的有些肾疼。那是不是我们Idea之旅就要就此止步了呢?Of course, NO!

让我们继续往下看:

果然,Intellij IdeaPycharm一样,都提供了完全免费的社区版,可以直接下载使用。

然而,对于本科生,我们依然可以通过注册学生账号的方式来免费使用Ultimate版(准确的说,Jetbrain大礼包里面除了完全面向企业的团队工具之外,所有的专业版工具都可以凭学生优惠免费下载使用

大家可以自己去按照官网的引导或者网上的教程等进行认证操作,本文中不再赘述。

代码风格

笔者做了三次OO作业,看了三份不同的代码。老实说这三个人的代码思维能力都是挺不错的,然而,代码风格却不是很能看,或者说,这样的代码即便没有任何bug,也根本不可能用在真正的团队工程中。

研读过阿里巴巴java开发代码规范手册的同学们应该知道,在真正的工程代码中,处于代码可维护性提高团队合作效率的考量,会有很多代码规范性的要求。

然而,可能不少同学已经写了规模不小的代码,而且从未参照过代码规范。不必担心,jetbrain给我们提供了很方便的代码风格工具:

可以看到,使用tab还是空格缩进,以及缩进几格都是可以自由调整的(实际上,一般企业的代码工程规范是使用4个空格作为缩进)。此外,在别的标签页下,还有很多可以调整的代码风格相关的东西(包括你们圣战了无数年的大括号换行不换行问题)。

而这样的代码习惯调整,只需要Menu -> File -> Settings -> Editor -> Code Style -> Java即可找到并调整(可以看到,除了java还有非常多种的语言。没错,一般的jetbrain IDE都支持多种语言的编辑,如果你有同时使用多种语言的需求的话,可以在其他语言对应的区域进行编辑。)

在我们调整好了之后,我们在代码位置按下Ctrl+Alt+L(Pycharm中是Alt+F8)即可完成代码规范化(或者Menu -> Code -> Reformat Code),效果如下:

只需要按下Ctrl+Alt+L,代码立刻就变成了这样:

代码瞬间变得干净整洁,清清爽爽。

高度智能的联想

说到代码联想,大家可能对这一概念并不陌生。事实上很多的IDE也都已经在支持这一功能了。

但是,等你一用idea的代码联想功能,你就会再也放不下来了。

说到代码联想,大家肯定会很快的想到eclipse的联想功能:

然而,eclipse的代码联想实际上存在一些局限性(以及其他很多的IDE也是这样):

  • 写类名的时候没有联想 例如,开始写System这个类时,整个过程不会出现任何的联想
  • 联想出来的方法快捷键操作不便 例如,当System按下.之后输入e,联想到了exit,但总还是需要一些比较不优雅的操作(比如鼠标操作,比如并不符合人类直觉的一些其他操作)来快速输入

这意味着什么呢?这意味着,当你对一门语言或者某些类不够熟悉(甚至根本不知道它们的存在)时,你连自我尝试和探索的可能性都没有,只能去翻阅冗长且并不友好的java文档,这显然不符合程序猿的探索精神。以及,如此不优雅的快速输入,多年的码农表示怎么用怎么觉得别扭

然而在idea中,这些问题都得到了极大地改善:

  • 从输入类名的第一个字起,就可以进行智能的联想 仔细观察上图的话还可以发现一件有趣的事情,输入LC后,连我们的LiftController类都联想到了。是的,idea的代码联想完全支持英文音序联想。
  • 根据用户近期使用的情况来智能调节联想顺序 这是idea代码联想另一个很神奇很贴心的feature,如果你近期频繁使用LC来输入LiftController类的话,你会发现LiftController类会在列表中越来越靠前,最多两三次过后就跑到了顶部。
  • 可以直接按上下键和回车来进行快速键入 这一点相比eclipse等其他ide有了非常大的改善,整个过程非常符合一般人的操作直觉,且全过程不依赖任何键盘以外的操作。

有了idea强大的代码联想功能(准确的说,jetbrain全家桶IDE都有这些特性),我们的代码产出速度可以大幅度提升。

批量修改

不知道大家有没有遇到过这样的尴尬状况:

public class Scheduelr {
// something inside
}
public abstract class Main {
public static void main(String[] args) {
Scheduelr s = new Scheduelr(); // execution of the constructor method
Scheduelr.someStaticMethod(); // execution of the static method
/*
LOTS OF CODE HERE THAT USES THE SCHEUDUELR
*/
}
}

没错,细心的你应该已经发现了问题所在——Scheduelr类名的拼写是错误的,应该是Scheduler

按照一般的代码规范,这样的拼写错误绝对是不可以容忍的(就算可以容忍,这样的东西也会导致笔者强迫症大犯 -_-||)。

然而,再一看,可能已经有无数的地方已经在用着这个拼写错误的类名调用。想改?烦得很,而且还很容易错改和漏改。不改?强迫症使我面目全非o(╥﹏╥)o。于是,相信很多人最终的选择还是——不改,宁可被自己代码恶心一遍遍也不能有bug。

实际上,idea在这件事情上有很完美的解决方案:

只需要在类名(实际上方法名,变量名等各种名字也都可以这么做)上右键->Refactor->Rename,或者直接Shift+F6,即可直接修改名字,而且整个工程中相关的地方也都会一起随之改动

更有趣的是,笔者做了一个实验:

在这样的一个函数中,将第一个for循环内的x值进行rename操作,效果如下:

可以看出来,idea的rename功能完全不会误伤到不同作用域类的同名实体,可以说是做到了精确打击。

此外,Refactor中还提供了Safe delete等人性化的功能,等待大家去尝试(Safe delete是在删除类、方法、变量时,检测是否依然在其他的地方对该实体存在依赖,以达到安全删除的目的)。

javadoc

在正规的工程代码规范中,还有一项很重要的要求——写文档。

然而,这个文档也是有很严格的规范的,不是很多人认为的那样,随便注释一点就可以当做文档。而这种符合java工程规范的文档形式就称之为javadoc(类似的代码注释规范还有phpdoc等,更多的规则等细节可以自行查阅代码规范手册或者百度,本文中不作过多讲述)

比如,我们再次来到之前写的test方法上,打入/**,再按下回车:

然后我们按照规定的格式来补齐这个javadoc框架:

一个格式规范且很清晰的方法文档就这样生成了。

除此之外,javadoc规范另外一个很重要的用途就是可以一键生成html页面版项目文档。点击Menu -> Tools -> Generate Javadoc,即可自动生成完整的javadoc网页版文档(具体操作可参考此教程

Git

除此之外,Idea实际上也像eclipse一样对于git有完美的图形化支持。然而笔者一直使用git命令行进行所有git相关操作,对这一块暂不是很熟悉。所以还请各位搜集资料并自行探索。

插件

实际上,在这个网络化体系化作战的时代,jetbrain也有很多的在线插件支持

我们只需要进入Menu -> File -> Settings -> Plugins,再点击Install Jetbrains plugin...,即可搜索插件并直接进行在线安装。(实际上,由于大陆内一些神奇的不可言表的原因,经常会出现连接失败或者下载速度极慢的情况。这时候请自行设置代理,本文不再赘述)

接下来笔者来安利几款比较好的插件:

MetricsReloaded

对于这次的博客作业,我们需要用到的代码分析插件。

Statistic

这个插件没啥别的功能,就是统计代码行数。那意义何在呢?嘿嘿,试想写着代码,看着代码行数不断飚增,是不是一件很带感的事情呢()。

.ignore

这是个管理.gitignore的插件,可以用颜色标记出当前项目下所有文件的git状态(包括IgnoredUntrackedUnmodifiedModified

Markdown support

对于使用Markdown书写文档的同学来说,能有一款优雅可视的内置插件当然是一件很爽的事情。就像这样

【备忘】Idea的那些事的更多相关文章

  1. 编写Windows Service 备忘

    项目需求要做一个定时扫表,将按条件查询到的数据插入或者更新到另一个数据表的需求,老大要求让用window service来做 因为以前没有做过,把这次的经历写出来.作为备忘. 1.什么是windows ...

  2. AngularJS之备忘与诀窍

    译自:<angularjs> 备忘与诀窍 目前为止,之前的章节已经覆盖了Angular所有功能结构中的大多数,包括指令,服务,控制器,资源以及其它内容.但是我们知道有时候仅仅阅读是不够的. ...

  3. 代码文档生成工具Doxygen的使用备忘

    Doxygen备忘 下载与安装 一般步骤 生成配置文件Doxyfile: doxygen (-s) -g 建立目录结构, 比如Doxyfile文件\doc文件夹(输出)\src文件夹(放代码) -&g ...

  4. Annotation 使用备忘

    title: Annotation 使用备忘 date: 2016-11-16 23:16:43 tags: [Annotation] categories: [Programming,Java] - ...

  5. 【C#】无损转换Image为Icon 【C#】组件发布:MessageTip,轻快型消息提示窗 【C#】给无窗口的进程发送消息 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方 【C#】DataRowState演变备忘

    [C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle ...

  6. GIS部分理论知识备忘随笔

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...

  7. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  8. Vi命令备忘

    备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...

  9. ExtJs4常用配置方法备忘

    viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...

  10. [备忘] Automatically reset Windows Update components

    这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...

随机推荐

  1. mkfs -t ext3 错误/dev/sdxx is apparently in use by the system; 解决方法

     在存储上共享了一个500G的空间,映射到Linux系统提供上,环境由2个节点组成. 一. 测试一: 直接mount 用fdisk 格式化之后如下: [root@rac1 u01]# fdisk ...

  2. springMVC web项目 对访问数据库的用户名密码进行加密解密

    在使用springMVC开发web项目中,数据库的用户名,密码一般都是配置在.properties文件中 然后在通过.xml配置文件引入.properties的变量,例如 在config.proper ...

  3. json 的循环输出

    json不能用for-of循环,会报错 可以用for-in循环: var json = {'a':'apple','b':'banana','c':'orange','d':'pear'}; for( ...

  4. 【NOIP2012】【CJOJ1093】【洛谷1083】借教室

    我写的是不完美算法!!! 题面 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的 ...

  5. POJ1743:Musical Theme

    题目 vjudge Sol 先差分 然后求不可重叠最长重复子串 bits/stdc++.h会CE # include <bits/stdc++.h> # define IL inline ...

  6. [BZOJ1604] [Usaco2008 Open] Cow Neighborhoods 奶牛的邻居 (queue & set)

    Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的时候有一个独一无二的位置坐标Xi,Yi(l ...

  7. [BZOJ2733] [HNOI2012] 永无乡 (splay启发式合并)

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  8. Mysql 忘记管理员密码更改

    对管理员设置密码 第一种方式: #mysqladmin -u root password 'new-password'; #mysqladmin -u root -h localhost passwo ...

  9. python全栈开发-Day4 列表

    python全栈开发-Day4 列表 一.首先按照以下几个点展开列表的学习 #一:基本使用 1 用途 2 定义方式 3 常用操作+内置的方法 #二:该类型总结 1 存一个值or存多个值 只能存一个值 ...

  10. IPFS的竞争对手们(一)

    IPFS的竞争对手 IPFS这个项目真的开发很慢,相比其它区块链项目,IPFS的进度可真是让小编捉急,恨铁不成钢啊.然而小编仍然对他们充满信心,来,借用一句盗梦空间里的经典台词: 既然做梦,那就做大点 ...