国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Jenkins FindBugs Warnings 警告類(lèi)型文檔

2019-11-11 05:03:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

FindBugs Warnings 警告類(lèi)型文檔

一、 

Type : EI_EXPOSE_REP

Category:MALICIOUS_CODE(惡意程序代碼)

描述:may exposeinternal rePResentation by returning  getter方法返回引用類(lèi)型eclipse自動(dòng)生成的引用類(lèi)型(Object、數(shù)組、Date等)的getter、setter方法會(huì)得到或通過(guò)對(duì)可變對(duì)象的引用操作而暴露代碼內(nèi)部實(shí)現(xiàn),解決方法很多,只要返回的或賦值的對(duì)象不是原引用對(duì)象即可。

例如:

以Date類(lèi)型為例:

private java.util.Datefirstdate;

publicvoidsetFirstdate(java.util.Datevalue) {

       this.firstdate =value;

    }

    public java.util.Date getFirstdate(){

       returnthis.firstdate;

    }

改為:

public String getFirstdate() {

       returnfirstdate;

    }

    publicvoidsetFirstdate(Stringfirstdate) {

       this.firstdate =firstdate;

    }

二、 

Type : EI_EXPOSE_REP2

Category:MALICIOUS_CODE(惡意程序代碼)

描述:may expose internal representation by storing an externallymutable object into  setter方法返回引用類(lèi)型eclipse自動(dòng)生成的引用類(lèi)型(Object、數(shù)組、Date等)的getter、setter方法會(huì)得到或通過(guò)對(duì)可變對(duì)象的引用操作而暴露代碼內(nèi)部實(shí)現(xiàn),解決方法很多,只要返回的或賦值的對(duì)象不是原引用對(duì)象即可。

例如:

以Date類(lèi)型為例:

private java.util.Datefirstdate;

publicvoidsetFirstdate(java.util.Datevalue) {

       this.firstdate =value;

    }

    public java.util.DategetFirstdate() {

       returnthis.firstdate;

    }

改為:

public String getFirstdate() {

       returnfirstdate;

    }

    publicvoid setFirstdate(Stringfirstdate) {

       this.firstdate =firstdate;

    }

 

三、 

Type : WMI_WRONG_MAP_ITERATOR

Category:PERFORMANCE(性能)

描述:使用keySet迭代器無(wú)效,請(qǐng)使用entrySet迭代器代替

解釋?zhuān)汉芏嗳硕歼@樣遍歷Map,沒(méi)錯(cuò),但是效率很低,先一個(gè)一個(gè)的把key遍歷,然后在根據(jù)key去查找value,這不是多此一舉么,為什么不遍歷entry(桶)然后直接從entry得到value呢?它們的執(zhí)行效率大概為1.5:1(有人實(shí)際測(cè)試過(guò))。

我們看看HashMap.get方法的源代碼:

publicV get(Object key) {

    if (key==null)

        returngetForNullKey();

    inthash=hash(key.hashCode());

    for (Entry<K,V> e =table[indexFor(hash,table.length)];e !=null;e = e.next) {

        Object k;

        if (e.hash ==hash&& ((k =e.key) == key || key.equals(k)))

            returne.value;

    }

    returnnull;

}

從這里可以看出查找value的原理,先計(jì)算出hashcode,然后散列表里取出entry,不管是計(jì)算hashcode,還是執(zhí)行循環(huán)for以及執(zhí)行equals方法,都是CPU密集運(yùn)算,非常耗費(fèi)CPU資源,如果對(duì)一個(gè)比較大的map進(jìn)行遍歷,會(huì)出現(xiàn)CPU迅速飚高的現(xiàn)象,直接影響機(jī)器的響應(yīng)速度,在并發(fā)的情況下,簡(jiǎn)直就是一場(chǎng)災(zāi)難。

四、 

Type : SE_BAD_FIELD_STORE

Category:BAD_PRACTICE

描述:不可序列化的值存儲(chǔ)在一個(gè)可序列化類(lèi)的實(shí)例字段中

五、 

Type : SBSC_USE_STRINGBUFFER_CONCATENATION

Category:PERFORMANCE(性能)

描述:方法在一個(gè)循環(huán)中使用“+”運(yùn)算符拼接字符串

解釋?zhuān)好看窝h(huán)里的字符串+連接,都會(huì)新產(chǎn)生一個(gè)string對(duì)象,在java中,新建一個(gè)對(duì)象的代價(jià)是很昂貴的,特別是在循環(huán)語(yǔ)句中,效率較低。

例如:

六、

Type : RV_RETURN_VALUE_IGNORED_BAD_PRACTICE 

Category:BAD_PRACTICE

描述:方法忽略異常的返回值

解釋?zhuān)?/p>

關(guān)于一個(gè)方法邏輯執(zhí)行是否成功,有兩種方式:

一種是拋出異常,一種是提供boolean類(lèi)型的返回值。舉一個(gè)例子,用戶(hù)登錄,某些人將login方法的返回值定義為int,然后枚舉出各個(gè)值的含義,比如0代表成功,1代表用戶(hù)名不存在等等;而有些人,把這些枚舉值看成是use case中的異常流,將它們定義為異常對(duì)象,遇到“異常”情況直接拋出異常從而實(shí)現(xiàn)分支的流程。第一種方式是典型的C語(yǔ)言面向過(guò)程風(fēng)格,

第二種方式,帶有強(qiáng)烈的面向?qū)ο笪兜溃貏e是java提供了checked Exception,貌似偏離主題了。

