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