国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

OOP

1. 【強(qiáng)制】避免通過一個類的對象引用訪問此類的靜態(tài)變量或靜態(tài)方法,無謂增加編譯器解析成本,直接用類名來訪問即可。


2. 【強(qiáng)制】所有的覆寫方法,必須加@ Override 注解。

反例: getObject() 與 get 0 bject() 的問題。一個是字母的 O ,一個是數(shù)字的 0,加@ Override

可以準(zhǔn)確判斷是否覆蓋成功。另外,如果在抽象類中對方法簽名進(jìn)行修改,其實(shí)現(xiàn)類會馬上編譯報錯。


3. 【強(qiáng)制】相同參數(shù)類型,相同業(yè)務(wù)含義,才可以使用 Java 的可變參數(shù),避免使用 Object 。

說明:可變參數(shù)必須放置在參數(shù)列表的最后。 ( 提倡同學(xué)們盡量不用可變參數(shù)編程 )

正例: public User getUsers(String type, Integer... ids)

4. 【強(qiáng)制】對外暴露的接口簽名,原則上不允許修改方法簽名,避免對接口調(diào)用方產(chǎn)生影響。接口過時必須加@ Deprecated 注解,并清晰地說明采用的新接口或者新服務(wù)是什么。


5. 【強(qiáng)制】不能使用過時的類或方法。

說明: java . net . URLDecoder 中的方法 decode(String encodeStr) 這個方法已經(jīng)過時,應(yīng)該使用雙參數(shù) decode(String source, String encode) 。接口提供方既然明確是過時接口,那么有義務(wù)同時提供新的接口 ; 作為調(diào)用方來說,有義務(wù)去考證過時方法的新實(shí)現(xiàn)是什么。


6. 【強(qiáng)制】 Object 的 equals 方法容易拋空指針異常,應(yīng)使用常量或確定有值的對象來調(diào)用

equals 。

正例: " test " .equals(object);

反例:  object.equals( " test " );

說明:推薦使用 java . util . Objects # equals (JDK 7 引入的工具類 )


7. 【強(qiáng)制】所有的相同類型的包裝類對象之間值的比較,全部使用 equals 方法比較。

說明:對于 Integer var =?在-128 至 127 之間的賦值, Integer 對象是在IntegerCache . cache 產(chǎn)生,會復(fù)用已有對象,這個區(qū)間內(nèi)的 Integer 值可以直接使用==進(jìn)行判斷,但是這個區(qū)間之外的所有數(shù)據(jù),都會在堆上產(chǎn)生,并不會復(fù)用已有對象,這是一個大坑,推薦使用 equals 方法進(jìn)行判斷。


8. 【強(qiáng)制】關(guān)于基本數(shù)據(jù)類型與包裝數(shù)據(jù)類型的使用標(biāo)準(zhǔn)如下:

1 ) 所有的 POJO 類屬性必須使用包裝數(shù)據(jù)類型。

2 ) RPC 方法的返回值和參數(shù)必須使用包裝數(shù)據(jù)類型。

3 ) 所有的局部變量【推薦】使用基本數(shù)據(jù)類型。

說明: POJO 類屬性沒有初值是提醒使用者在需要使用時,必須自己顯式地進(jìn)行賦值,任何

NPE 問題,或者入庫檢查,都由使用者來保證。

正例:數(shù)據(jù)庫的查詢結(jié)果可能是 null ,因?yàn)樽詣硬鹣洌没緮?shù)據(jù)類型接收有 NPE 風(fēng)險。

反例:比如顯示成交總額漲跌情況,即正負(fù) x %, x 為基本數(shù)據(jù)類型,調(diào)用的 RPC 服務(wù),調(diào)用不成功時,返回的是默認(rèn)值,頁面顯示:0%,這是不合理的,應(yīng)該顯示成中劃線-。所以包裝數(shù)據(jù)類型的 null 值,能夠表示額外的信息,如:遠(yuǎn)程調(diào)用失敗,異常退出。


9. 【強(qiáng)制】定義 DO / DTO / VO 等 POJO 類時,不要設(shè)定任何屬性默認(rèn)值。

反例: POJO 類的 gmtCreate 默認(rèn)值為 new Date(); 但是這個屬性在數(shù)據(jù)提取時并沒有置入具

體值,在更新其它字段時又附帶更新了此字段,導(dǎo)致創(chuàng)建時間被修改成當(dāng)前時間。


10. 【強(qiáng)制】序列化類新增屬性時,請不要修改 serialVersionUID 字段,避免反序列失敗 ; 如果完全不兼容升級,避免反序列化混亂,那么請修改 serialVersionUID 值。

