阻断
一、Close this"FileInputStream" in a "finally" clause.
在finally中关闭FileInputStream,这个最为常见,主要是关闭方式不对,finally代码块中,应该要对每一个stream进行单独关闭,而不能统一写在一个try-catch代码中,jdk 7 能够考虑try-resources方式关闭,代码相对优雅。
另外数据库操做的statement和resultRs没有关闭的状况也很是多。这个也是要重点留意的地方。
二、A"NullPointerException" could be thrown; "tom" is nullablehere
空指针,极为讨厌的问题,主要是编码经验缺乏的体现。通常的高手在编码过程当中,就会第一时间考虑到这类状况,并作相应的处理。解决方式无它,先判断或者先实例化,再访问里面的属性或者成员。
严重
一、Define and throw a dedicated exception instead of using a generic one
定义并抛出一个专用的异常来代替一个通用的异常。
二、Removethis hard-coded password
移除代码里硬编码的密码信息。会有少量的误判的状况,通常是变量包含:PWD或者password,因此若是真的不是硬编码,能够考虑更换变量名称,好比PWD改PW等等。
三、Eitherlog or rethrow this exception
catch异常以后,使用log方式或者throw异常的方式解决。若是业务上真的没有throw或者记录日志的话,可使用log.debug的方式填充来解决问题。
四、Makethis IP "127.0.0.1" address configurable
将IP弄到配置文件中,不要硬编码到代码里。我的以为改动稍大!
五、Make this"public static JSAPI" field final
若是你将这个变量设置为public访问方式,同时又是静态Static方式,就要考虑将它设置为final了,由于这个是共享变量,其它类能够随时随地将它设置为别的值。因此若是是只是当前类使用,能够考虑将公开访问方式改成私有。
六、Makethe enclosing method "static" or remove this set
见代码:
public class MyClass {
private static int count = 0;
public void doSomething() {
//...
count++; // Noncompliant
}
}
不要使用非静态方法去更新静态字段,这样很难得到正确的结果,若是有多个类实例和/或多个线程,则很容易致使错误。理想状况下,静态字段仅从同步静态方法中更新。
七、Override"equals(Object obj)" to comply with the contract of the"compareTo(T o)" method
若是重写了compareTo方法,同时也应重写equals方法。
八、Make"body" transient or serializable.
public class Address {
//...
}
public class Person implements Serializable {
private static final long serialVersionUID = 1905122041950251207L;
private String name;
private Address address; // Noncompliant; Address isn't serializable
}
若是person已经序列化,其成员变量Address也进行序列化。否则转化时会有问题。
9 Floating point numbers should not be tested for equality
浮点类型的数字,不要经过==或者!=方式其它类型比较,由于浮点是不精确的,因此在比较时,会进行类型升级升级原则以下:
· 若是运算符任意一方的类型为double,则另外一方会转换为double
· 不然,若是运算符任意一方的类型为float,则另外一方会转换为float
· 不然,若是运算符任意一方的类型为long,则另外一方会转换为long
· 不然,两边都会转换为int
如下的方式获得的结果都是false。
float myNumber = 3.146;
if ( myNumber == 3.146f ) { //Noncompliant. Because of floating point imprecision, this will be false
if ( myNumber != 3.146f ) { //Noncompliant. Because of floating point imprecision, this will be true
if (myNumber < 4 || myNumber > 4) { // Noncompliant; indirect
float zeroFloat = 0.0f;
if (zeroFloat == 0) { // Noncompliant. Computations may end up with a value close but not equal to zero.
}
因此,要比较浮点数是否相等,须要作的事情是:
排除NaN和无穷
在精度范围内进行比较
正确的例子:
public boolean isEqual(double a, double b) {
if (Double.isNaN(a) || Double.isNaN(b) || Double.isInfinite(a) || Double.isInfinite(b)) {
return false;
}
return (a - b) < 0.001d;
}
十、Thiscall to "contains()" may be a performance hot spot if the collectionis large.
若是collection的记录数很是大的话,它的contains方法的时间复杂度是很高的。因此开发过程当中要注意这一点。下面的是列表:
· ArrayList
contains
remove
· LinkedList
get
contains
· ConcurrentLinkedQueue
size
contains
· ConcurrentLinkedDeque
size
contains
· CopyOnWriteArrayList
add
contains
remove
· CopyOnWriteArraySet
add
contains
remove数据库