zoukankan      html  css  js  c++  java
  • effactive java读书小结1

    java程序设计的原则

     1 清晰性和原则性最为重要;模块:任何可重用的软件组件,从单个方法到复杂系统都可以是一个模块。代码应该被重用而不是被拷贝。模块之间的依赖性应该降到最小;错误应尽早检查出来,最好在编译期。

    2 消除过期的对象引用,

    2.1 比如栈中存储对象如果不及时清除对象引用,有可能会造成内存泄漏。

    常见的解决办法有

    • 一旦对象不再使用,及时清空这些引用即可
    • 大多数情况下,不必使用上述方法。因为这样做没有必要。消除过期引用的最好方法就是让包含该引用的变量结束其生命周期。所以合适的变量作用域很重要。

    2.2 内存泄漏的另一个常见来源是缓存。一旦将对象放到缓存中,很容易遗忘掉。使其不再使用后很长一段时间仍然留在缓存中。

    解决该问题的常见方法

    • 随着时间的推移,缓存中的项会变得越来越没有价值。这种情况下,应该时不时的清除掉没用的项。清除工作可以由一个后台线程来完成。
    • 也可以给缓存添加新条目的时候顺便进行清理,linkedHashMap 类利用他的 removeEldestEntry 方法轻松实现
    • 更复杂的缓存,必须直接使用 java.lang.ref

    2.3 内存泄漏的第三个常见来源是监听器和其他回调,如果你实现了一个API,客户端在 API 中注册回调,却没有显示的取消注册。如果不采取措施,很容易积聚。确保回调会立即当做垃圾回收的最好方法

    是只保存他们的弱引用。

    内存分析工具:Heap Profiler

    3 避免使用终结方法

    一般内存回收应该在代码中及时的结束对象引用。而其他资源一般放在 try-finally 块中。

    4 覆盖 object 的 equals 方法

    如果类有自己特有的 “逻辑相等” 概念,而且超类没有覆盖 equals 方法,那么我们就需要覆盖 equals 方法。这种就属于“值类” 的概念。值类仅仅是表示一个值的类,例如 Integer、Date

    一个比较重要的性质是非空性,意思是在调用 equals 方法时,不能抛出 NullPointerException 异常。常见方法如下

    equals 方法具有对称的、传递的、一致的

    5 覆盖 equals 方法后总是覆盖 hashCode ,否则会导致所有基于散列的集合类不正常。例如 HashSet、HashMap、HashTable

    一个好的散列函数通常倾向于 “为不相等的散列函数产生不相等的散列码”

    6 考虑实现 Comparable 接口

    如果是一个值类,它具有非常明显的内在排序关系;比如按字母、按数值或者按年代顺序,可以考虑实现 Comparable 接口。需要实现compareTo方法,当该对象小于、等于、大于指定对象时候,分别返回

    一个负整数、0、正整数。如果两个对象类型不能进行比较,抛出 ClassCastException。

    Comparable 接口性质:自反性、对称性和传递性

    7 共有类永远不要暴露可变域,共有类暴露不可变的域是危害比较小的,有时候需要用包级私有或私有的嵌套类来暴露域。

    8 要优先使用组合而非继承,如果一个类不是自己维护,或者没有详细文档,尽量使用组合。因为当父类版本升级时,可能会改变内部实现,即便子类代码不变,都有可能产生问题。

    如果是自己维护的代码,或者对类的实现非常了解可以谨慎地使用继承。

    继承会把超类API中所有缺陷传播到子类中,而复合则允许设计新的 API 来隐藏这些缺陷。

    9 好的 API 文档应该描述给定的方法做了什么工作,而不是描述它是如何做到的。

    10 在可继承类中构造器不能调用可覆盖方法,如果子类覆盖该方法,可能会产生问题。

  • 相关阅读:
    Flask:flask-script;多app应用;wtforms
    Flask:Locla;偏函数;请求上下文;蓝图;g对象;信号;flask-session
    Flask:闪现; 请求扩展;自定义中间件
    Flask:cookie和session
    Flask:请求与响应
    Flask:重定向;模板语法,
    Flask:路由系统;CBV的代码案例
    软件质量模型
    Selenium with Python 002
    Selenium with Python 001
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/7243391.html
Copyright © 2011-2022 走看看