Rule |
规则 |
AWT |
|
Avoid using java.awt.peer interface directly |
不要直接使用java.awt.peer接口 |
Casting |
|
Avoid returning java.lang.Object,downcast to specific type instead |
不要直接返回java.lang.Object,尽量转换成具体的类型 |
Avoid casting primitive types to lower precision |
不要把原始类型转换成更底层的类型 |
Cloneable |
|
Implement Cloneable when you override clone() |
覆盖clone()方法时,最好实现Cloneable接口 |
Avoid implementing Cloneable without overring clone() |
如果没有覆盖clone()方法,就不要实现Cloneable接口 |
Always invoke super.clone() from a clone() |
在clone()方法中总是调用super.clone() |
Comparison |
|
Avoid using java.lang.Class.getName() to compare classes |
不要使用java.lang.Class.getName()来比较类 |
Always override both java.lang.Object.equals() and java.lang.Object.hashCode() |
要覆盖java.lang.Object.equals()和 java.lang.Object.hashCode() |
Always use instanceof in an equals() method implementation |
在实现equals()方法时要使用instanceof操作符 |
Always place constants on the left side of the equals() |
要把常量放在equals()方法的左边 |
Avoid using == and != for java.lang.Object comparisons |
不要使用== 和 !=来比较ava.lang.Object |
Conditional |
|
Avoid using negation in if else conditions |
不要在if…else条件中使用否定判断 |
Avoid using if/else statements for short conditions |
不要对短的条件使用if…else语句 |
Constructors |
|
Avoid calling an abstract method in a constructor in an abstract class |
不要在抽象类的构造函数中调用抽象方法 |
Avoid calling an overridable method in a constructor |
不要在构造函数中调用可覆盖的方法 |
Declaration |
|
Avoid C-styntax when declaring arrays |
在声明数组时不要使用C风格的语法 |
Avoid using explicit string literals, declare constants instead |
不要直接使用明文字符串,把它声明为常量 |
Avoid using interfaces or abstract classes just to declare common constants |
不要仅仅为了声明通用的常量而使用接口或抽象类 |
Avoid declaring variables of basic and array types in the same statement |
不要在同一个语句中声明基本类型变量和数组变量 |
Avoid declaring multiple variables in a single statement |
不要在一个语句中声明多个变量 |
Exceptions |
|
Avoid catching a checked exception that is not thrown within the try{} block |
不要捕获try{}语句块中没有抛出的Exception |
Avoid using instanceof operator to check the type of exception in the catch clause |
不要在cathch语句中使用instanceof操作符来判断Exception的类型 |
Always list specific checked exceptions in the throws clause |
在throws语句中列举出所有确定的Exception |
Initialization |
|
Avoid changing the value of a method parameter |
不要改变方法的参数 |
Avoid chaining assignment operators |
不要进行连锁赋值操作 |
Always initialize static fields |
要初始化静态域 |
Loop |
|
Avoid assigning loop control variables in the body of for loops |
不要在循环体中给控制循环的变量赋值 |
Avoid using continue statements |
尽量不要使用continue语句 |
Avoid a for loop without a condition |
不要使用没有条件控制的for循环 |
Avoid a for loop without an initializer and an incrementor |
不要使用没有初始状态和增加器for循环 |
Null |
|
Avoid returning null instead of empty array |
不要用null代替空数组返回 |
Avoid returning null instead of Enumeration |
不要用null代替枚举类型返回 |
Avoid returning null instead of Iterator |
不要用null代替迭代返回 |
Portability |
|
Avoid hard coding file separators when creating a java.io.File |
在创建java.io.File时,不要硬编码文件分隔符 |
Avoid hard coding \\n and \\r as line separators |
不要使用硬编码\\n 和\\r作为换行符 |
Avoid calling java.lang.System.getenv() |
不要调用java.lang.System.getenv() |
Reflection |
|
Avoid calling java.lang.Class.getDeclaredField() |
不要调用java.lang.Class.getDeclaredField() |
Avoid calling java.lang.Class.getDeclaredMethod() |
不要调用java.lang.Class.getDeclaredMethod() |
Avoid calling java.lang.Class.getField() |
不要调用java.lang.Class.getField() |
Avoid calling java.lang.Class.getMethod() |
不要调用java.lang.Class.getMethod() |
Serialization |
|
Always declare readObject() and writeObject() as private in externalizable or serializable classes |
在Externalizable和Serializable接口的实现类中,要把readObject() 和writeObject()方法声明为私有的 |
Always declare readResolve() and writeReplace() as protected in externalizable or serializable classes |
在Externalizable和Serializable接口的实现类中,要把readResolve () 和writeReplace ()方法声明为保护的 |
Avoid declaring non-transient fields of non-serializable type inside of a serializable class |
不要在Serializable接口的实现类中声明非Serializable类型的非transient 域 |
Always create a static final serialVersionUID field in serializable classes |
在Serializable接口的实现类中创建一个static final的VersionUID |
Avoid declaring transient fields in non-serializable classes |
不要在非Serializable接口的实现类中声明transient域 |
Statement |
|
Avoid empty if statements and empty loops |
避免空的if语句和空循环 |
Always surround if and loop statements with curly braces |
把if和循环语句放在括号中 |
Switch |
|
Avoid switch statements with few branches, use if else instead |
用if...else语句替换分支很少的switch语句 |
Always provide break at the end of every case statement |
在每个case语句后面加上break语句 |
Always provide the default label in switch statements |
为switch语句提供defaul标签 |
Threads |
|
Avoid extending java.lang.Thread |
不要扩展Thread类 |
Avoid using java.lang.Object.notify(), use java.lang.Object.notifyAll() instead |
用java.lang.Object.notifyAll()代替java.lang.Object.notify() |
Avoid overriding a synchronized method with a non-synchronized one |
不要用synchronized方法覆盖非synchronized方法 |
Avoid using synchronized modifier in method declaration |
不要在方法的声明中添加synchronized修饰符 |
Avoid using "this" as a lock in synchronized statements |
Avoid using "this" as a lock in synchronized statements 不要在synchronized语句使用this |
Avoid using java.lang.Object.wait() outside of a while loop |
不要在while循环之外使用java.lang.Object.wait() |
Avoid using while sleep, use wait notify instead |
用wait notify替代while sleep |