1. 程式人生 > >關於Findbugs的一些常見報錯的翻譯和處理方式

關於Findbugs的一些常見報錯的翻譯和處理方式

在Lab5中要求使用 CheckStyle 和 FindBugs 工具對經過人工走查的 Lab4 程式碼進行自動的靜態程式碼分析。在使用FindBugs的過程中,出現了一些難以理解的報錯,經查閱資料,瞭解了錯誤的原因以及一些大致的解決辦法。

下面是關於FindBugs的一些常見報錯的翻譯和處理方法:

一、Security 關於程式碼安全性防護

1.Dm: Hardcoded constant database password(DMI_CONSTANT_DB_PASSWORD)

程式碼中建立DB的密碼時採用了寫死的密碼。

2.Dm: Empty database password(DMI_EMPTY_DB_PASSWORD)

建立資料庫連線時沒有為資料庫設定密碼,這會使資料庫沒有必要的保護。

3.HRS: HTTP cookie formed from untrustedinput (HRS_REQUEST_PARAMETER_TO_COOKIE)

此程式碼使用不受信任的HTTP引數構造一個HTTP Cookie

4.HRS: HTTP Response splittingvulnerability (HRS_REQUEST_PARAMETER_TO_HTTP_HEADER)

在程式碼中直接把一個HTTP的引數寫入一個HTTP標頭檔案中,它為HTTP的響應暴露了漏洞。

5.SQL: Nonconstant string passed toexecute method on an SQL statement (SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE)

該方法以字串的形式來呼叫SQLstatementexecute方法,它似乎是動態生成SQL語句的方法。這會更容易受到SQL注入攻擊。

6.XSS: JSP reflected cross site scriptingvulnerability (XSS_REQUEST_PARAMETER_TO_JSP_WRITER)

在程式碼中在JSP輸出中直接寫入一個HTTP引數,這會造成一個跨站點的指令碼漏洞。

二、Experimental

1.LG: Potential lost logger changes due toweak reference in OpenJDK (LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)

OpenJDK的引入了一種潛在的不相容問題,特別是,java.util.logging.Logger的行為改變時。它現在使用內部弱引用,而不是強引用。–logger配置改變,它就是丟失對logger的引用,這本是一個合理的變化,但不幸的是一些程式碼對舊的行為有依賴關係。這意味著,當進行垃圾收集時對logger配置將會丟失。例如:

public static void initLogging() throwsException {

 Logger logger =Logger.getLogger("edu.umd.cs");

 logger.addHandler(newFileHandler()); // call to change logger configuration

 logger.setUseParentHandlers(false);// another call to change logger configuration

}

該方法結束時logger的引用就丟失了,如果你剛剛結束呼叫initLogging方法後進行垃圾回收,logger的配置將會丟失(因為只有保持記錄器弱引用)。

public static void main(String[] args)throws Exception {

 initLogging(); // adds a filehandler to the logger

 System.gc(); // logger configurationlost

 Logger.getLogger("edu.umd.cs").info("Somemessage"); // this isn't logged to the file as expected

}

2.OBL: Method may fail to clean up streamor resource (OBL_UNSATISFIED_OBLIGATION)

這種方法可能無法清除(關閉,處置)一個流,資料庫物件,或其他資源需要一個明確的清理行動。

一般來說,如果一個方法開啟一個流或其他資源,該方法應該使用try / finally塊來確保在方法返回之前流或資源已經被清除了。這種錯誤模式基本上和OS_OPEN_STREAMODR_OPEN_DATABASE_RESOURCE錯誤模式相同,但是是在不同在靜態分析技術。我們正為這個錯誤模式的效用收集反饋意見。

三、Bad practice程式碼實現中的一些壞習慣

1.AM: Creates an empty jar file entry(AM_CREATES_EMPTY_JAR_FILE_ENTRY)

呼叫putNextEntry()方法寫入新的 jar 檔案條目時立即呼叫closeEntry()方法。這樣會造成JarFile條目為空。

