原创 【Effective Java】條18:接口優先於抽象類

Java程序提供兩種機制來允許定義多個實現的類型:接口和抽象類。接口和抽象類區別1在於抽象類可以包含某些方法的實現,但是接口卻不允許;但最明顯的區別還是在於若一旦繼承於抽象類,那該類就是抽象類的子類,繼承所帶來的缺點也就隨即而來,譬如Ja

原创 【Effective Java】條16:複合優於繼承

本文所說的繼承都是類和類之間的繼承,而非接口和類之間的繼承 繼承是面向對象的三大特性之一。一般情況下,當子類和父類在同一包下且必須繼承的時候可以採用繼承,畢竟同一包下的代碼由同一個人管理;另外當某個類就是被設計成去繼承的時候,也可以考

原创 【Effective Java】條13:使類和成員可訪問性最小

區分程序設計的好壞之一就是看模塊之間實現細節的隱藏。這其實就是信息隱藏或者稱之爲封裝,是軟件設計的基本原則之一。 成員訪問級別 在Java程序設計準則中,第一規則就是儘可能地使每個類或者成員不被外界訪問,即訪問級別儘量小。 在Java中,

原创 【Effective Java】條20:類層次優於標籤類

標籤類,這裏指類依據本身的某個屬性,來確定類會產生不同的對象。很明顯,這不符合類的單一職責原則。如: public class Figure { enum Shape { RECTANGLE, CIRCLE } p

原创 【Effective Java】條30:使用枚舉代替int常量

在枚舉類型出現之前,一般都常常使用int常量或者String常量表示列舉相關事物。如: public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPI

原创 【Effective Java】條14:共有類中使用訪問方法而不是公有域

在平時開發中,也會你會定義某些類,沒什麼作用,僅僅是集中一些實例域的。如: class Point { public float x; public float y; } 由於類設計成這樣,可以直接通過對象訪問,簡潔了很多

原创 【Effective Java】條6:消除過期對象引用

當你從內存需要管理的語言(C、C++),跳轉到基於GC管理內存的語言時,你會發現要簡單很多。因爲GC會自動回收不可用對象,它釋放了你的工作。 但是GC管理內存一定可靠嗎?答案是未必。如: public class Stack {

原创 【Effective Java】條5:避免創建不必要的對象

在代碼Review的時候,也許你老大會告訴你,字符串創建要放到循環之外。 for(int i = 0; i < length; i++) { String s = new String(i); } 爲什麼呢? 因爲在循環的時候,創

原创 【Effective Java】條3:用私有構造器或枚舉類型強化singleton屬性

Singleton修飾的對象指在系統中是唯一的。 Singleton的實現 公有域方法 public class SingletonTestOne { public static final SingletonTestOne IN

原创 【Effective Java】條15:最小化可變性

不可變類從其開始被創建,至其生命週期結束,其狀態都是不可變的。Java類庫中也提供了許多不可變類,如String、BigInteger、BigDecimal等。 創建不可變類 爲了創建不可變類,可遵循以下5條規則: 1. 爲類的域不提供

原创 【Effective Java】條23-24:不要使用原生態類型-消除檢測的代碼警告

在使用泛型的時候,禁止直接聲明爲原生態類型。如: List list = new ArrayList(); 而應該直接指定具體的參數類型,如: List<String> list = new ArrayList(); 如果真的不能確定具體

原创 【Effective Java】條4:通過私有構造器強化不可實例化

在日常開發中,我們經常會寫些工具類(雖然名聲不是很好)。爲了防止調用者不明白進行了實例化調用,我們可以在工具類中添加私有的構造函數。 public class UtilityClass { // Suppress default