`
yinwufeng
  • 浏览: 277781 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

68条Java最佳实践

阅读更多
68条Java最佳实践

这里记录的实际上是《Practical Java》一书的目录,该书共总结了68条Java开发中的最佳实践(best practice)。我把这个目录敲到这里来也有助于自己加深印象,部分术语按照我自己的习惯做了调整。对Java有所了解的同学们看了这个目录大概也能知道它在说什么,毕竟这本书是在总结经验而非描述技术细节。这里面很多条也适用于大多数其它的面向对象语言。
一般技术
实践1:参数以 by value 方式而非 by reference 方式传递
实践2:对不变的 data 和 object reference 使用 final
实践3:默认情况下所有非静态方法都可被重载
实践4:在 arrays 和Vectors 之间慎重选择
实践5:多态优于 instanceof
实践6:必要时才使用 instanceof
实践7:一旦不再需要 object references,就将它设为 null
对象与相等性
实践8:区分 reference type 和 primitive type
实践9:区分 == 和 equals()
实践10:不要依赖 equals() 的缺省实现
实践11:实现 equals() 时必须深思熟虑
实践12:实现 equals() 时优先考虑使用 getClass()
实践13:调用 super.equals() 以唤起基类的相关行为
实践14:在 equals() 方法中谨慎使用 instanceof
实践15:实现 equals() 时需遵循某些规则
              万剑补充:Equals()方法实现了等价关系,要求(你要对数学有足够兴趣才能证明…):
              自反性:x.equals(x) == true
              对称性:x.equals(y) == true  y.equals(x) == true
              传递性:x.equals(y) == true && y.equals(z) == true  x.equals(z) == true
              一致性:x.equals(y) == true && x,y没有被修改  多次调用 x.equals(y),依然返回为true
异常处理
实践16:认识“异常控制流”机制
实践17:绝对不可忽视异常
实践18:千万不要遮掩(hide)异常
实践19:明察 throws 子句的缺点
实践20:细致而全面地理解 throws 子句
实践21:使用 finallly 避免资源泄漏
实践22:不要从 try 块中返回
实践23:将 try / catch 块置于循环之外
实践24:不要将异常用于流程控制
实践25:不要每逢出错就使用异常
实践26:在构造函数中抛出异常
实践27:抛出异常之前先将对象恢复为有效状态
性能
实践28:先把焦点放在设计、数据结构和算法身上
实践29:不要依赖编译期优化技术
实践30:理解运行期代码优化技术
实践31:如欲进行字符串拼接,StringBuffer 优于 String
实践32:将对象的创建成本降至最小
实践33:慎防未用上的对象
实践34:将同步减至最低
实践35:尽可能使用 stack 变量
实践36:使用 static、final 和 private 方法以促成内联
实践37:instance 变量的初始化一次就好
实践38:使用基本类型(primitive types)使代码更快更小
实践39:不要使用 Enumeration 或 Iterator 来遍历 Vector
实践40:使用 System.arraycopy() 来复制 arrays
实践41:优先使用 array,然后才考虑 Vector 和 ArrayList
实践42:尽可能复用(reuse)对象
实践43:使用延迟求值(lazy evaluation)
实践44:以手工方式将代码优化
实践45:编译为本机代码(native code)
多线程
实践46:面对 instance 方法,synchronized 锁定的是对象而非方法或代码
实践47:弄清楚 synchronized statics 方法与 synchronized instance 方法之间的差异
实践48:以“private 数据 + 相应访问函数(accessor)” 替换 “public/protected数据”
实践49:避免无谓的同步控制
实践50:访问共享变量时请使用 synchronized 或 volatile
实践51:在单一操作中锁定所有用到的对象
实践52:以固定而全局性的顺序取得多个locks以避免死锁
实践53:优先使用 notifyAll() 而非 notify()
实践54:针对 wait() 和 notifyAll() 使用旋锁(spin locks)
实践55:使用 wait() 和 notifyAll() 替换轮询循环
实践56:不要对上锁对象的对象引用重新赋值
实践57:不要调用 stop() 或 suspend()
实践58:通过线程之间的协作来终止线程
类与接口
实践59:运用接口来实现多继承
实践60:避免接口中的方法发生冲突
实践61:如需提供部分实现,请似乎用抽象类
实践62:区分接口(interface)、抽象类(abstract class)和实体类(concrete class)
实践63:审慎地定义和实现不可变(immutable)类
实践64:欲传递或接受可变(mutable)对象的对象引用时,请实现 clone()
实践65:使用继承或委托来定义不可变类
实践66:实现 clone() 时记得调用 super.clone()
实践67:别只依赖于 finalize() 清理内存以外的资源
实践68:在构造函数内调用 non-final 方法时要当心
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics