Effective Java


1、用靜態工廠方法代替構造器

     優點:有自己的方法名,見名知其意;不用重復創建對象,類似單利模式中的餓漢式。

     缺點:公有靜態方法返回的非公有類不能被實例化;查找API麻煩。

2、遇到多個構造器參數時要考慮使用構建器

     參數很多時,使用構建器模式便於閱讀。

3、用私有構造器或者枚舉類型強化Singleton屬性

     單例是線程安全的。

4、通過私有構造器強化不可實例化的能力

     有的工具類進行實例化無意義,將其構造方法私有化。

5、優先考慮依賴注入來引用資源

6、避免創建不必要的對象

      String  str = "hello";  jdk7后,str字符串的創建是在堆內存。

7、消除過期的對象引用

     過期引用會造成內存泄漏?

     解決方法:將不再使用的元素置為null。

8、避免使用終結方法和清除方法

      FileInputStream源碼中實現了終結方法,優點在於如果忘記close()方法,會執行終結方法。

9、覆蓋equals時請遵守通用約定

      覆蓋equals方法時,遵守約定:自反性,對稱性,傳遞性,一致性,對於任何非null的引用值x,x.equals(null)必須返回false。

      instanceof是類型比較,例如 A   instanceof   B    指的是A是否是B類型的。

10、覆蓋equals時總要覆蓋hashCode

      兩個對象使用equals返回true,則他們的hashCode也一定相等,反之,如果兩個對象的hashCode相等,但他們的equals不一定相等。

11、始終要覆蓋toString

      在實際應用中,toString方法應該返回對象中包含的所有值得關注的信息。

12、謹慎地覆蓋clone

13、考慮實現Comparable接口

       Comparable接口只有一個方法:comparaTo

       int  x = a.comparaTo(b);

       a>b,則x>0;

 

       a=b,則x=0;

 

       a<b,則x<0;

14、使類和成員的可訪問性最小化

15、要在公有類而非公有域中使用訪問方法

       類的封裝:屬性私有化,提供getter/serter方法。

16、使可變性最小化

        final:修飾類時,不能被繼承;修飾成員變量時,是常量。

17、復合優先於繼承

18、要么設計繼承並提供文檔說明,就用final修飾,禁止子類化

       謹慎使用繼承:若使用了,要注釋寫出重寫這個方法會給其他方法帶來什么影響;

                                若類不是為繼承而生,就用final修飾,禁止子類化。

19、接口優於抽象類

       因為java只支持單繼承,但可以實現多個接口。

20、接口只用於定義類型

       接口不要只用於定義常量,不然還不如使用枚舉類或不可實例化的工具類。   

 

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM