Java設計的一些原則

1 不要在整個類中使用 @SuppressWarnings("unchecked"),儘量縮小使用範圍,且需要有註釋在其上說明爲什麼安全!

2 儘量使用委託代替繼承,但是如果需要大量的簡單委託(即需要大量實例的功能)時,還是用繼承;在用委託時,儘量使用委託方法提供間接訪問含有實例的方法,滿足最小知識原則,如果不得不使用委託,這種情況下就讓它直接得到委託對象,從而調用

3 關於synchronized

synchronized就是記住你鎖定是什麼?是某個對象還是什麼,以後如果有人用到你加鎖的目標的synchronized,就不行了,因爲已經被加鎖了,不能再鎖。關鍵有兩點:第一點是注意鎖定的什麼?,如果不是你鎖的,就沒有約束力; 第二點是約束力僅僅在調用synchronized範圍;

同步方法鎖定的相對於this,鎖定的是當前對象

而你如果同步塊,那麼就看具體鎖定是什麼?

  Integer i = new Integer(10);  不可以鎖
//  Integer i=10;   可以鎖,因爲每次都是同一個對象。

2個同步方法,那麼同一個對象,當調用其中一個同步的時候,另外一個同步可以被調用嗎?不可以。

4 層次組織常量的方法: 接口組織枚舉,靜態內部類

5 常量應定義在類中,並且設置構造器爲私有從而讓其不可實例化;常量接口是種誤用,以後如果不需要某個常量還存在實現類裏面,所以接口要求有方法最好,光有常量不合適。

6 標籤應該僅用於多層嵌套,因爲單層循環沒有任何意義,跳出或者CONTINUE到外層循環纔有意義

7 定義定的時候儘量不要和常用已知的類,例如JAVA.LANG同名,那樣容易衝突也不好用。

8 使用private構造器,確保工具類不能被實例化或者繼承

9 關閉流時,關閉最後一個外層流即可,其他自動關閉。
10 TimeUnit.MILLISECONDS.sleep(100) 新的sleep方式

11 添加新方法時,先添加接口中的方法,這樣就不會老是忘記加了...

12 當在eclipse中new一個對象,沒有提示時,因爲這個對象的構造器不可見。

13 異常只能用於錯誤處理,不應該用來控制程序流程。

14 F2修復(或者Ctrl+1),F3進入 F4 顯示Outline和繼承結構(alt+t)

15 儘量指定類的final修飾符
■帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。爲String類指定final防止了人們覆蓋length()方法。
另外,如果指定一個類爲final,則該類所有的方法都是final。Java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%。

 

16

類間關係有很多種,在大的類別上可以分爲兩種:縱向關係(泛化與實現)、橫向關係(依賴,關聯,聚合,組合)。
縱向關係就是繼承關係,它的概念非常明確,也成爲OO的三個重要特徵之一,這裏不過多的討論。

橫向關係較爲微妙,按照UML的建議大體上可以分爲四種:

1.依賴(Dependency)

2.關聯(Association)

3.聚合(Aggregation)

4.組合(Composition

 

17 不要返回NULL,代替以特例或異常,不要傳遞NULL,實現檢查是否是NULL幷包裝爲非法參數異常等合適處理。

18 接口可以用來定義期待,從而提前完成工作,但是定義的接口可能不適合期待的接口形式,例如未來定義的接口可能多點方法,那麼適配器模式可以用於此地,一句話:接口定義期待方法,如果不完全符合期待,則可以用適配器適配。

19 函數返回應該是個接口最佳,比如返回ARRAYLIST返回爲LIST或者COLLECTION更佳

20 用到的函數應該在第一次用到緊隨其後

21 使用通配符導入更佳。

22 遇到選擇子當作參數時,例如BOOLEAN,考慮參考函數。



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章