2.AM: Creates an empty zip file entry(AM_CREATES_EMPTY_ZIP_FILE_ENTRY)

呼叫putNextEntry()方法寫入新的 zip 檔案條目時立即呼叫closeEntry()方法。這樣會造成ZipFile條目為空。

3.BC: Equals method should not assumeanything about the type of its argument(BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS)

equals(Object o)方法不能對引數o的型別做任何的假設。比較此物件與指定的物件。當且僅當該引數不為 null,並且是表示與此物件相同的型別的物件時,結果才為 true

4.BC: Random object created and used onlyonce (DMI_RANDOM_USED_ONLY_ONCE)

隨機建立物件只使用過一次就拋棄

5.BIT: Check for sign of bitwise operation(BIT_SIGNED_CHECK)

檢查位操作符執行是否合理

((event.detail & SWT.SELECTED) > 0)

If SWT.SELECTED is a negative number, thisis a candidate for a bug. Even when SWT.SELECTED is not negative, it seems goodpractice to use '!= 0' instead of '> 0'.

6.CN: Class implements Cloneable but doesnot define or use clone method (CN_IDIOM)

按照慣例,實現此介面的類應該使用公共方法重寫 Object.clone(它是受保護的),以獲得有關重寫此方法的詳細資訊。此介面不包含 clone 方法。因此,因為某個物件實現了此介面就克隆它是不可能的,應該實現此介面的類應該使用公共方法重寫 Object.clone

7.CN: clone method does not callsuper.clone() (CN_IDIOM_NO_SUPER_CALL)

一個非final型別的類定義了clone()方法而沒有呼叫super.clone()方法。例如:B擴充套件自A,如果Bclone方法呼叫了spuer.clone(),而A中的clone沒有呼叫spuer.clone(),就會造成結果型別不準確。要求Aclone方法中呼叫spuer.clone()方法。

8.CN: Class defines clone() but doesn'timplement Cloneable (CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE)

類中定義了clone方法但是它沒有實現Cloneable介面

9.Co: Abstract class defines covariantcompareTo() method (CO_ABSTRACT_SELF)

抽象類中定義了多個compareTo()方法,正確的是覆寫Comparable中的compareTo方法,方法的引數為Object型別,如下例:

int compareTo(T o)  比較此物件與指定物件的順序。

10.Co: Covariant compareTo() methoddefined (CO_SELF_NO_OBJECT)

類中定義了多個compareTo()方法,正確的是覆寫Comparable中的compareTo方法,方法的引數為Object型別

11.DE: Method might drop exception(DE_MIGHT_DROP)

方法可能丟擲異常

12.DE: Method might ignore exception (DE_MIGHT_IGNORE)

方法可能忽略異常

13.DMI: Don't use removeAll to clear acollection (DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION)

不要用removeAll方法去clear一個集合

14.DP: Classloaders should only be createdinside doPrivileged block (DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED)

類載入器只能建立在特殊的方法體內

15.Dm: Method invokes System.exit(...)(DM_EXIT)

在方法中呼叫System.exit(...)語句,考慮用RuntimeException來代替

16.Dm: Method invokes dangerous methodrunFinalizersOnExit (DM_RUN_FINALIZERS_ON_EXIT)

在方法中呼叫了System.runFinalizersOnExit或者Runtime.runFinalizersOnExit方法,因為這樣做是很危險的。

17.ES: Comparison of String parameterusing == or != (ES_COMPARING_PARAMETER_STRING_WITH_EQ)

==或者!=方法去比較String型別的引數

18.ES: Comparison of String objects using== or != (ES_COMPARING_STRINGS_WITH_EQ)

==或者!=去比較String型別的物件

19.Eq: Abstract class defines covariantequals() method (EQ_ABSTRACT_SELF)

20.Eq: Equals checks for noncompatibleoperand (EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)

equals方法檢查不一致的操作。兩個類根本就是父子關係而去呼叫equals方法去判讀物件是否相等。

