effective java 学习笔记

最近看了下《effective java》,非常热评的一本入门级别的java类书籍。借此机会,将上面的知识点结合我的一些看法按照item的形式一一列出,希望一直在编程中牢记这些规则,并且熟悉运用。

 

规则如下:

1. 用静态工厂代替构造函数,尽量避免类的无必要的创建,并且需要遵循一些,静态方法的命名规则,如valueOf,getInstatnce

2. 避免创建重复对象,比如String类使用时,尽量使用直接数,而不是用new String()来创建。

3. 避免使用finalize函数,因为该函数不保证资源一定销毁,只是对其优先级进行一定的调整。建议使用finally。唯一可能用到的情况是终止非关键的本地资源,以及安全保护的工作(用户在无法使用finally的时候)。

4. 改写类的equals()方法时,应该在满足业务的基础上尽可能的简单,应该遵循自反性,对称性,传递性,一致性。

5. 改写equals()方法时,必须实现相应的hasCode()方法,当一个hasCode()方法开销十分大时,应该考虑使用cache。

6. 习惯改写toString方法,来为当前对象的内容提供一个直观的展示。

7. clone()方法。(待补充)

8. 如果你创建的对象具有逻辑意义上的比较那么建议你实现Comparable接口。使得该对象在进行一些集合操作的时候可以得到一些附加的排序功能。而Comparator接口则不同,他可以对任何的对象调用Collections.sort(Object,Comparator),进行排序。

9. 使类和成员的可访问范围尽可能的小。

10. 如果可能使得类尽可能的成为一个不可变类,因为他的状态不变性,可以使得非常的安全。应该尽可能的将一些资源类型的类做成不可变类(单例)。

11. 复合优先于集成。只有当A is a B的时候 才推荐奖A 设计成 B的子类。或者说只有B是专门设计成抽象类的时候,才考虑让其他类继承它。

因为继承会打破封装,所以不能为了复用而无限制的进行集成。除了上述提到的情况之外,最好使用复合模式。因为这样能使子类在使用成员对象(而不是父类)更灵活,并不破坏封装性。

12. 接口优先于抽象类。

13. 接口中尽量屏蔽和业务相关的内容,尤其是尽可能的避免接口中常量的定义。

14. 优先考虑静态成员内部类,因为实例类的开销太大,并且需要持有非类的引用。

15. 如果有可能,检查方法的传入参数,避免在进行处理后再抛出异常使得错误非常难捕捉,但是也不能过度检验参数。

16. 方法参数个数避免过长。对于参数的类型优先使用接口。

17. 返回零长度数组而不是null,用于避免空指针的校验。

18. 熟悉和了解各种库,尽量使用库而不是自己重复造方法。

19. 如果需要精确的计算时,避免用float和double,而使用BigDecimal对象类型,尽管开销会比较大。

20. 避免在任意情况下使用字符串,作为参数的类型。

21. 注意字符串串联的性能。

22. 通过接口引用对象。

23. 避免甚至不用native method。

24. 谨慎进行优化,在性能优化前,必须做性能测试,不好的优化会使得程序性能更造,并有可能破坏原有的功能。

25. 对于可恢复的条件用检查异常,对于程序错误(ERROR)用运行时异常。因为ERROR有可能直接导致程序崩溃,而RuntimeException至少可以按照程序的正常流程走下去。

26. 尽量使用标准的异常类型。

27. 要活用异常转译:推荐的异常转译方向为 Error-->RuntimeException, RuntimeException-->CheckedException, Error-->CheckedException

28. 异常信息不能太笼统,应该包含参数在内的详细描述信息,使得出现问题方便查看。

29. (线程将另开篇幅介绍)

30. 对于实现序列化的类型,在做单例的时候,保证实现readReslove方法,确保反序列化时不每次产生新的对象。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值