JavaEE程序编码规范.doc_第1页
JavaEE程序编码规范.doc_第2页
JavaEE程序编码规范.doc_第3页
JavaEE程序编码规范.doc_第4页
JavaEE程序编码规范.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaEE 程序编码规范 Java 程序编码规范 修订记录 Java 程序编码规范 - I - 目 录 JAVA 程序编码规范程序编码规范 .1 1变量的命名规则变量的命名规则 1 1.1常量(包含静态的)1 1.2类变量(静态变量)及实例变量1 1.3局部变量1 1.4参数2 1.5其它2 2方法的命名规则方法的命名规则 3 3类及接口的命名规则类及接口的命名规则 3 3.1一般类名3 3.2值对象3 3.3ACTION3 3.4MYBATIS配置文件4 3.5DAO4 3.6APPLICATION SERVICE4 3.7工具类4 3.8门面类4 3.9代理类4 3.10异常类4 3.11接口类5 3.12接口实现类5 4作用域作用域 5 4.1类的作用域5 4.2方法的作用域5 4.3属性的作用域5 4.4局部变量的作用域5 5注释的编写规则注释的编写规则 6 6格式格式 7 6.1缩进7 6.2每代码行的长度7 6.3大括号8 Java 程序编码规范 - II - 6.4空行8 6.5空格9 6.6IMPORT部分.9 6.7数字9 7性能与安全性能与安全 10 7.1静态检查插件10 7.2空指针引用(NULL POINTER DEREFERENCE) .10 7.3数组引用问题(RETURN ARRAY)10 7.4硬编码敏感数据(HARD-CODED SENSE DATA).10 7.5整数溢出10 7.6对象初始化10 7.7集合对象初始化容量11 7.8简单参数11 7.9FINAL类和方法11 7.10无用的代码11 7.11日志级别11 7.12序列化问题11 7.13通过名称比较类12 7.14类克隆12 7.15JDBC 使用 .13 7.16SQL 语句13 7.17数据库连接释放13 7.18使用存储过程13 7.19第三方组件14 8附件附件 14 Java 程序编码规范 第 1 页 1 变量的命名规则变量的命名规则 1.1常量常量(包含静态的包含静态的) 一个或多个英文单词的组合,所有字母均大写,单词之间以“_”分隔,如: public static final String UPDATE_FLAG = “T”; final double PI = 3.14; 一般情况下常量的 public 等修饰符不可少。 1.2类变量(静态变量)及实例变量类变量(静态变量)及实例变量 一个或多个英文单词的组合,第一个单词的首字母小写,其他单词首字母均大写,其余所有字 母均小写。如: private ProjectSes projectSes; private static String providerUrl = “”; private Logger logger = Logging.getLogger(“TestLogger“); 一般情况下类变量(静态变量)及实例变量的 public 等修饰符不可少。 1.3局部变量局部变量 一个或多个英文单词的组合,一般采用 Hungaryn naming 法(匈牙利定义法),如下: 以下是基本数据类型的前缀列表 前缀前缀含义含义实例实例 ch 表示 char 类型 char chTemp; i 表示 int 类型 int iNumber; byte 表示 Byte 类型 byte byteGet; s 表示 short 类型 short sNumber; l 表示 long 类型 long lNumber; f 表示 float 类型 float fCount; d 表示 double 类型 double dPrise; str 表示 String 类型 String strSend; b 表示 boolean 类型 Boolean bFlag; 其他数据类型的前缀列表 Java 程序编码规范 第 2 页 前缀前缀含义含义实例实例 Collection colUser = new ArrayList(); col表示 Collection 类型 Collection colUser = new Vector(); lst表示 List 类型List lstUser = new ArrayList(); date表示 Date 类型Date dateStart = new Date(); sb表示 StringBuffer 类型 StringBuffer sbName= new StringBuffer(1024) 除上述情况以外的数据类型,都以 obj 作为前缀,后面跟一个能说明变量功能或意义单词作为 变量,如: UserVO objUserVO; 1.4参数参数 一个或多个英文单词的组合,第一个单词的首字母小写,其他单词首字母均大写,其余所有字 母均小写。如: public void setProjectVO(ProjectVO projectVO) public void setUserId(String userId) 建议方法的参数不要超过 5 个,超过时可以将多个参数合并为一个对象进行传递。 1.5其它其它 常用数据类型的变量,采用固定的命名,包括以下几种: Connection conn; ResultSet rs; PreparedStatement pstmt; Statement stmt; 数组变量命名与普通变量命名规则一致,如: int iProjectId; public String userName; 每个变量的声明单独占一行。不能一个类型同时声明两个变量。如:int i, j; 这样的写 法是不允许的。 不要在代码中出现不使用的变量,如果以后会用到或有其他用途要写上注释说明。 类名、变量名中含缩写词组:缩写词组全部大写,如: String strSQL; Java 程序编码规范 第 3 页 public class ProjectDAO 2 方法的命名规则方法的命名规则 方法命名的基本原则:容易看懂 一般的方法名采用两个单词动宾结构形式的名称,两个单词之间不要带其它符号,第 二个单词的首字母大写,其它的都小写。 如:readBudget(int budgetId)、deleteBudget(int budgetId) 只有一个动词形式的方法名不推荐使用。 不容易看明白的方法名或有歧义的方法名可采用多单词的形式,每两个单词之间不要 带其它符号,从第二个单词开始,每个单词的首字母大写,其它的都小写。 如:readBudgetByProjectId(int projectId)、readBudgetByProjectIdAndYear(int projectId,int year) 方法命名不得采用缩写形式。 3 类及接口的命名规则类及接口的命名规则 3.1一般类名一般类名 一个或多个英文单词的组合,所有单词的首字母大写,其余所有字母均小写,如: public class ProjectUser 3.2值对象值对象 数据库表的逻辑名+VO,如: 表 PUB_DICTIONARY 的值对象名为 DictionaryVO。 3.3Action 表名/模块名+Action,如: 字典的 Action 类名为 DictionaryAction。 Java 程序编码规范 第 4 页 3.4MyBatis 配置文件配置文件 表名/模块名+SQL.xml,如: 字典模块的 MyBatis 配置文件命名为 DictionarySQL.xml。 3.5DAO DAO 类名为模块名+DAO,如: 字典 DAO 类名为:DictionaryDAO 3.6Application Service Application Service 类名为模块名+AppService,如: 字典 Application Service 类名为:DictionaryAppService 3.7工具类工具类 工具类的类名为模块名+Util,如: 字典的工具类名为:DictionaryUtil 3.8门面类门面类 门面类的类名为模块名+Facade,如: 字典的门面类名为:DictionaryFacade 3.9代理类代理类 代理类的类名为模块名+Man,如: 字典的代理类名为:DictionaryMan 3.10异常类异常类 异常类的类名为模块名+Exception,如: 字典的异常类名为:DictionaryException Java 程序编码规范 第 5 页 3.11接口类接口类 接口类的类名为模块名+Interface,如: 字典的接口类名为:DictionaryInterface 3.12接口实现类接口实现类 接口实现类的类名为实现名+Imp,如: 字典的接口实现类名为:DictionaryImp 4 作用域作用域 4.1类的作用域类的作用域 类的作用域保持最小范围。供包外其它类引用的类才添加 public 作用域修饰符。 4.2方法的作用域方法的作用域 只供对象或类内部调用的方法必须使用 private 作用域修饰符。 包外不会调用的方法严禁使用 public 作用域修饰符。 4.3属性的作用域属性的作用域 静态常量(类常量)属性可以使用各种作用域修饰符。 对象属性变量严禁使用 public 作用域修饰符。 VO 对象属性变量必须使用 private 作用域修饰符。 4.4局部变量的作用域局部变量的作用域 方法内的变量定义应该遵循最小作用域规则。 如: / iSize 只在下面的 for 循环中使用 int iSize = alItems.size(); for(int i=0;i”。如下: /* * 技改项目业务代表实现类.实现新增项目,删除项目等方法, * 提供对表现层的接口. * author 张三 * since JDK1.4 * history 2004-10-15 张三 新建 */ 类中必要的方法(包括私有方法)要写方法头注释。其中返回值(return)需要说明含义,包括整型, 布尔型,集合等,如对于整形:return 返回 1 表示成功,0 表失败;对于集合类型要写明集合内元素 的类型:return UserVO 的集合。如果注释的内容比较长则需要加“”,如下: /* * 修改投标人信息 * param bidderVO 投标人信息 * throws BidderException 修改异常 * throws NoPermissionException 没有修改权限 Java 程序编码规范 第 7 页 * return 修改成功返回 1 没有修改返回 0 */ public int updateBidder(BidderVO bidderVO) throws BidderException 对代码块的注释,注释语句放在代码块之上,用”/”进行注释,如果注释语句本身超过一行,则 用”/* */”进行注释。 对某一行代码的注释,注释语句放在代码行的后面,用”/”进行注释。 建议代码块之间空一行。如下: public void insertProject(ProjectVO projectVO) / 新增项目信息 iProjectId = Toolkit.getInstance().getNextKey(“Project“); / 取项目 ID logger.debug(“Generate Project ID : “ + iProjectId); Project objProject = projectHome.create(iProjectId); objProject.setProjectVO(projectVO); /* 从项目 VO 中取得申请人 ID 及联系人 ID, 并将申请人 ID 及联系人 ID 插入到 PUB_ACCESS_CONTROL 表 */ projectVO.setProjectId(iProjectId); this.authProject(projectVO); 6 格式格式 引入公司指定的格式化配置文件最新版本,使用 Eclipse 的格式化功能进行代码格式化。 6.1缩进缩进 设定为 4 个字符。 6.2每代码行的长度每代码行的长度 代码行的长度不超过 120 个字符。 Java 程序编码规范 第 8 页 6.3大括号大括号 大括号中的“”与条件在同一行,“”单独一行,即使大括号中只有一条执行语句也要使用大 括号,如: if (a = b) return 0 ; 6.4空行空行 类文件头注释、package 语句、import 语句、类头注释、类的属性、方法等之间都空一行。 类的属性与属性之间、方法与方法之间都空一行。 如下: /* * Copyright (C) 2011 SunLine Information Technology Co.,Ltd * All Rights Reserved. * 本软件为 SunLine 开发研制。未经本公司正式书面同意,其他任何个人、团体不得使用、 * 复制、修改或发布本软件. */ package jectinfo.exception; import top.util.BaseException; /* * 公共项目管理异常类. * author 张三 * since JDK1.4 * history 2005-03-15 张三 新建 */ public class ProjectException extends BaseException private String message; /* . . Java 程序编码规范 第 9 页 */ public ProjectException(String message) super(message); this.message = message; /* . . */ public String getMessage() return message; 6.5空格空格 “=”、“+”、“=”等二元操作符两边分别空一格。如: int i = 1; “,”的后面空一格。如: implements Runnable, cloneable 6.6import 部分部分 import 引用要具体到类名,不能用“*”。 import 语句书写的顺序为:Java 标准类,第三方软件类库,本公司自己的组件类、本工程其他 包中的类。这四部分之间分别空一行。所有需要用到的其他包的类都要在 import 中应用,不要将类 似“new java.util.ArrayList()”的语句写在代码中。 6.7数字数字 long、double、float 型变量后的字母“L”、“D”、“F”均大写。16 进制的前缀“0X”要大 写“X”,数字部分“A”“F”要大写。 代码中不要直接使用数字(-1,0,1 除外),要先对数字进行变量声明。 Java 程序编码规范 第 10 页 7 性能与安全性能与安全 7.1静态检查插件静态检查插件 有 tptp-analysis、PMD、findbugs、checkStyle、commontools 共 5 个插件做为代码自检的标 准工具。按照给定的最新版插件配置文件检查,识别问题原因及改进范围,在上传配置库前改进代 码格式及性能。 7.2空指针引用空指针引用(null pointer dereference) 在使用或引用对象前,要先对其进行检查,判断其是否为空。 7.3数组引用问题数组引用问题(RETURN ARRAY) 不要直接返回指向包含敏感数据的内部数组的引用。不要传回一个数组,而是数组的拷贝。 7.4硬编码敏感数据硬编码敏感数据(Hard-coded sense data) 应该将敏感数据保存在属性文件中,无论什么时候需要这些数据,都可以从该文件读取。如果 数据极其敏感,那么在访问属性文件时,应用程序应该使用一些加密解密技术,避免导致敏感数 据泄露。 7.5整数溢出整数溢出 应该对所有整数计算的结果进行检查,防止整数溢出。 7.6对象初始化对象初始化 对变量的使用不要依赖于初始化。在使用对象之前,应该检查对象的初始化过程。可以采用如 下方法实现: 在每个类中都应该有一个在构造器中设置的私有布尔标志,在每个非 static 方法中,代码在任 何进一步执行之前都应该检查该标志的值。如果该标志的值为 true ,那么控制应该进一步继续;否 则,控制应该抛出一个例外并停止执行。 Java 程序编码规范 第 11 页 7.7集合对象初始化容量集合对象初始化容量 在初始化 StringBuffer、集合类(List、Set、Map)等时,一般要指定对象的初始化容量,避免 不必要的空间浪费,提升性能。 StringBuffer 的初始化容量比 PMD 插件检查后给出的建议值大一些的值; List、Set 初始化容量可设置为估计值; Map 初始化容量可设置为估计值的 2 倍到 3 倍。 7.8简单参数简单参数 方法调用时,传入的参数应该是一个具体对象,而不是一个嵌套另一个方法。比如类似 “this.a(b(c()”,要将方法的返回值赋给变量再作为参数传递。 7.9Final 类和方法类和方法 应该将不允许扩展的类和方法应该声明为 final,这样可以防止系统外的代码扩展类并修改类的 行为。 避免使用非 final 的公共静态变量。 7.10无用的代码无用的代码 应该将(除启动应用程序的 main() 方法之外的) main() 方法、未使用的方法以及死代码从应 用程序代码中除去。 调试使用的控制台输出语句(System.out.println)在调试结束后要删除。 7.11日志级别日志级别 使用正确的日志级别输出,注意 info、warning、debug、error 等级别的使用场合。禁止使用 debug 级别输出错误信息,禁止使用 errror 级别输出调试信息。 7.12序列化问题序列化问题 在包含系统资源的直接句柄和相对地址空间信息的字段前应该使用 transient 关键字。如果资源, 如文件句柄,不被声明为 transient,该对象在序列化状态下可能会被修改,从而使得被反序列化后 获取对资源的不当访问。 Java 程序编码规范 第 12 页 为了确保反序列化对象不包含违反一些不变量集合的状态,类应该定义自己的反序列化方法并 使用 ObjectInputValidation 接口验证这些变量。 为了保护虚拟机外的字节流,可以对序列化包产生的流进行加密。字节流加密防止解码或读取 被序列化的对象的私有状态。如果决定加密,应该管理好密钥,密钥的存放地点以及将密钥交付给 反序列化程序的方式等。 如果一个类定义了自己的序列化方法,它就不能向任何 DataInput/DataOuput 方法传递内部数 组。所有的 DataInput/DataOuput 方法都能被重写。注意默认序列化不会向 DataInput/DataOuput 字节数组方法暴露私有字节数组字段。 7.13通过名称比较类通过名称比较类 在那些非得根据名称来比较类的情况下,必须确保使用了当前类的 ClassLoader 的当前名称空 间,如下面示例中所示的一种更好的比较方法: if(obj.getClass()= this.getClassLoader().loadClass(“com.bar.Vnet“) / objects class is equal to /the class that this class calls “com.bar.Vnet“ else / objects class is not equal to the class that / this class calls “com.bar.Vnet“ 比较类的更好方法是直接比较类对象看它们是否相等: if(a.getClass() = b.getClass() / objects have the same class else / objects have different classes 应该尽可能少用直接名称比较。 7.14类克隆类克隆 除非有明确的需求,否则要保证你定义的类是不可克隆的。要使类不可被复制,只要在每个类 里定义如下方法: public final Object clone() throws java.lang.CloneNotSupportedException throw new java.lang.CloneNotSupportedException(); Java 程序编码规范 第 13 页 如果想让您的类可克隆并且您已经考虑了这一选择的后果,请在你的类中定义一个为 final 的 克隆方法 public fin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论