1. 程式人生 > >effective Java 學習筆記 (一)

effective Java 學習筆記 (一)

  第一條:考慮用靜態工廠方法代替建構函式

類可提供一個共有的靜態工廠方法,返回類的一個例項。 靜態工廠方法優點(與建構函式比較): 1、靜態工廠方法具有名字。 當有多個建構函式的時候,如果一個建構函式的引數不能明確的描述被返回物件的特徵,則選用適當名字的靜態方法可以更易閱讀。 2、每次被呼叫的時候,不要求非得建立一個新的物件。 使得一些非可變類可以使用一個預先構造好的例項,或者把已經構造好的例項快取起來,以後再把這些例項分發給客戶,從而避免建立不必要的重複物件。 可以控制“在某一時刻哪些例項應該存在”。這樣做的理由: a.使得一個類可以保證是一個singleton。 b.非可變類可保證不會有兩個相等的例項存在。 3、
可以返回一個原返回型別的子型別的物件。 一個應用是一個API返回一個物件,同時又不使該物件的類成為公有的。這項技術非常適合於基於介面的框架結構。這樣使用靜態工廠方法可以強迫客戶通過介面來引用被返回物件,而不是通過實現類來引用被返回物件。 靜態工廠方法返回的物件所屬類,在編寫包含該靜態工廠方法的類時可以並不存在。這種靈活的靜態方法構成了服務提供者框架的基礎,如Java密碼系統擴充套件(JCE)。 靜態工廠方法缺點: 1、類如果不含公有的或者受保護的建構函式,就不能被子類化。 對於公有的靜態工廠所返回的非公有類,也是如此。 2、與其他的靜態方法沒有任何區別。 兩個很流行的靜態工廠方法: valueOf —— 一般是一些非常有效的型別轉換操作符。 getInstance —— 返回的例項是由方法的引數來描述的,但不能說與引數具有同樣的值。此名字在服務提供者框架中普遍使用。
Static
: 這個資料或方法不與包含它的那個類的任何物件例項關聯在一起。 解決的問題: 1. 只想為特定資料分配一份儲存空間,而不去考慮究竟要建立多少物件,甚至不建立物件。 2. 希望某個方法不與包含它的類的任何物件關聯到一起,即使沒有建立物件,也可以使用這個方法。 引用static變數的方法: 1. 通過物件定位 2. 通過類名直接引用 Static方法的重要用法是在不建立任何物件的前提下就可以呼叫它。可以建立或使用與其型別相同的被命名物件,因此,static方法常常拿來做“牧羊人”的覺得,負責看護與其隸屬同一型別的例項群。