从静态代码说明器材的检测法则进修代码优化能力大数据应用

来源:互联网 / 作者:SKY / 2017-09-14 00:20 / 点击:
讲起静态代码说明器材,预计各人耳熟能详的都能讲出几个来,像PMD, Checkstyle, Findbug等。

讲起静态代码说明器材,时代站长网,预计各人耳熟能详的都能讲出几个来,像PMD, Checkstyle, Findbug等。没错这些都是我们一般编码代码时用于晋升我们代码质量的好器材,本文将从PMD器材实现的法则出发,通过这些法则的界说来进修一下代码优化能力,但愿通过这些能力的先容可以辅佐各人在编码进程中晋升各人的代码编写质量。同时也算给各人先容一个较量不错的途径去进修改造代码编写质量的要领。

下面都是从PMD法则中总结的一部门代码优化提议:

1.局部变量只被赋值一次可以声明为final

声名: 行使final标识后,Java在编译的时辰会自动把变革替代成常量,这样措施的运行服从就会晋升

2.假如传入长度为1的字面意义参数,这挪用String.startsWith 可以行使 String.charAt(0) 要领节减运行时刻

声名:关于这点较量好领略,String工具自己就是char数组,String.startsWith要领在内部处理赏罚较量伟大,又有轮回较量操纵,以是服从远不及charAt操纵。

“Abc”.startsWith(“A”) //bad

“Abc”.charAt(0) == ‘A’ //good

3.字符串拼接,行使StringBuffer,而不是直接行使”+”操纵符举办拼接

声名: 关于这一点,各人都有熟悉。由于直接的String工具拼接,会发生新的String的工具举办存储。StringBuffer则会申请一个较大的内存空间(char数组), 针对拼接,假如没有高出char数组巨细就直接追加到该数组尾部. 留意StringBuffer默认巨细是16个字符,以是提议各人行使时指定建设的数组巨细。

4.String 的indexOf要领,假如参数单个字母,则行使char

Abc”.indexOf (“A”) //bad

Abc”.indexOf(‘A’) //good

声名:String indexOf 要领,针对String和char的查找是行使了两个要领,有乐趣的同窗可以看一下String的原代码,查找String的要领要比查找char要领伟大,相对耗时

5.提议不要行使无参的StringBuffer结构函数(该初始长度为16个字符)

声名: 各人也许对StringBuffer有一些误解,以为StringBuffer初始的空间较量大,但现实上其默认建设的巨细只是16个字符的数组,一旦高出后,必要新申请的数组空间,这个就会有特另外开销。

6.非线程安详的单例实现 NonThreadSafeSingleton

下面代码是单例实现中较量常见的一种

从静态代码声名器械的检测法例学习代码优化手段

但这段代码引入的一个题目,就是在多线程方法下运行,有也许会出复从头建设工具的题目。办理步伐在getFoo要领上加上 synchronized要害字

7.同时必要覆写 hashCode和equals要领

声名:这个也是各人无意会忽视的一个题目。hashCode和equlas要领最首要的用途是在根基Hash算法的荟萃类中,如HashMap,等。

在HashMap实现中,其对一个对方是否相称的判定逻辑如下:

从静态代码声名器械的检测法例学习代码优化手段

也就是说在HashMap中假如两个工具相称必需是hashCode相称而且equals要领也返回相称。

那假如在一个工具中,只复写了equals,而未复写hashCode要领,就会造成”一再”的工具在HashSet中也会产生。

下面是一个有题目的示例代码:

从静态代码声名器械的检测法例学习代码优化手段

8.BigDecimal工具初始化时,针对浮点数据值行使String参数(针对精度题目)

声名:譬喻 new BigDecimal(0.1) 置魅真正的值也许是 .1000000000000000055511151231257827021181583404541015625

阅读延展

1
3