第22條:優(yōu)先考慮靜態(tài)成員類
Java程序中共有四種不同的嵌套類,每一種都有自己的用途稳摄。如果一個(gè)嵌套類需要在單個(gè)方法之外仍然是可見的稚字,或者它太長了,不適合于放在方法內(nèi)部厦酬,就應(yīng)該使用成員類胆描。如果成員類的每個(gè)實(shí)例都需要一個(gè)指向其外圍實(shí)例的引用,就要把成員類做成非靜態(tài)的弃锐;否則袄友,就做成靜態(tài)的。假設(shè)這個(gè)嵌套類屬于一個(gè)方法的內(nèi)部霹菊,如果你只需要在一個(gè)地方創(chuàng)建實(shí)例剧蚣,并且已經(jīng)有了一個(gè)預(yù)置的類似可以說嗎這個(gè)類的特征,就要把它做成匿名類旋廷;否則鸠按,就做成局部類。
泛型
第23條:請(qǐng)不要在新代碼中使用原生態(tài)類型
Java 1.5之后支持泛型饶碘,建議在代碼中不要使用原生態(tài)類型目尖。如果使用原生態(tài)類型,就失掉了泛型在安全性和表述性方面的所有優(yōu)勢(shì)扎运。瑟曲,例如:
//不建議這樣定義List
private List list ;
//支持泛型的對(duì)象,建議如下定義
private List<String> list;
第30條:用enum代替int常量
在編程語言中還沒有引入枚舉類型之前豪治,表示枚舉類型的常用模式是聲明一組具名的int常量洞拨,每個(gè)類型成員一個(gè)常量:
// The int enum pattern - severely dificient !
public static final int APPLE_FUJI = 0;
public static final int APPLE_PIPPIN =1
......
public static final int ORANGE_NAVEL = 0;
public static final int ORANGE_TEMPLE =1;
......
這種方法稱作int枚舉模式,存在諸多不足负拟。它在類型安全性和使用方便性方面沒有任何幫組烦衣。如果將apple傳到想要的orange的方法中,編譯器也不會(huì)出現(xiàn)警告掩浙。建議在諸如類似常量定義時(shí)花吟,考慮使用 enum type。
方法
**第38條:檢查參數(shù)的有效性
每當(dāng)編寫方法或者構(gòu)造器的時(shí)候厨姚,應(yīng)該考慮它的參數(shù)有哪些限制衅澈。應(yīng)該把這些限制寫到文檔中,并且在方法體的開頭處遣蚀,通過顯示的簡(jiǎn)稱來實(shí)施這些限制矾麻。例如:
/**
* Returns a BigInteger whose value is (this mod m). This method
* differs form the remainder method in that it always returns a
* non-negative BigInteger
*
* @param m the modeulus, thich must be positive
* @return this mod m
* @throws ArithmeticException if m is less than or equal to 0
*/
public BigInteger mod(BigInteger m){
if(m.signum() <= 0)
throw new ArithmeticException("Modulus <= 0 : " + m );
...... // Do the computation
}
通用程序設(shè)計(jì)
第49條:基本類型優(yōu)先于裝箱基本類型(基本類型的包裝類)
1.什么時(shí)候應(yīng)該使用裝箱基本類型呢纱耻?
第一是作為集合中的元素、健和值险耀。你不能將基本類型放在集合中弄喘,因此必須使用裝箱基本類型。這是一種更通用的特例甩牺。在參數(shù)化類型中蘑志,必須使用裝箱基本類型作為類型參數(shù),因?yàn)镴ava不能運(yùn)行使用基本類型贬派。
基本類型性能優(yōu)于裝箱基本類型急但,總之,當(dāng)可以選擇的時(shí)候搞乏,基本類型要優(yōu)先于裝箱基本類型波桩。
第52條:通過接口引用對(duì)象
應(yīng)該優(yōu)先使用接口而不是類的引用對(duì)象。如果有合適的接口類型存在请敦,那么對(duì)于參數(shù)镐躲、返回值、變量或域來說侍筛,就都應(yīng)該使用接口類型進(jìn)行聲明萤皂。例如:
//Good - user interface as type
List<Subscriber> subscribers = new ArrayList<Subscriber>();
//Bad - user class as type
ArrayList<Subscriber> subscribers = new ArrayList<Subscriber>();
如果沒有合適的接口存在,完全可以用類而不是接口來引用對(duì)象匣椰。(建議使用類層次接口中提供了必要功能的最基礎(chǔ)的類)