終於 我們又開始使用FINDBUGS來檢測代碼的問題了 但因沒又中文版和網上錯誤分析實際很少 所以自己邊處理BUG邊寫文檔 首先在裝好FINDBUGS後 在 project-->properteis-->findbugs裏的2個框的勾點上可以讓改正BUG後自動判斷是否改正了 改正了就自動去掉BUG點 1.Call to equals() comparing different type 2.Class doesn't override equals in superclass 一般就是重寫equals(obj)即可 即public boolean equals(Object obj){ return super.equals(obj);}
serialVersionUID 用來表明類的不同版本間的兼容性 簡單來說,Java的序列化機制是通過在運行時判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來的字節流中的serialVersionUID與本地 相應實體(類)的serialVersionUID進行比較,如果相同就認爲是一致的,可以進行反序列化,否則就會出現序列化版本不一致的異常。 當實現java.io.Serializable接口的實體(類)沒有顯式地定義一個名爲serialVersionUID,類型爲long的變量時,Java序列化機制會根據編譯的class自動生成一個 serialVersionUID作序列化版本比較用,這種情況下,只有同一次編譯生成的class纔會生成相同的serialVersionUID 。 如果我們不希望通過編譯來強制劃分軟件版本,即實現序列化接口的實體能夠兼容先前版本,未作更改的類,就需要顯式地定義一個名爲serialVersionUID,類型爲long 的變量,不修改這個變量值的序列化實體都可以相互進行串行化和反串行化。 也就是這個錯誤 你要定義一個名爲 serialVersionUID,類型爲long的變量 按照新版Eclipse自動填寫規則 就是: 4.Class names shouldn't shadow simple name of superclass 5.Comparison of String parameter using == or != 原因:當比較兩個字符串內容是否相同時,僅當兩個字符串在源文件中都是常量時或者是使用intern()來比較纔可以用==來比較,否則最好使用對象比較方法equal。附 string比較: String str1 = "java"; String str2 = "java"; System.out.print(str1==str2); 結果:true(二者都爲常量) String str1 = new String("java"); String str2 = new String("java"); System.out.print(str1==str2); 結果:false(二者爲對象) String str1 = "java"; String str2 = "blog"; String s = str1+str2; System.out.print(s=="javablog"); 結果:false(s不爲常量,爲對象) String s1 = "java"; String s2 = new String("java"); System.out.print(s1.intern()==s2.intern()); 結果:true(但是intern()方法在效率和實現方式上不統一) 6.Call to equals() comparing different types 7.Equals checks for noncompatible operand 8.equals method always returns false 9.equals() method does not check for null argument 10.Exception is caught when Exception is not thrown 一般人都會這樣寫代碼:
12.Can't close pw since it is always null 13.Non-transient non-serializable instance field in serializable class |
【轉】FINDBUGS錯誤分析日誌
【轉】FINDBUGS錯誤分析日誌
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.