java中很多方法的執(zhí)行成功依賴(lài)于異常的分支實(shí)現(xiàn),但也有提供返回值的實(shí)現(xiàn),比如這里的File.delete方法,上面的寫(xiě)法忽略了返回值(如果調(diào)用某個(gè)方法卻不使用其返回值要特別注意),刪除一個(gè)文件很可能不成功,但是從代碼里并沒(méi)有看到這一層面的意思。

解決方法:

文件刪除不成功該怎么辦?現(xiàn)在能處理就處理,現(xiàn)在不能處理就把父類(lèi)的方法也改成有返回值的,然后向上傳遞,這跟處理異常的道理是一樣的,當(dāng)然,你也可以把它封裝成一個(gè)異常對(duì)象。

例如:

 

七、 

Type : OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE

Category:EXPERIMENTAL

描述:在處理異常時(shí),方法可能未能成功清理流或資源

八、 

Type : NP_NULL_ON_SOME_PATH_EXCEPTION

Category:CORRECTNESS

描述:方法中的異常路徑上的可能的空指針解引用

例如:

九、 

Type : NP_LOAD_OF_KNOWN_NULL_VALUE

Category:STYLE

描述:加載已知為空的值

十、 

Type : NM_METHOD_NAMING_CONVENTION

Category:BAD_PRACTICE

描述:方法名應(yīng)當(dāng)以小寫(xiě)字母開(kāi)頭

十一、       

Type : NM_CLASS_NAMING_CONVENTION 

Category:BAD_PRACTICE

描述:類(lèi)名應(yīng)當(dāng)以大寫(xiě)字母開(kāi)頭

十二、       

Type : EQ_DOESNT_OVERRIDE_EQUALS 

Category:STYLE

描述:類(lèi)沒(méi)有覆蓋父類(lèi)中的equals方法

十三、       

Type : EQ_COMPARETO_USE_OBJECT_EQUALS 

Category:BAD_PRACTICE

描述:類(lèi)定義了compareTo(...)方法,使用了Object.equals()方法

解釋?zhuān)?/p>

沒(méi)有使用instanceof判斷就直接轉(zhuǎn)型,有拋出classcastexception異常的可能。

這個(gè)BUG主題是,遵守約定(x.compareTo(y)==0) == (x.equals(y)),強(qiáng)烈建議,但不嚴(yán)格要求。

在return 0的時(shí)候,調(diào)用equals方法返回true,因?yàn)樵赑riorityQueue.remove方法中,1.5使用的是compareTo方法,而1.6使用的是equals方法,保證環(huán)境升級(jí)的時(shí)候,受影響最小。

解決方法:

         在return 0的時(shí)候,調(diào)用equals方法返回true

例如:

 

十四、       

Type : DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION 

Category:BAD_PRACTICE

描述:不要使用removeAll方法清空一個(gè)集合

十五、       

Type : DM_NUMBER_CTOR 

Category:PERFORMANCE(性能)

描述:方法調(diào)用無(wú)效的Number構(gòu)造器,請(qǐng)使用valueOf靜態(tài)方法代替

十六、       

Type : DM_NEXTINT_VIA_NEXTDOUBLE

Category:PERFORMANCE(性能)

描述:為了生成一個(gè)隨機(jī)整數(shù),調(diào)用Random對(duì)象的nextInt方法,而不是nextDouble方法

十七、       

Type : DM_BOXED_PRIMITIVE_FOR_PARSING 

Category:PERFORMANCE(性能)

描述:使用封裝/反封裝來(lái)解析一個(gè)基本類(lèi)型

例如1:

renturnRecord.setParts(Integer.valueOf(parts[i]));

處理:

renturnRecord.setParts(Integer.valueOf(parts[i]).intValue());

十八、     

Type : DLS_DEAD_LOCAL_STORE

Category:STYLE

描述:死存儲(chǔ)局部向量

解釋?zhuān)?/p>

對(duì)本地變量定義了之后未使用到,編譯器能夠做優(yōu)化處理,也就是在編譯之后的class文件中刪除這些本地變量。方法是在eclipse的Preferences里將以下的鉤去除:
解決方法:
      大膽的去掉或者注釋掉。
誤報(bào)的案例:
是一個(gè)局部的變量,不需要定義到外部去,定義在外部,可能會(huì)變成一個(gè)無(wú)效的變量。

例如:

 

十九、     

Type : BX_UNBOXING_IMMEDIATELY_REBOXED  

Category:PERFORMANCE(性能)

描述:反封裝已經(jīng)封裝的值,然后又立即重新封裝

例如:

 

二十、     

Type : UUF_UNUSED_FIELD

Category:PERFORMANCE(性能)

描述:未使用字段

解釋?zhuān)哼@個(gè)警告應(yīng)該影響不大吧!

例如:

 

Type :

Category:

描述:

例如:


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 台安县| 贵德县| 鹤山市| 抚顺县| 元江| 自治县| 中卫市| 新安县| 吉林省| 浮梁县| 佛坪县| 棋牌| 高尔夫| 宜良县| 扶绥县| 陆河县| 安义县| 类乌齐县| 阳信县| 巴林右旗| 苏尼特右旗| 荣成市| 民和| 南平市| 和田市| 连山| 辽源市| 仁怀市| 藁城市| 新巴尔虎左旗| 武陟县| 白山市| 陇南市| 昭通市| 邻水| 庄河市| 孝义市| 宁波市| 德江县| 高陵县| 福贡县|