說明:注意 serialVersionUID 不一致會拋出序列化運(yùn)行時異常。


11. 【強(qiáng)制】構(gòu)造方法里面禁止加入任何業(yè)務(wù)邏輯,如果有初始化邏輯,請放在 init 方法中。


12. 【強(qiáng)制】 POJO 類必須寫 toString 方法。使用 IDE 的中工具: source >  generate toString時,如果繼承了另一個 POJO 類,注意在前面加一下 super . toString 。

說明:在方法執(zhí)行拋出異常時,可以直接調(diào)用 POJO 的 toString() 方法打印其屬性值,便于排

查問題。


13. 【推薦】使用索引訪問用 String 的 split 方法得到的數(shù)組時,需做最后一個分隔符后有無內(nèi)容的檢查,否則會有拋 IndexOutOfBoundsException 的風(fēng)險。

說明:

String str = "a,b,c,,";
String[] ary = str.split(",");
//預(yù)期大于 3,結(jié)果是 3
System.out.println(ary.length);


14. 【推薦】當(dāng)一個類有多個構(gòu)造方法,或者多個同名方法,這些方法應(yīng)該按順序放置在一起,便于閱讀。


15. 【推薦】 類內(nèi)方法定義順序依次是:公有方法或保護(hù)方法 > 私有方法 >  getter / setter方法。

說明:公有方法是類的調(diào)用者和維護(hù)者最關(guān)心的方法,首屏展示最好 ; 保護(hù)方法雖然只是子類關(guān)心,也可能是“模板設(shè)計模式”下的核心方法 ; 而私有方法外部一般不需要特別關(guān)心,是一個黑盒實(shí)現(xiàn) ; 因?yàn)榉椒ㄐ畔r值較低,所有 Service 和 DAO 的 getter / setter 方法放在類體最后。


16. 【推薦】 setter 方法中,參數(shù)名稱與類成員變量名稱一致, this .成員名=參數(shù)名。在

getter / setter 方法中,盡量不要增加業(yè)務(wù)邏輯,增加排查問題的難度。

反例:

public Integer getData(){
if(true) {
return data + 100;
} else {
return data - 100;
}
}


17. 【推薦】循環(huán)體內(nèi),字符串的聯(lián)接方式,使用 StringBuilder 的 append 方法進(jìn)行擴(kuò)展。

反例:

String str = "start";
for(int i=0; i<100; i++){
str = str + "hello";
}

說明:反編譯出的字節(jié)碼文件顯示每次循環(huán)都會 new 出一個 StringBuilder 對象,然后進(jìn)行append 操作,最后通過 toString 方法返回 String 對象,造成內(nèi)存資源浪費(fèi)。


18. 【推薦】 final 可提高程序響應(yīng)效率,聲明成 final 的情況:

1 ) 不需要重新賦值的變量,包括類屬性、局部變量。

2 ) 對象參數(shù)前加 final ,表示不允許修改引用的指向。

3 ) 類方法確定不允許被重寫。


19. 【推薦】慎用 Object 的 clone 方法來拷貝對象。

說明:對象的 clone 方法默認(rèn)是淺拷貝,若想實(shí)現(xiàn)深拷貝需要重寫 clone 方法實(shí)現(xiàn)屬性對象的拷貝。


20. 【推薦】類成員與方法訪問控制從嚴(yán):

1 ) 如果不允許外部直接通過 new 來創(chuàng)建對象,那么構(gòu)造方法必須是 private 。

2 ) 工具類不允許有 public 或 default 構(gòu)造方法。

3 ) 類非 static 成員變量并且與子類共享,必須是 protected 。

4 ) 類非 static 成員變量并且僅在本類使用,必須是 private 。

5 ) 類 static 成員變量如果僅在本類使用,必須是 private 。

6 ) 若是 static 成員變量,必須考慮是否為 final 。

7 ) 類成員方法只供類內(nèi)部調(diào)用,必須是 private 。

8 ) 類成員方法只對繼承類公開,那么限制為 protected 。

說明:任何類、方法、參數(shù)、變量,嚴(yán)控訪問范圍。過寬泛的訪問范圍,不利于模塊解耦。思考:如果是一個 private 的方法,想刪除就刪除,可是一個 public 的 Service 方法,或者一個 public 的成員變量,刪除一下,不得手心冒點(diǎn)汗嗎?變量像自己的小孩,盡量在自己的視線內(nèi),變量作用域太大,如果無限制的到處跑,那么你會擔(dān)心的。