前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
一、用靜態工廠方法代替構造器
用靜態工廠的優點 :
1. 方法有名字,更好理解。
2.不必每次調用的時候都創建一個新對象。
3.可以返回原類型的子類型對象,這樣在選擇返回類型的時候有了更大的靈活性。
4。在創建參數化類型的實例的時候,使代碼更簡潔。
?
靜態工廠的缺點:
1.本類如果不含有公有或是受保護的構造器,就不能被子類化。
2.與其它的靜態方法實際上沒有任何區別。
?
二、遇到多個構造參數用構建器
1.實現方式:靜態成員類(靜態內部類)。 public static class Builder { ... }?
客戶端代碼可以簡寫為:Student stu = new Student.Builder?(20 , 10).birthday("1996-10-13").grade("大二").build(); ?
這樣當大多數參數都是可選的時候,與使用傳統的不斷重載的構造器模式相比,使用 builder 模式的客戶端代碼更易于閱讀和理解。構建器也比 java ?beans 更安全。
?
三、用私有構造或者枚舉強化 Singleton屬性
實現1:公有 + 靜態 + final ,如: public static final INSTANCE;
實現2:privatestatic final XxxxINSTANCE = new Xxxx( ) ;
public staticXxxxgetInstance ( ) {returnINSTANCE; }
實現3:單個元素的枚舉類型。
?
四、通過私有構造器強化不可實例化
比如:工具類中的方法都應該是靜態的,工具類不應當被實例化。
?
五、避免創建不必要的對象
1. 能直接賦值就不要new , 如:String ?str = new String("123"?) ,應當寫為 String str =?"123" ;
2. 高頻率使用的代碼可以考慮抽離為一個方法,該方法可以考慮定義為靜態方法。
3.優先使用基本類型,而不是包裝類,當心無意識的自動裝箱,會生成不少多余的對象。
?
六、消除過期對象的引用?
1. 所謂的過期引用是指永遠也不會再被解除的引用 。比如定義了一個數組,但是其中的部分元素是確定不會被使用的。這種情況視為對象引用 已經過期,就應該清空這些元素,清除這些引用。這樣如果以后又被錯誤的引用 就會立即拋出 NollPointException 。
2. 消除過期引用可幫助防止內存泄露,內存泄露的常見來源是緩存,有時候會把對象的引用 放入到緩存當中,并且長時間遺忘了它,這時就應該考慮緩存中的項是否全都依舊有意義。所以緩存應該不時的清除掉已經無用的項。清除工作可由后臺一個線程來完成。
3. 監聽器和其它回調也有可能導致內存泄露。如果你實現了一個API, 客戶端在API中注冊回調,卻一直沒有顯示的取消注冊,那么除非你采取某些動作,否則它們就會不斷聚集。確保回調立即被當作垃圾回收的最佳方法是保存它們的弱引用,,例如只將它們 保存為WeakHashMap中的鍵。
?
七、避免使用最終方法
1. 最終方法就是 finalize( ) ,垃圾回收方法。原因是不能保證會及時回收,甚至不能保證會被回收(如果未被捕獲的異常在終結過程中被拋出來,那么這種異常可能會被忽略)。并且使用終結方法會有嚴重的性能損失。因此,不應該依賴終結方法來更新重要的持久狀態。
2. 應該使用顯示的終止方法,通常與 try - finally 結合使用,以確保及時終止。比如字節流、字符流、數據庫連接等就應該使用顯示的 close 方法。 ?
?