Fault Detection Serialization Correct Field serialVersionUID If a serializable class defines a field serialVersionUID this field has to be final, static and of type long. Correct Serialization Methods For serialization to work, readObject() and writeObject() should be private. java.io.Externalizable with no public zero-argument constructor An externalizable class must have a public zero-argument constructor. Non-Serializable extended by Serializable A non-serializable class, extended by a serializable class, must have a zero-argument constructor. Serializable Inner-Classes Find non-serializable classes that have a serializable inner-class. Non-serializable Comparators Sorted Collections using this comparator will also not be serializable. Localization java.lang.String#toUpperCase() and java.lang.String#toLowerCase() Replace these methods by their locale-parameterized versions. Overriding Override hashCode when overriding equals Container classes like java.util.HashMap or java.util.Hashtable will only call equals on objetcs with the same hashCode. java.lang.Object#equals(java.lang.Object) To override java.lang.Object#equals(java.lang.Object) the parameter has to be java.lang.Object and the return type boolean. java.lang.Cloneable By convention, classes that implement this interface should override java.lang.Object#clone() (which is protected) with a public method. See {@link java.lang.Object#clone()} for details on overriding this. Clone implemented but not inheriting from java.lang.Cloneable When implementing Object#clone() you should inheriting from java.lang.Cloneable Concurrency / Synchronization java.lang.Thread#run() Find threads that inherit the empty definition of java.lang.Thread#run(). java.lang.Runnable#run() Direct calls to java.lang.Runnable#run() instead of using java.lang.Thread#start(). Waiting for a Condition The method wait() should not be called on a java.util.concurrent.locks.Condition, instead the await methods should be used. Returning a JDK Format class Since the Format classes are not synchronized these instances should not be non-private accessible even if the method returning the instance is synchronized itself. Typing Error Typo in java.lang.Object#hashCode() Typo in java.lang.Object#equals(java.lang.Object) Typo in java.lang.Object#toString() Typo in java.lang.Comparable#compareTo(java.lang.Object) Did you confound Number#valueOf with Number#getNumber Method calls like java.lang.Integer#getInteger(java.lang.String) do not transform strings to the concrete numbers but determine the int/short/float/... value of the system property with the specified name. J2EE Conventions Enterprise JavaBeans EJB Component static fields Duplicated Classes Find references to static fields that are no constants