1. 程式人生 > >FindBugs錯誤描述和解決方法

FindBugs錯誤描述和解決方法

(一)[DLS_DEAD_LOCAL_STORE]
描述: Dead store to 未使用的區域性變數
解決方法:區域性變數定義後未使用;例項化物件後又重新對該物件賦值


(二)[ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD] 
描述:Write to static field 通過例項方法更新靜態屬性
常見於常量類,直接通過類名.常量名獲取的方式違背了封裝的原則,findbugs不提倡使用,而如果將常量改成靜態成員變數,又因為spring不支援靜態注入導致不能實現,解決方法是非靜態的setter呼叫靜態的setter方法給靜態成員變數賦值。
解決方法:
常量類F:
class F{
public static String a = “123”;
}
常量a改為靜態成員變數,通過F.getA()獲取,且由於spring不支援靜態注入,改為:
class F{
    private static String a;
    public static Integer getA() {
return a;
}
public void setA(String a) {
setAValue(a);
}
public static void setAValue(String a) {
F.a = a;
}
}


(三)[BX_UNBOXING_IMMEDIATELY_REBOXED]
描述: Boxed value is unboxed and then immediately reboxed  裝箱的值被拆箱,然後立刻重新裝箱了
常見的是三目運算時,同時存在基本型別和包裝型別。
解決方法:
Integer a = null;
//...
a = (a == null)?0:a;
此問題在於a不為null時,會被拆箱,賦值時再裝箱。這是自動裝箱拆箱的特性,只要運算中有不同型別,當涉及到型別轉換時,編譯器就會向下轉型,再進行運算。修改方法,統一型別:
Integer a = null;
//...
a = (a == null)?Integer.valueOf(0):a;


(四)[SE_BAD_FIELD] 
描述: Non-transient non-serializable instance field in serializable class在可序列化的類中存在不能序列化或者不能暫存的資料
解決方法:
方法1:序列化該物件
方法2:當採用struts2框架開發,不可避免的此問題會大量出現,因為ActionSupport實現了序列化介面,action繼承了此類,而service沒序列化,所以在action中引用service物件時提示此錯誤,最簡單的解決方法是將service物件宣告成transient,即service不需要序列化
方法3(未驗證):To avoid java serialization you need to implement writeObject() and readObject() method in your Class and need to throw NotSerializableException from those method.(action中實現這兩個方法?)
private void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException {
    throw new java.io.NotSerializableException( getClass().getName() );
}
private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException {
    throw new java.io.NotSerializableException( getClass().getName() );
}


(五)[NP_LOAD_OF_KNOWN_NULL_VALUE] 
描述: Load of known null value載入已知是null的值
解決方法:已知方法引數為null是,直接傳遞null而不是引數名


(六)[REC_CATCH_EXCEPTION]
描述: Exception is caught when Exception is not thrown 過泛地捕獲異常或捕獲異常後未做任何處理
解決方法:異常分類捕獲(至少要打印出此異常物件)


(七)[NP_NULL_PARAM_DEREF]
描述: Null passed for nonnull parameter  把空值傳給了非空的引數
解決方法:增加非空判斷


(八)[NP_IMMEDIATE_DEREFERENCE_OF_READLINE]
描述: Immediate dereference of the result of readLine() 立即引用了readLine()的結果
解決方法:判斷readLine的結果是否為空


(九)[EI_EXPOSE_REP] 惡意程式碼漏洞
描述:may expose internal representation by returning  getter方法返回引用型別
eclipse自動生成的引用型別(Object、陣列、Date等)的getter、setter方法會得到或通過對可變物件的引用操作而暴露程式碼內部實現,解決方法很多,只要返回的或賦值的物件不是原引用物件即可。
解決方法:
以Date型別為例:
public Date getHappenTime() {
if(happenTime != null){
return (Date) happenTime.clone();
}
    return null;
}


(十)[ EI_EXPOSE_REP2] 惡意程式碼漏洞
描述:may expose internal representation by storing an externally mutable object into  setter方法返回引用型別
eclipse自動生成的引用型別(Object、陣列、Date等)的getter、setter方法會得到或通過對可變物件的引用操作而暴露程式碼內部實現,解決方法很多,只要返回的或賦值的物件不是原引用物件即可。
解決方法:
以Date型別為例:
public void setHappenTime(Date happenTime) {
if(happenTime != null){
this.happenTime = (Date) happenTime.clone();
}else{
this.happenTime = null;
}
}

相關推薦

FindBugs錯誤描述解決方法

(一)[DLS_DEAD_LOCAL_STORE] 描述: Dead store to 未使用的區域性變數 解決方法:區域性變數定義後未使用;例項化物件後又重新對該物件賦值 (二)[ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD]  描述:Write to static fie

FindBugs常見錯誤描述解決方法

SHOULD BE A STATIC INNER CLASS 官方介紹: This class is an inner class, but does not use its embedded reference to the object which created i

關於Maven的錯誤集合解決方法