public boolean equals(Object o) {

  if (o instanceof Foo)

    returnname.equals(((Foo)o).name);

  else if (o instanceof String)

    return name.equals(o);

  else return false;

21.Eq: Class defines compareTo(...) anduses Object.equals() (EQ_COMPARETO_USE_OBJECT_EQUALS)

類中定義了compareTo方法但是繼承了Object中的compareTo方法

22.Eq: equals method fails for subtypes(EQ_GETCLASS_AND_CLASS_CONSTANT)

類中的equals方法可能被子類中的方法所破壞,當使用類似於Foo.class == o.getClass()的判斷時考慮用this.getClass() == o.getClass()來替換

23.Eq: Covariant equals() method defined(EQ_SELF_NO_OBJECT)

類中定義了多個equals方法。正確的做法是覆寫Object中的equals方法,它的引數為Object型別的物件。

24.FI: Empty finalizer should be deleted(FI_EMPTY)

為空的finalizer方法應該刪除。一下關於finalizer的內容省略

25.GC: Unchecked type in generic call(GC_UNCHECKED_TYPE_IN_GENERIC_CALL)

This call to a generic collection methodpasses an argument while compile type Object where a specific type from thegeneric type parameters is expected. Thus, neither the standard Java typesystem nor static analysis can provide useful information on whether the objectbeing passed as a parameter is of an appropriate type.

26.HE: Class defines equals() but nothashCode() (HE_EQUALS_NO_HASHCODE)

方法定義了equals方法卻沒有定義hashCode方法

27.HE: Class defines hashCode() but notequals() (HE_HASHCODE_NO_EQUALS)

類定義了hashCode方法去沒有定義equal方法

28.HE: Class defines equals() and usesObject.hashCode() (HE_EQUALS_USE_HASHCODE)

一個類覆寫了equals方法,沒有覆寫hashCode方法,使用了Object物件的hashCode方法

29.HE: Class inherits equals() and usesObject.hashCode() (HE_INHERITS_EQUALS_USE_HASHCODE)

子類繼承了父類的equals方法卻使用了ObjecthashCode方法

30.IC: Superclass uses subclass duringinitialization (IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZATION)

子類在父類未初始化之前使用父類物件例項

public class CircularClassInitialization {

        staticclass InnerClassSingleton extends CircularClassInitialization {

static InnerClassSingleton singleton = newInnerClassSingleton();

        }      

        staticCircularClassInitialization foo = InnerClassSingleton.singleton;

}

31.IMSE: Dubious catching ofIllegalMonitorStateException (IMSE_DONT_CATCH_IMSE)

捕捉違法的監控狀態異常,例如當沒有獲取到物件鎖時使用其waitnotify方法

32.ISC: Needless instantiation of classthat only supplies static methods (ISC_INSTANTIATE_STATIC_CLASS)

為使用靜態方法而建立一個例項物件。呼叫靜態方法時只需要使用類名+靜態方法名就可以了。

33.It: Iterator next() method can't throwNoSuchElementException (IT_NO_SUCH_ELEMENT)

迭代器的next方法不能夠丟擲NoSuchElementException

34.J2EE: Store of non serializable objectinto HttpSession (J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION)

HttpSession物件中儲存非連續的物件

35.JCIP: Fields of immutable classesshould be final (JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS)

 The class is annotated withnet.jcip.annotations.Immutable, and the rules for that annotation require thatall fields are final. .

36.NP: Method with Boolean return typereturns explicit null (NP_BOOLEAN_RETURN_NULL)

返回值為boolean型別的方法直接返回null,這樣會導致空指標異常

37.NP: equals() method does not check fornull argument (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT)

變數呼叫equals方法時沒有進行是否為null的判斷

38.NP: toString method may return null(NP_TOSTRING_COULD_RETURN_NULL)

toString方法可能返回null

39.Nm: Class names should start with anupper case letter (NM_CLASS_NAMING_CONVENTION)

類的名稱以大寫字母名稱開頭

40.Nm: Class is not derived from anException, even though it is named as such (NM_CLASS_NOT_EXCEPTION)

類的名稱中含有Exception但是卻不是一個異常類的子類,這種名稱會造成混淆

41.Nm: Confusing method names(NM_CONFUSING)

令人迷惑的方面命名

42.Nm: Field names should start with alower case letter (NM_FIELD_NAMING_CONVENTION)

final型別的欄位需要遵循駝峰命名原則

43.Nm: Use of identifier that is a keywordin later versions of Java (NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER)

驗證是否是java預留關鍵字

44.Nm: Use of identifier that is a keywordin later versions of Java (NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER)

驗證是否時java中的關鍵字

45.Nm: Method names should start with alower case letter (NM_METHOD_NAMING_CONVENTION)

方法名稱以小寫字母開頭

46.Nm: Class names shouldn't shadow simplename of implemented interface (NM_SAME_SIMPLE_NAME_AS_INTERFACE)

實現同一介面實現類不能使用相同的名稱,即使它們位於不同的包中

47.Nm: Class names shouldn't shadow simplename of superclass (NM_SAME_SIMPLE_NAME_AS_SUPERCLASS)

繼承同一父類的子類不能使用相同的名稱,即使它們位於不同的包中

48.Nm: Very confusing method names (butperhaps intentional) (NM_VERY_CONFUSING_INTENTIONAL)

很容易混淆的方法命名,例如方法的名稱名稱使用使用大小寫來區別兩個不同的方法。

49.Nm: Method doesn't override method insuperclass due to wrong package for parameter (NM_WRONG_PACKAGE_INTENTIONAL)

由於錯誤引用了不同包中相同類名的物件而不能夠正確的覆寫父類中的方法

import alpha.Foo;

public class A {

  public int f(Foo x) { return 17; }

}

import beta.Foo;

public class B extends A {

  public int f(Foo x) { return 42; }

  public int f(alpha.Foo x) { return27; }

}

50.ODR: Method may fail to close databaseresource (ODR_OPEN_DATABASE_RESOURCE)

方法中可能存在關閉資料連線失敗的情況

51.OS: Method may fail to close stream(OS_OPEN_STREAM)

方法中可能存在關閉流失敗的情況

52.OS: Method may fail to close stream onexception (OS_OPEN_STREAM_EXCEPTION_PATH)

方法中可能存在關閉流時出現異常情況

53.RC: Suspicious reference comparison toconstant (RC_REF_COMPARISON_BAD_PRACTICE)

當兩者為不同型別的物件時使用equals方法來比較它們的值是否相等,而不是使用==方法。例如比較的兩者為java.lang.Integer,java.lang.Float

54.RC: Suspicious reference comparison ofBoolean values (RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN)

使用== 或者 !=操作符來比較兩個 Boolean型別的物件,建議使用equals方法。

55.RR: Method ignores results ofInputStream.read() (RR_NOT_CHECKED)

InputStream.read方法忽略返回的多個字元,如果對結果沒有檢查就沒法正確處理使用者讀取少量字元請求的情況。

56.RR: Method ignores results ofInputStream.skip() (SR_NOT_CHECKED)

InputStream.skip()方法忽略返回的多個字元,如果對結果沒有檢查就沒法正確處理使用者跳過少量字元請求的情況

57.RV: Method ignores exceptional returnvalue (RV_RETURN_VALUE_IGNORED_BAD_PRACTICE)

方法忽略返回值的異常資訊

58.SI: Static initializer creates instancebefore all static final fields assigned (SI_INSTANCE_BEFORE_FINALS_ASSIGNED)

在所有的static final欄位賦值之前去使用靜態初始化的方法建立一個類的例項。

59.Se: Non-serializable value stored intoinstance field of a serializable class (SE_BAD_FIELD_STORE)

非序列化的值儲存在宣告為序列化的的非序列化欄位中

60.Se: Comparator doesn't implementSerializable (SE_COMPARATOR_SHOULD_BE_SERIALIZABLE)

Comparator介面沒有實現Serializable介面

61.Se: Serializable inner class(SE_INNER_CLASS)

序列化內部類

62.Se: serialVersionUID isn't final(SE_NONFINAL_SERIALVERSIONID)

關於UID類的檢查內容省略

63.Se: Class is Serializable but itssuperclass doesn't define a void constructor (SE_NO_SUITABLE_CONSTRUCTOR)

子類序列化時父類沒有提供一個void的建構函式

64.Se: Class is Externalizable but doesn'tdefine a void constructor (SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION)

Externalizable 例項類沒有定義一個void型別的建構函式

65.Se: The readResolve method must bedeclared with a return type of Object. (SE_READ_RESOLVE_MUST_RETURN_OBJECT)

readResolve從流中讀取類的一個例項,此方法必須宣告返回一個Object型別的物件

66.Se: Transient field that isn't set bydeserialization. (SE_TRANSIENT_FIELD_NOT_RESTORED)

This class contains a field that isupdated at multiple places in the class, thus it seems to be part of the stateof the class. However, since the field is marked as transient and not set inreadObject or readResolve, it will contain the default value in anydeserialized instance of the class.

67.SnVI: Class is Serializable, butdoesn't define serialVersionUID (SE_NO_SERIALVERSIONID)

一個類實現了Serializable介面但是沒有定義serialVersionUID型別的變數。序列化執行時使用一個稱為 serialVersionUID 的版本號與每個可序列化類相關聯,該序列號在反序列化過程中用於驗證序列化物件的傳送者和接收者是否為該物件載入了與序列化相容的類。如果接收者載入的該物件的類的 serialVersionUID 與對應的傳送者的類的版本號不同,則反序列化將會導致 InvalidClassException。可序列化類可以通過宣告名為 "serialVersionUID" 的欄位(該欄位必須是靜態 (static)、最終 (final) long 型欄位)顯式宣告其自己的 serialVersionUID

 ANY-ACCESS-MODIFIER static finallong serialVersionUID = 42L;

68.UI: Usage of GetResource may be unsafeif class is extended (UI_INHERITANCE_UNSAFE_GETRESOURCE)

當一個類被子類繼承後不要使用this.getClass().getResource(...)來獲取資源

四、Correctness關於程式碼正確性相關方面的

1.BC: Impossible cast (BC_IMPOSSIBLE_CAST)

不可能的類轉換,執行時會丟擲ClassCastException

2.BC: Impossible downcast(BC_IMPOSSIBLE_DOWNCAST)

父類在向下進行型別轉換時丟擲ClassCastException

3.BC: Impossible downcast of toArray()result (BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY)

集合轉換為陣列元素時發生的類轉換錯誤。

This code is casting the result of callingtoArray() on a collection to a type more specific than Object[], as in: 

String[]getAsArray(Collection<String> c) {

  return (String[]) c.toArray();

  }

This will usually fail by throwing aClassCastException. The toArray() of almost all collections return an Object[].They can't really do anything else, since the Collection object has noreference to the declared generic type of the collection. 

The correct way to do get an array of aspecific type from a collection is to use c.toArray(new String[]); orc.toArray(new String[c.size()]); (the latter is slightly more efficient). 

4.BC: instanceof will always return false(BC_IMPOSSIBLE_INSTANCEOF)

採用instaneof方法進行比較時總是返回false。前提是保證它不是由於某些邏輯錯誤造成的。

5.BIT: Incompatible bit masks (BIT_AND)

錯誤的使用&位操作符,例如(e & C)

6.BIT: Check to see if ((...) & 0) ==0 (BIT_AND_ZZ)

檢查恆等的邏輯錯誤

7.BIT: Incompatible bit masks (BIT_IOR)

錯誤的使用|位操作符,例如(e | C)

8.BIT: Check for sign of bitwise operation(BIT_SIGNED_CHECK_HIGH_BIT)

檢查邏輯運算子操作返回的標識。例如((event.detail& SWT.SELECTED) > 0),建議採用!=0代替>0

9.BOA: Class overrides a methodimplemented in super class Adapter wrongly (BOA_BADLY_OVERRIDDEN_ADAPTER)

子類錯誤的覆寫父類中用於適配監聽其他事件的方法,從而導致當觸發條件發生時不能被監聽者呼叫

10.Bx: Primitive value is unboxed andcoerced for ternary operator (BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR)

在三元運算子操作時如果沒有對值進行封裝或者型別轉換。例如:b ? e1 : e2

11.DLS: Dead store of class literal (DLS_DEAD_STORE_OF_CLASS_LITERAL)

以類的字面名稱方式為一個欄位賦值後再也沒有去使用它,在1.4jdk中它會自動呼叫靜態的初始化方法,而在jdk1.5中卻不會去執行。

12.DLS: Overwritten increment(DLS_OVERWRITTEN_INCREMENT)

覆寫增量增加錯誤i = i++

13.DMI: Bad constant value for month(DMI_BAD_MONTH)

hashNext方法呼叫next方法。

14.DMI: Collections should not containthemselves (DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES)

集合沒有包含他們自己本身。

15.DMI: Invocation of hashCode on an array(DMI_INVOKING_HASHCODE_ON_ARRAY)

陣列直接使用hashCode方法來返回雜湊碼。

int [] a1 = new int[]{1,2,3,4};

        System.out.println(a1.hashCode());

        System.out.println(java.util.Arrays.hashCode(a1));

16.DMI: Double.longBitsToDouble invoked onan int (DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT)

17.DMI: Vacuous call to collections(DMI_VACUOUS_SELF_COLLECTION_CALL)

集合的呼叫不能被感知。例如c.containsAll(c)總是返回true,而c.retainAll(c)的返回值不能被感知。

18.Dm: Can't use reflection to check forpresence of annotation without runtime retention(DMI_ANNOTATION_IS_NOT_VISIBLE_TO_REFLECTION)

Unless an annotation has itself beenannotated with @Retention(RetentionPolicy.RUNTIME), the annotation can't beobserved using reflection (e.g., by using the isAnnotationPresent method). .

19.Dm: Useless/vacuous call to EasyMockmethod (DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD)

While ScheduledThreadPoolExecutor inheritsfrom ThreadPoolExecutor, a few of the inherited tuning methods are not usefulfor it. In particular, because it acts as a fixed-sized pool using corePoolSizethreads and an unbounded queue, adjustments to maximumPoolSize have no usefuleffect.

20.EC: equals() used to compare array andnonarray (EC_ARRAY_AND_NONARRAY)

陣列物件使用equals方法和非陣列物件進行比較。即使比較的雙方都是陣列物件也不應該使用equals方法,而應該比較它們的內容是否相等使用java.util.Arrays.equals(Object[],Object[]);

21.EC: equals(...) used to compareincompatible arrays (EC_INCOMPATIBLE_ARRAY_COMPARE)

使用equls方法去比較型別不相同的陣列。例如:String[] and StringBuffer[], or String[] andint[]

22.EC: Call to equals() with null argument(EC_NULL_ARG)

呼叫equals的物件為null

23.EC: Call to equals() comparingunrelated class and interface (EC_UNRELATED_CLASS_AND_INTERFACE)

使用equals方法比較不相關的類和介面

24.EC: Call to equals() comparingdifferent interface types (EC_UNRELATED_INTERFACES)

呼叫equals方法比較不同型別的介面

25.EC: Call to equals() comparingdifferent types (EC_UNRELATED_TYPES)

呼叫equals方法比較不同型別的類

26.EC: Using pointer equality to comparedifferent types (EC_UNRELATED_TYPES_USING_POINTER_EQUALITY)

This method uses using pointer equality tocompare two references that seem to be of different types. The result of thiscomparison will always be false at runtime.

27.Eq: equals method always returns false(EQ_ALWAYS_FALSE)

使用equals方法返回值總是false

28.Eq: equals method always returns true(EQ_ALWAYS_TRUE)

equals方法返回值總是true

29.Eq: equals method compares class namesrather than class objects (EQ_COMPARING_CLASS_NAMES)

使用equals方法去比較一個類的例項和類的型別

30.Eq: Covariant equals() method definedfor enum (EQ_DONT_DEFINE_EQUALS_FOR_ENUM)

This class defines an enumeration, andequality on enumerations are defined using object identity. Defining acovariant equals method for an enumeration value is exceptionally bad practice,since it would likely result in having two different enumeration values thatcompare as equals using the covariant enum method, and as not equal whencompared normally. Don't do it.

31.Eq: equals() method defined thatdoesn't override equals(Object) (EQ_OTHER_NO_OBJECT)

類中定義的equals方法時不要覆寫equalsObject)方法

