首先,强烈推荐你先参考Sun官方的Java代码/编程规范:
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
你可以打破以上的任一规则,不过一定要有个好理由,并且记录下来。
永远,永远,永远不要在没有记录堆栈跟踪信息(stack trace)或是重新抛出异常的情况下捕获异常,俗称“吃掉异常”。用log.debug()也不错,只要别丢失堆栈跟踪信息就行。
原则上请使用基于setter方法的依赖注入来将类与类解耦(当然,如果紧耦合可以令人满意的话就另当别论)。
若没有足够理由,不要把实例或类变量声明为公有。通常,实例的私有变量如果不需要暴露给外部的话,则无需设置setter和getter方法。
避免缩写。为人熟知的缩写则可以,例如DAO。
建议约定:需要返回Collections或者数组的方法不应该返回null。应该返回空的容器或数组,而不是null。
禁止使用“魔法数字”,即禁止在代码中直接使用未声明的常量数字。
设计一组常量时优先考虑使用enum类型枚举,如果你的JDK版本高于5.0的话。
类被设计用来归纳一种对象,即把一种对象的属性和行为归置在一起,形成一个“类型”。包则是把相关的类集中在一起的容器,所以可以利用“同包级访问”权限(即不声明为public/protected/private)来进一步完善系统模块的封装性,类似C++中的“友元”。
在系统设计中,不可避免的会涉及到创建工具类型,如:StringUtils, DateTools … 这些工具类型的特点是:静态而不需要被实例化,因此建议将此类型声明为抽象(abstract)。
以面向对象的角度来看,结构化的程序都是静态(static)的,大量使用静态类型无疑不是面向对象的思路。静态域是无法为实例保持状态的,同时,在多线程情况下,需要考虑静态类型造成线程重入和内存不同步的问题。慎用静态(static)。