關於maven的錯誤集合 1.Java compiler level does not match the version of the installed Java project facet 當我把jdk版本換成1.8的時候,會報錯如下:

ABAP--關於Unicode的常見錯誤解決方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

mysql load data遇到的兩個錯誤解決方法

ora sele rwx oba color term 兩個 讀寫 nal 1.load數據遇到報錯1 mysql> load data infile "/root/mysql_test/mysql_t1data" into table t1; ERROR 1290

分享一些python中的錯誤解決方法

 1. SyntaxError: 'return' outside function 解決: 將return 放在方法體中,return不能在方法以外使用 2.name='小王'    age=16    print('我的名字是'+

一個JAVA單例模式的典型錯誤應用的分析解決方法

                問題來自論壇,其程式碼如下:[java] view plain copy print?import java.sql.Connection;  import java.sql.PreparedStatement;  import java.sql.ResultSet;  imp

nginx 403 Forbidden錯誤的原因解決方法

問題總是等著自己去解決,剛弄了下nginx開機自啟動和開機禁用防火牆,可是在瀏覽器訪問卻報了403 Forbidden錯誤。 檢視錯誤日誌,發現是許可權不足導致的。 [[email protected] logs]# cat error.log

編譯器錯誤資訊:CS0433的原因解決方法

用asp.net寫的網站,每次更新後釋出都可正常瀏覽,但這次突然就不行了. 編譯錯誤:說明: 在編譯向該請求提供服務所需資源的過程中出現錯誤。請檢查下列特定錯誤詳細資訊並適當地修改原始碼。 編譯器錯誤資訊: CS0433: 型別“_Default”同時存在於“c:/WIND

傳送郵件常見的錯誤解決方法

傳送郵件是生活工作中最常見不過的事情了,但是在這個過程中,很多人都碰到過傳送錯誤,本文給列舉了這些常見的錯誤和解決方法,希望對大家有所幫助。 錯誤1 550 Mail content denied 這種是內容的問題,使用者加伺服器IP白名單就可以了。 錯誤2

Ftp上傳常見錯誤解決方法

Ftp 是管理維護網站資料 的重要手段,經常有一些客戶提出Ftp上傳的疑問.現在總結常見錯誤和解決方案如下(以FlashFxp為例) 1. Ftp伺服器連線失敗,分為以下四種情況。 a).連線被拒, 錯誤資訊如下: [右] 正在連線到 www.yourdomain.com -> DNS=www.you

android學習——android 常見的錯誤 解決方法

1. Application does not specify an API level requirement! 解決方法:AndroidManifest.xml中 加入:<uses-sdk android:minSdkVersion="3"></use

Ftp上傳常見錯誤解決方法

Ftp連線常見問題Ftp 是管理維護網站資料 的重要手段,經常有一些客戶提出Ftp上傳的疑問.現在總結常見錯誤和解決方案如下(以FlashFxp為例)1. Ftp伺服器連線失敗,分為以下四種情況。a).

net start命令發生系統錯誤5錯誤1058的解決方法

1.net start命令 net start命令用於開啟服務,格式為:net start [服務名](與之對應的"net stop [服務名]"為關閉服務命令) 2.開啟SqlServer的預設例項服務 [Win+R]快捷鍵--->cmd--->net st

varnish快取503錯誤,400錯誤的原因解決方法

出現400錯誤是因為varnish認為客戶端請求header行數及長度過大,其預設最大接受的請求header行數為64,最大長度(所有請求header行長度之和)為2048,解決這個問題比較簡單,在varnish啟動引數中加入: -p http_max_hdr=256 -p http_req_hdr_le

oracle 安裝過程中檢查步驟出現的錯誤解決方法

Checking operating system requirements ...Expected result: One of redhat-3,redhat-4,SuSE-9,asianux-1,asianux-2Actual Result: redhat-4Check

stsuts常見錯誤解決方法

   剛剛接觸struts,感覺好多的東西都不太明白,感覺最重要的就是看不懂錯誤以及解決方法。這兩天在網上找了些資料,copy了過來,為以後方便以後的繼續學習打個基礎。    PS:以下所說的struts-config.

MySQL遠程連接時出現10061以及1045錯誤時的解決方法

linux mysql 遠程連接 root用戶 10061 1045 以前對於MySQL數據庫的管理基本都是在本地,今天了解到一個比較輕便,不需安裝,直接解壓可用的圖形界面管理工具HeidiSQL(下載地址:鏈接:http://pan.baidu.com/s/1nvuP2Et 密碼

阿裏雲配置ssl證書服務遇到的幾個問題解決方法

yun apache 通過 nbsp ssl證書 centos6 jpg www home 系統環境: 系統:阿裏雲ECS CentOS6.5+Apache2.4.10 前提:公司需要將站點升級到使用SSL證書服務(https) 實踐執行:在阿裏雲的證書服務--選擇了一個免

Android Studio出現java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException的總結解決方法

logo ide roc for deb execution 所有 不同類 util 1. Error:Execution failed for task ‘mergeDebugAndroidTestResources‘.  > Error: java.util.c