当前位置:首页 > TAG信息列表 > 夸克神秘代码怎么用

夸克神秘代码怎么用

代码怎么用(帮你规范代码)

代码怎么用(帮你规范代码)

一、idea如何安装阿里巴巴代码规范插件

1.启动idea>>file>>settings>>plugins,搜索alibabajavacodeguidelines(阿里巴巴java代码指南)插件,点击install进行安装。

2.安装好重启idea,之后生效。需要注意的是插件基于jdk1.7打包,如果idea启动时使用的jdk版本是1.6的话就会报unsupported.major.minorversion51.0异常,所以建议大家升级一下。

3.idea重启之后点击工程右键,或者使用默认快捷键ctrl+shift+alt+j来扫描你的工程吧。看看你的代码有多少不规范的地方呢。

4.也可以点击具体的某个类右键进行扫描。

5.扫描整个工程,将不符合规约的代码按 blocker、critical、major三个等级显示,右侧窗口还有针对代码的批量修复功能。

6.实时检测功能,在开发时,对当前文件实时进行检测,并高亮显示出来,同时也给出修改提示。可以说是非常好用了。

7.关闭实时检测功能

如果你正在阅读一些代码,恰巧代码又没有按照阿里代码规范写,此时屏幕上都是一些红色、黄色的警告,严重影响阅读。这个时候可以右击工程点击关闭实时检测的功能。

8.或许阿里条约有些并不适合自己团队的开发要求,这也不需要担心,因为也可以单独的关闭某条规则。或者是修改其提示的级别。是不是很人性化呀。

file>>settings>>editor>>inspections

二、修改不规范代码

扫描完整个工程之后发现有很多不符合规范的代码,小编就挑一些跟大家一起修改吧。

1.不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。所谓的魔法值就是,未经定义的常量字面量,所有在代码中使用的常量必须预先经过定义。

反例:

if(key.equals("zhangsan")){//...}建议改为:

stringkey_pre="zhangsan";if(key_pre.equals(key)){//...}2.object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。(是不是有的小伙伴没有注意过这个问题?)

反例:

publicvoidf(stringstr){stringinner="hi";if(str.equals(inner)){system.out.println("helloworld");}}建议改为:

publicvoidf(stringstr){stringinner="hi";if(inner.equals(str)){system.out.println("helloworld");}}3.所有的覆写方法,必须加@override注解。

其实override注解的本身并没有什么作用,但是它可以告诉代码的读者,这个是覆盖父类的方法。如果方法名、参数、异常定义错误,导致不能正确覆盖父类的方法,编译器会提示错误。比如getobject与get0bject的问题。一个是字母的o,一个是数字的0,加@override可以准确判断是否覆盖成功。所以在意细节还是很重要的。

4.事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。反例(注解【transactional】需要设置rollbackfor属性。):

@service@transactionalpublicclassmechanicalinformationservice{}建议改为:

例子一:

@service@transactional(rollbackfor=exception.class)publicclassuserserviceimplimplementsuserservice{@overridepublicvoidsave(useruser){}}例子二:

@servicepublicclassuserserviceimplimplementsuserservice{@override@transactional(rollbackfor=exception.class)publicvoidsave(useruser){}}例子三:

@servicepublicclassuserserviceimplimplementsuserservice{@autowiredprivatedatasourcetransactionmanagertransactionmanager;@override@transactionalpublicvoidsave(useruser){defaulttransactiondefinitiondef=newdefaulttransactiondefinition;def.setname("sometxname");def.setpropagationbehavior(transactiondefinition.propagation_required);transactionstatusstatus=transactionmanager.gettransaction(def);try{}catch(exceptionex){transactionmanager.rollback(status);throwex;}}}5.循环体内,字符串的连接方式,使用stringbuilder的append方法进行扩展。

说明:反编译出的字节码文件显示每次循环都会new出一个stringbuilder对象,然后进行append操作,最后通过tostring方法返回string对象,造成内存资源浪费。(这一点是需要十分注意的,看完之后不要再用+连接字符串了哦)

反例:

stringresult;for(stringstring:tagnamelist){result=result+string;}建议改为:

stringbuilderstringbuilder=newstringbuilder;for(stringstring:tagnamelist){stringbuilder.append(string);}stringresult=stringbuilder.tostring;6.除常用方法(如getxxx/isxxx)等外,不要在条件判断中执行复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量,以提高可读性。

说明:很多if语句内的逻辑相当复杂,阅读者需要分析条件表达式的最终结果,才能明确什么样的条件执行什么样的语句,那么,如果阅读者分析逻辑表达式错误呢?反例:

if((file.open(filename,"w")!=)&&(...)||(...)){//...}建议改为:

booleanexisted=(file.open(filename,"w")!=)&&(...)||(...);if(existed){//...}7.集合初始化时,指定集合初始值大小。

说明:hashmap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可。反例:

mapmap=newhashmap;建议改为:

mapmap=newhashmap(16);


眼霜之家 亲邻城下

  • 关注微信关注微信

猜你喜欢

微信公众号