为了迎接十九大的到来,帝都城这几天也是满城风雨,听说早高峰期地铁站的人都排到天桥上了,哎,这就是该死的北漂生活。但是无论怎样,我依然在北京向各位问好!

之前总结过俩篇关于阿里Java开发手册的编程规约(http://www.cnblogs.com/1315925303zxz/p/6934575.htmlhttp://www.cnblogs.com/1315925303zxz/p/6899728.html)的博客,我想说那近乎纸上谈兵,很多自律性比较差的同志坚持几天就又回归原点了,又是每天在SVN上自由发挥着自己狠个性的代码风格。不过没关系今天我督促你一把,我一直是一个对代码有洁癖的程序员,所以就比较喜欢这类东西的出现,也比较喜欢和各位总结分享,说不定哪天我去你们公司碰上你写的代码,恰好是我分享的编码规约,那岂不皆大欢喜。

好了,不是废话的也说了这么多,想必大家都知道公元2017-10-15,在技术论坛里那是一片沸腾,阿里首发了Java开发规约插件,当时我在地铁上看的那叫一个兴奋,由于昨天有点忙,所以今天抽空给各位分享一下该插件的安装和使用,以及我们需要修行的代码风格。

阿里代码规约插件的安装:

官方推荐IDEA使用编码规约插件jdk至少是1.7+,eclipse使用编码规约插件jdk至少是1.8+。但是本人使用的是Spring Tool Suite开发工具(spring的一个开发插件),jdk是1.7的,但是今天安装后能够正常使用,具体原因我也没有详细去查,但是结果是好的,再说一次能够正常使用。

打开eclipse或者Spring Tool Suite工具,通过 Help 菜单>>选择 Install New Software,然后输入https://p3c.alibaba.com/plugin/eclipse/update 即可看到安装列表,然后安装即可,如果在安装过程中如果出现警告信息则可不比关心,跳过即可。

阿里代码规约插件的使用:

如果你已经在你的开发工具中安装了阿里代码规约插件,你可以在某个类或者某个包上鼠标右键,就会看到【阿里编码规约扫描】神器了,抓紧试试,看看自己写的代码是有多丑。

阿里编码规约扫描的结果总结:

通过阿里代码规约插件的几通扫描,丑陋的代码原形毕露,我可是费了老半天才帮它们化好妆的。首先普及各位三个单词:blocker(雏形锻模,预锻模)、Critical(关键的; 批评的,爱挑剔的; 严重的; 极重要的)、Major(主要的; 重要的; 大调的)。这三个单词代表代码规约插件扫描出来的三类不规范的信息列表,具体的信息你自己去体验一把就知道了。

当你右键执行>>阿里编码规约扫描时,就会在开发工具的通知栏中出现以下俩个选项卡P3C Results和Rule Detail,前者代表扫描出的不规范的错误列表,后者代表各个列表项不规范的详细情况,最主要的是举例教你如何改正,我喜欢。

就我今天扫描出的不规范代码,有几点是值得注意的,特此记录一下:

1、Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。

我的代码风格:

if (ip.equals("127.0.0.1") || ip.equals("0:0:0:0:0:0:0:1")) {

插件代码风格:

if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {

2、不允许任何魔法值(即未经定义的常量)直接出现在代码中。

我的代码风格:

if (currentMonth >= 1 && currentMonth <= 3) {

插件代码风格:

String KEY_PRE = "Id#taobao_1";
if(key.equals(KEY_PRE)){
//...
}

3、方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释。注意与代码对齐。 【注释这块我个人是非常重视的】

4、类、类属性、类方法的注释必须使用javadoc规范,使用/**内容*/格式,不得使用//xxx方式和/*xxx*/方式。说明:在IDE编辑窗口中,javadoc方式会提示相关注释,生成javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。

5、循环体内,字符串的联接方式,使用StringBuilder的append方法进行扩展。说明:反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,造成内存资源浪费。

反例:
String result;
for (String string : tagNameList) {
result = result + string;
}
正例:
StringBuilder stringBuilder = new StringBuilder();
for (String string : tagNameList) {
stringBuilder.append(string);
}
String result = stringBuilder.toString();

6、集合初始化时,指定集合初始值大小。HashMap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可。这块我个人的代码扫出了一大堆,以后真得防范了。

       到这儿可能就会有人站出来反对,功能实现了比啥都重要,至于浪费精力去关注代码的规范性嘛,那么我想送朋友一句话:谁会愿意通过一张邋遢的外表去发现内心一颗高尚的心。日常开发中也是一样,如果你写的代码再优再牛逼,你试试将一个项目中所有代码搞得长一行短一行格式乱七八糟,甚至连最基本的类、接口注释都不写,谁会愿意去发现你是一位牛逼的程序员。

  朋友,别忘了在装扮自己代码的同时顶个赞吧,我只是想给那些插件开发的阿里伙伴们付出的247个日夜点个赞,他们的确很棒,愿他们在以后的开发路上激情永在,薪水倍升!

为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手的更多相关文章

  1. 十面阿里 Java 程序员,最终拿下阿里 P6 offer!

    转子:https://mp.weixin.qq.com/s/RkMxPbm8E99-rTZKmvBy6Q 今天介绍小编的一个朋友,他现今有四年开发经验了,前前后后为了进阿里面试十次(阿里旗下—蚂蚁金服 ...

  2. IOS-每个程序员的编程之路上都应该看这11本书

    国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响.每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加 ...

  3. 【好程序员笔记分享】——URL解码与编码

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ 1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * ...

  4. 程序员写了一个新手都写不出的低级bug,被骂惨了。

    你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和 ...

  5. 蚂蚁上市员工人均一套大 House,阿里程序员身价和这匹配吗?

    作者 | 硬核云顶宫 责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 上周,蚂蚁集团迎来IPO,其发行价格将达到68.8元,总市值将突破2万亿元.市场对蚂蚁的成长性有着充分的信心,为了 ...

  6. 聊聊几个阿里 P8、P9 程序员的故事

    大家好,我是对白. 阿里 P8 程序员年薪百万已经是公开的秘密了,有人关心他们年薪百万,而我更加关注阿里这些 P8.P9 程序员的成长故事,在聊这些大牛的故事之前,跟大家稍微简单聊下阿里技术人等级制度 ...

  7. 万能的林萧说:我来告诉你,一个草根程序员如何进入BAT。

    引言 首先声明,不要再问LZ谁是林萧,林萧就是某著名程序员小说的主角名字. 写这篇文章的目的其实很简单,算是对之前LZ一篇文章的补充和完善. 之前LZ写过一篇<回答阿里社招面试如何准备,顺便谈谈 ...

  8. 嫁给程序员的好处,你get到了吗?

    首先,我们要知道,什么是程序员?程序员是做什么的? "程序员(英文Programmer)是从事程序开发.维护的专业人员.一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚, ...

  9. 程序人生:02我来告诉你,一个草根程序员如何进入BAT

    本文摘自左潇龙博客,原文出处:http://www.cnblogs.com/zuoxiaolong/p/life54.html 引言 首先声明,不要再问LZ谁是林萧,林萧就是某著名程序员小说的主角名字 ...

随机推荐

  1. 转:H2 入门

    H2 Database做为轻量级的内嵌数据库,功能十分强大,而且运行时只需要一个jar包即可,下表是官网的描述: 更详细的对比见官网页面: http://www.h2database.com/html ...

  2. 【Alpha】Daily Scrum Meeting——Day3

    站立式会议照片 1.本次会议为第三次 Meeting会议: 2.本次会议于早上9:40在陆大楼召开,本次会议为30分钟讨论昨天的任务完成情况以及接下来的任务安排. 每个人的工作分配 成 员 昨天已完成 ...

  3. 201521123067 《Java程序设计》第8周学习总结

    201521123067 <Java程序设计>第8周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 Q1.List中指定 ...

  4. 201521123042 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 参考资料: 百度脑图 XMind 2. 书面作业 作业参考文件下载 Q1.代码阅读:Child压缩包内源代码 1.1 com. ...

  5. Java课程设计——猜数游戏(201521123111 陈伟泽)

    Java课程设计--猜数游戏(201521123111 陈伟泽) 1.团队课程设计博客链接 博客作业--猜数游戏 2.个人负责模块或任务说明 Answer:一些基础界面的构造,排行榜的构造,用文件录入 ...

  6. thinkphp创建对象及数据操作

    ThinkPHP有三种创建控制器对象的方式: 通过命名空间的路径找到类然后new出来例如:$dx = new \Home\Controller\IndexController(); 通过A快捷函数创建 ...

  7. Saltstack批量编译部署nginx(多模块)

    最近一直在研究saltstack的同步文件和批量执行命令,随着架构的变大,批量部署的需求也变得明显起来了,我需要用一条命令就部署好nginx和tomcat,并且符合我所有的环境需求,可以直接投入生产环 ...

  8. JAVA基础---编码解码

    所谓编码 即char->byte 所谓解码 即byte->char ISO-8859-1 中文字符会被黑洞吸收 全部变为"?" GB2312 汉字可以被编码为双字节 但 ...

  9. Atlas框架介绍集成(一)

    Atlas是什么? Atlas是一个Android客户端容器框架,主要提供了组件化.动态性.解耦化的支持.支持在编码期.Apk运行期以及后续运维修复期的各种问题. 在工程期,实现工程独立开发,调试功能 ...

  10. Class.getResource和ClassLoader.getResource的区别分析

    原文:http://swiftlet.net/archives/868 在Java中获取资源的时候,经常用到Class.getResource和ClassLoader.getResource,本文给大 ...