32.Eq: equals() method defined thatdoesn't override Object.equals(Object) (EQ_OTHER_USE_OBJECT)

類中定義的equals方法時不要覆寫Object中的equalsObject)方法

33.Eq: equals method overrides equals insuperclass and may not be symmetric (EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC)

34.Eq: Covariant equals() method defined,Object.equals(Object) inherited (EQ_SELF_USE_OBJECT)

類中定義了一組equals方法,但是都是繼承的java.lang.Object class中的equals(Object)方法

35.FE: Doomed test for equality to NaN(FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER)

This code checks to see if a floatingpoint value is equal to the special Not A Number value (e.g., if (x ==Double.NaN)). However, because of the special semantics of NaN, no value isequal to Nan, including NaN. Thus, x == Double.NaN always evaluates to false.To check to see if a value contained in x is the special Not A Number value,use Double.isNaN(x) (or Float.isNaN(x) if x is floating point precision).

36.FS: Format string placeholderincompatible with passed argument (VA_FORMAT_STRING_BAD_ARGUMENT)

錯誤使用引數型別來格式化字串

37.FS: The type of a supplied argumentdoesn't match format specifier (VA_FORMAT_STRING_BAD_CONVERSION)

指定的格式字串和引數型別不匹配,例如:String.format("%d","1")

38.FS: MessageFormat supplied where printfstyle format expected (VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED)

但用Stringformat方法時實際呼叫了MessageFormat中乾的格式化方法而引起格式化結果出錯。

39.FS: More arguments are passed than areactually used in the format string (VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED)

使用Stringformat方法時有非法的引數也經過了格式化操作。

40.FS: Illegal format string(VA_FORMAT_STRING_ILLEGAL)

格式化String物件語句錯誤

相關推薦

關於Findbugs一些見報翻譯處理方式

在Lab5中要求使用 CheckStyle 和 FindBugs 工具對經過人工走查的 Lab4 程式碼進行自動的靜態程式碼分析。在使用FindBugs的過程中,出現了一些難以理解的報錯,經查閱資料,瞭解了錯誤的原因以及一些大致的解決辦法。下面是關於FindBugs的一些常見

Java見報資訊及解決方式

1. com.alibaba.fastjson.JSONException: syntax error, expect {, actual int, pos 1, json : 0 com.alibaba.fastjson.JSONException: syntax err

使用iis7.5搭建ASP網站見報問題處理

配置 info ont 設置 發布 問題處理 ID 直接 class iis7.5 解析 ASP 出錯主要有三類: 1. 權限問題 2. 程序問題 3. 應用池問題 1. 權限問題: 如果訪問網站後有典型的無權查看報錯提醒, 那麽重新配置相關用戶的權限即可, 最簡單的辦

[轉][Oracle]見報處理

oracl 備份 歸檔 -- log .com del com cmd 1、ORA-00257 參考自:https://jingyan.baidu.com/article/f71d6037ccf1301ab641d1f0.html 查詢 select * from V$FL

使用mina傳遞物件注意問題點以及見報異常處理

最常見的異常,一個是不能序列化java.io.NotSerializableException:,另一個就是java.io.InvalidClassException,還有java.nio.charset.MalformedInputException   1. 首先是客戶端和服務

react-native 見報處理

1.java.io.IOException: Could not delete path 'F:\xxxx\android\app\build\intermediates\transforms\dex\debug\folders\1000'.解決:(許可權問題導致)以管理員身份執行控制檯再執行rea

navicat 見報處理

ncorrect table definition;there can be only one 2、錯誤原因 建表時id,勾選自動遞增,不是null,但是沒有將其設定成為主鍵 3、解決辦法 將表中的id定義成主鍵 MySQL 錯誤:there c

Carthage的安裝使用,以及見報解決

1、Carthage簡單概念介紹以及與Cocopods的區別:github地址 參考博文地址 Carthage 類似於 CocoaPods,為使用者管理第三方框架和依賴,但不會自動修改專案檔案和生成配置 Carthage 是去中心化的依賴管理工具,安裝依賴時不需要去中心倉

Vuejs入門配置一些用報內容及解決方案

曾幾何時聽過這樣一句話:2016年是JavaScript最火的一年;因為湧現出了很多優秀的前端框架,比如:vue,ng,react 這三個以react為首的被稱作前端三大框架。聽著就很吊,有木有?原先

zabbix見報問題處理

①報錯: zabbix_agentd [20529]: cannot create Semaphore: [28] No space left on device zabbix_agentd [20529]: unable to create mutex for log f

Mysql見報處理

1.報錯資訊 Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using the

工作隨記2-前端開發見報處理(不定時更新)

1、頁面有空的src屬性(src = "")報錯資訊:GET http://xxxx.com/xxx/ 403 (Forbidden)   :formatted:181 2、ios事件代理on()不起作用 $(document).on("click", ".submitBt

見報處理

1.未能找到引用的元件“Microsoft.Office.Interop.Outlook” 未能找到引用的元件“Microsoft.Office.Interop.Excel” 報錯: 錯誤 CS0234 The type or namespace name 'Offic

LNMP下見報處理

(一)在啟動php-fpm,出現以下錯誤:[[email protected] sbin]# ./php-fpm [18-Sep-2016 07:28:34] ERROR: unable to bind listening socket for address '127.0.0.1:10086':

struts2學習筆記——見報及解決方法匯總(持續更新)

允許 clip 之間 con ack 技術 ext tro height 操作環境:(1)Tomcat 7.0.72.0      (2)OS Name: Windows 7      (3)JVM Version: 1.8.0_25-b18      (4)e

JS見報與修復

移除 except 一個 symbol emp 單個 aam 找到 函數 如何讀懂錯誤? 首先,讓我們快速看下錯誤信息的結構。理解結構有助於理解錯誤,如果遇到列表之外的錯誤會減少麻煩。 Chrome 中典型的錯誤像這樣: Uncaught TypeError: undefi

Hexo 搭建博客 本地運行 見報及解決辦法

render error: 錯誤 exp 手動配置 fig.yml 文件中 size server 作為一名在hexo方面的新手,我在使用hexo編輯文檔時遇到了很多問題,hexo generate編譯的時候遇到了各種錯誤。 在此將這些錯誤及其解決方案記錄下來,以便日後查證

mybatis--Mapper 見報總結(持續總結)

例如 ins nts 需要 重復 tty collect per 檢查 本文版權歸 遠方的風lyh和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。 1.The content of elements must consist of well-fo

common 包引入見報

int jar包 -c obj arr 參考 新版 trac except 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 缺少相應jar包都會有異常,根據異常找jar包導入...... 這裏我說下lang包,因為這個包我找了好半天: 我用的是: c

Appium見報問題解決方法-2

ron authorize 點擊 設備 auth .so 方案 成功 正常 上一篇記錄了部分Appium報錯的解決方案,現在繼續記錄 4、運行閃退 直接如上運行,閃退。 解決方法: 運行前,要先啟動Appium客戶端,之後再運行腳本,就不會出現這個問題。 5.socke