《2022年JAVA开发编码规范. .pdf》由会员分享,可在线阅读,更多相关《2022年JAVA开发编码规范. .pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1/18 JAVA 开发编码规范名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 2/18 版 本 说 明版本制订人制订日期主要内容名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - 前言 . 4目的 . 41.2、范围 . 4格式规范 . 52.1 缩进 . 52
2、.2 换行 . 52.3 间隔 . 52.4 对齐 . 52.5 括号 . 6三、注释规范 . 63.1 基本原则 . 63.2 文件注释 . 63.3 Java Doc 注释 . 73.4 失效代码注释. 83.5 代码细节注释. 83.6 注释的格式 . 83.7 注释的内容 . 93.8 Null 规约 . 94 命名规范 (Naming Conventions) . 10 4.1 基本约定 . 10 4.2 文件、包 . 11 4.3 类、接口 . 11 4.4 字段 . 11 5 编程规范 (Programming Conventions) . 12 5.1 基本规范 . 12 5.
3、2 类与接口 . 13 5.3 方法 . 13 5.4 错误与异常 . 14 5.5 JDK5.0 及后续版本 . 15 5.6 性能与安全 . 15 6 自动代码检查和修正. 17 6.1 为了编码的一致性,统一将Workspace 中的编码方式设置为UTF-8 编码 . 17 6.2 使用统一的代码模板. 17名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - 前言目的本规范的目的是通过建立编码规范统一每个开发人员的编码习惯,
4、提高程序的可靠性、可读性、可修改性、可维护性及一致性,增加团队合作开发效率,为各项目组之间或项目组内成员之间的技术交流提供一个方便统一的方式。1.2、范围本规范适用于公司内所有运用JAVA 技术的软件项目、产品等的设计、开发以及维护、升级等。本规范适用于公司所有JAVA 软件开发人员。本规范建议的开发环境与工具如下:IDE:Eclipse3.3.2 以后版本插件 :MyEclipse6.0 以后版本JDK: Sun JDK 1.5 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4
5、页,共 18 页 - - - - - - - - - 格式规范对于代码,首要要求是它必须正确,能够按照设计预定功能去运行;第二是要求代码必须清晰易懂,使软件开发团队中的程序员能够很容易地理解代码。代码的组织和风格的基本原则是:便于自己的开发,易于与他人的交流。因个人习惯和编辑器等可以设置和形成自己的风格,但必须前后一致,并符合本规范的基本要求和原则。2.1 缩进使用 TAB 缩进,而不是空格键 将缩进 2,4,8 字符的选择权留给阅读者。子功能块当在其父功能块后缩进。当功能块过多而导致缩进过深时当将子功能块提取出来做为子函数。2.2 换行页宽应该设置为80 字符。一般不要超过这个宽度, 这会导
6、致在某些机器中或打印(A4 )时无法以一屏来完整显示, 但这一设置也可以灵活调整。在任何情况下, 超长的语句应该在一个逗号后或一个操作符。前折行。一条语句折行后, 应该比原来的语句再缩进一个TAB,以便于阅读。2.3 间隔类、方法及功能块间等应以空行相隔,以增加可读性,但不得有无规则的大片空行。操作符两端应当各空一个字符以增加可读性。相应独立的功能模块之间可使用注释行间隔,并标明相应内容。2.4 对齐关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。连续赋值时应当对齐操作符。当方法参数过多时在适当的参数后(逗号后) 换行并对齐。当控制或循环中的条件比较长时当换行(操作符前)、对齐
7、并注释各条件。2.5 括号括号中的语句应该单独作为一行,左括号 当紧跟其语句后,右括号 永远单独作为一行且与其匹配行对齐,并尽量在其后说明其匹配的功能模块。较长的方法以及类、接口等的右括号后应使用/end .等标识其结束。如: 类的结束符:/end ClassName,方法结束符:/end methodName() ,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - 功能块结束:/end if.userName is null?
8、 循环快结束:/end for.every user in userList 不要在程序中出现不必要的括号,但有时为了增加可读性和便于理解,当用括号限定相应项。if, for,while 语句只有单句时,如果该句可能引起阅读混淆,需要用 和 括起来,否则可以省略。三、注释规范3.1 基本原则基本原则:注释应该增加代码的清晰度。代码注释的目的是要使代码更易于被其他开发人员等理解。注释信息不仅要包括代码的功能,还应给出原因。除变量定义等较短语句的注释可用行尾注释外,其他注释当避免使用行尾注释。3.2 文件注释在每个文件、包的头部都应该包含该文件的功能、作用、作者、版权以及创建、修改记录等。并在其中
9、使用版本仓库标记自动跟踪版本变化及修改记录等信息。注意是标准的C-Style/*.*/ 注 释 而 不 是 /* .*/ 形 式 的JavaDoc 注 释 , 在ECLIPES中 使 用CODE TEMPLATES 会自动添加,如下。/* * (#) Test1.java * Created Date: Sep 11, 2008 * * Copyright (c) Jiangsu Ecode Co., Ltd * * This software is the confidential and proprietary information of * Jiangsu Ecode Co., Ltd
10、. (Confidential Information). You shall not * disclose such Confidential Information and shall use it only in accordance * with the terms of the license agreement you entered into with * Jiangsu Ecode Co., Ltd. */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共
11、18 页 - - - - - - - - - 3.3 Java Doc 注释对类、方法、变量等的注释需要符合JavaDoc 规范,对每个类、方法都应详细说明其功能、条件、参数等,并使用良好的HTML 标记格式化注释,以使生成的JavaDoc 易阅读和理解。类注释中当包含版本和作者信息,使用版本仓库的标记自动跟踪版本变化和修改记录,如下。/* *用于示例的类*authorguoqiang *version$Rev$ *$Id:Test1.java,v1.22008/09/1702:25:08cvsrootExp$ */ publicclass Test1 privatestaticfinal L
12、ogger logger= Logger.getLogger(Test1.class); /* * 一个测试的方法*param userid 用户编号*return 返回用户信息对象,若无该用户信息,则返回null */ private UserInfo getStrings(Integer userid) return userInfo; 3.4 失效代码注释由/*.*/ 界定,标准的C-Style 的注释。专用于注释已失效的代码。/*username = ; password = ; currentCar = ; logined = false; attributes = new Hash
13、Map(); attributes.put(title, hello);*/ 失效注释快捷键是Ctrl+Shift+/ ,取消注释是Ctrl+Shift+ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - 3.5 代码细节注释由/ 界定,专用于注释代码细节,即使有多行注释也仍然使用/,以便与用 /*/ 注释的失效代码分开除了私有变量外,不推荐使用行末注释。/设置 CarBean for( int i=0; i 20; i+) /
14、首先需要生成实例CarBean bean = new CarBean(); bean.setBaseprice(11); bean.setDescription(aa); bean.setName(1111); cdao.save(bean); 3.6 注释的格式注释中的第一个句子要以(英文)句号、问号或者感叹号结束。Javadoc 生成工具会将注释中的第一个句子放在方法汇总表和索引中。为了在JavaDoc 和 IDE 中能快速链接跳转到相关联的类与方法,尽量多的使用see xxx.MyClass ,see xx.MyClass#find(String) 。Class 必须以 author 作
15、者名声明作者,不需要声明手工指定version 与date,由版本管理系统保留此信息。如果注释中有超过一个段落,用分隔。示例代码以 包裹。/ 标识 (java keyword, class/method/field/argument 名, Constants) 以包裹。标识在第一次出现时以linkxxx.Myclass注解以便 JavaDoc 与 IDE 中可以链接。3.7 注释的内容对于API 函数如果存在契约,必须写明它的前置条件(precondition) ,后置条件(postcondition) ,及不变式 (invariant) 。对于调用复杂的API 尽量提供代码示例。对于已知的B
16、ug 需要声明。在本函数中抛出的unchecked exception 尽量用 throws 说明。注释中的每一个单词都要有其不可缺少的意义,注释里不写param name -名字 无意义的内容。注释的标签必须有内容,不能存在空的param name,空的 return。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - 3.8 Null 规约如果方法允许Null 作为参数,或者允许返回值为Null ,必须在 JavaDoc 中说
17、明。如果没有说明,方法的调用者不允许使用Null 作为参数,并认为返回值是Null Safe的。/* *paramactionEvent 买车按钮的动作事件*throwsException 一般异常*/ publicvoid buyCar(ActionEvent actionEvent) throws Exception 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 18 页 - - - - - - - - - 4 命名规范 (Naming Conventions) 规
18、范的命名能使程序更易阅读,从而更易于理解。它们也可以提供一些标识功能方面的信息,有助于更好的理解代码和应用。4.1 基本约定使用可以准确说明变量/字段 /类 /接口 /包等的完整的英文描述符。例如,采用类似firstName,listAllUsers 或 CorporateCustomer 这样的名字,严禁使用汉语拼音及不相关单词命名,虽然Java 支持 Unicode 命名,但本规范规定对包、类、接口、方法、变量、字段等不得使用汉字等进行命名。采用该领域的术语。如果用户称他们的“ 客户 ”(clients) 为“ 顾客 ” (customers) ,那么就采用术语 Customer 来命名这
19、个类,而不用Client。采用大小写混合,提高名字的可读性。一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。包名全部小写。尽 量 少 用 缩 写 , 但 如 果 一 定 要 使 用 , 当 使 用 公 共 缩 写 和 习 惯 缩 写 等 , 如 实 现(implement) 可缩写成impl ,应用程序(application ) 可缩写成app 等,严禁滥用缩写。避免使用长名字(最好不超过25 个字母)。避免使用相似或者仅在大小写上有区别的名字。避免使用数字,但可用2 代替 to,用 4 代替 for 等,如: go2Jsp。遇 到 缩 写 如XML 时
20、,仅 首 字 母 大 写 ,即loadXmlDocument() 而 不 是loadXMLDocument() 。4.2 文件、包文件名当与其类严格相同,所有单词首字母大写。包名一般以项目或模块名命名,少用缩写和长名,一律小写。基本包: com.candur,所有包、文件都从属于此包。包名按规则组成:基本包 . 项目名 . 模块名 . 子模块名 . 不得将类直接定义在基本包下,所有项目中的类、接口等都当定义在各自的项目和模块包中。4.3 类、接口所有单词首字母大写。使用能确切反应该类、接口含义、功能等的词。一般采用名词。接口可以可以在名词前加大写I,如 IBookDao, ,BookDaoIF
21、 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页 - - - - - - - - - 4.4 字段4.4.1 常量采用完整的英文大写单词,在词与词之间用下划线连接,如:DEFAULT_V ALUE 4.4.2 变量和参数对不易清楚识别出该变量类型的变量应使用类型缩写作其前缀,如字符串使用strXXX ,boolean 使用 isXXX ,hasXXX 等等。除第一各个单词外其余单词首字母大写。对私有实例变量可使用下划线“_”前缀,但在其存取方法中则应该将其前
22、缀去掉。局部变量及输入参数不要与类成员变量同名(get/set 方法与构造函数除外)。4.4.3 组件 /部件应采用完整的英文描述符命名组件(接口部件) ,遵循匈牙利命名法则页面部件名建议命名为: btnOK、lblName 或okBtn 、nameLbl。(II) 4.4.4 集合一个集合,例如数组和矢量,应采用复数 命名来表示队列中存放的对象类型。命名应采用完整的英文描述符,名字中所有非开头的单词的第一个字母应大写,适当使用集合缩写前缀。如: _ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
23、- - - 第 11 页,共 18 页 - - - - - - - - - 5 编程规范 (Programming Conventions) 声明的基本原则是遵守Java 语言规范,并遵从习惯用法。5.1 基本规范当 面 对 不 可 知 的 调 用 者 时 , 方 法 需 要 对 输 入 参 数 进 行 校 验 , 如 不 符 合 抛 出IllegalArgumentException ,建议使用Spring 的 Assert 系列函数。隐藏工具类的构造器,确保只有static 方法和变量的类不能被构造实例。变量,参数和返回值定义尽量基于接口而不是具体实现类。如:代码中不能使用System.o
24、ut.println() ,e.printStackTrace(),必须使用logger 打印信息。5.2 类与接口5.2.1 基本原则类的划分粒度,不可太大,造成过于庞大的单个类,也不可太细,从而使类的继承太深。一般而言,一个类只做一件事;另一个原则是根据每个类的职责进行划分,比如用 User 来存放用户信息,而用UserDAO 来对用户信息进行数据访问操作(比如存取数据库),用UserBroker 来封装用户信息的业务操作等等。多使用设计模式,随时重构。多个类中使用相同方法时将其方法提到一个接口中或使用抽象类,尽量提高重用度。将不希望再被继承的类声明成final ,例如某些实用类,但不要滥
25、用final,否则会对系统的可扩展性造成影响。将不希望被实例化的类的缺省构造方法声明成private。5.2.2 抽象类与接口一般而言:接口定义行为,而抽象类定义属性和公有行为,注意两者间的取舍,在设计中,可由接口定义公用的行为,由一个抽象类来实现其部分或全部方法,以给子类提供统一的行为定义,可参考Java 集合等实现。多使用接口,尽量做到面向接口的设计,以提高系统的可扩展性。5.2.3 继承与组合尽量使用组合来代替继承,一则可以使类的层次不至于过深,而且会使类与类,包与包之间的耦合度更小,更具可扩展性。5.2.4 构造函数和静态工厂方法当需要使用多个构造函数创建类时,建议使用静态工厂方法替代
26、这些构造方法。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 18 页 - - - - - - - - - 5.3 方法5.3.1 基本原则一个方法只完成一项功能,在定义系统的公用接口方法外的方法应尽可能的缩小其可见性。避免用一个类是实例去访问其静态变量和方法。避免在一个较长的方法里提供多个出口。5.3.2 参数和返回值避免过多的参数列表,尽量控制在5 个以内,若需要传递多个参数时,当使用一个容纳这些参数的对象进行传递,以提高程序的可读性和可扩展性。参数类型和返回值尽量
27、接口化,以屏蔽具体的实现细节,提高系统的可扩展性。5.4 错误与异常5.4.1 基本原则通常的思想是只对错误采用异常处理:逻辑和编程错误,设置错误,被破坏的数据,资源耗尽,等等。通常的法则是系统在正常状态下以及无重载和硬件失效状态下,不应产生任何异常。最小化从一个给定的抽象类中导出的异常的个数。对于经常发生的可预计事件不要采用异常。不要使用异常实现控制结构。确保状态码有一个正确值。在本地进行安全性检查,而不是让用户去做。若有 finally 子句,则不要在try 块中直接返回,亦不要在finally 中直接返回。5.4.2 已检查异常与运行时异常已检查异常必须捕捉并做相应处理,不能将已检查异常
28、抛到系统之外去处理。对可预见的运行时异常当进行捕捉并处理,比如空指针等。通常,对空指针的判断不是使用捕捉NullPointException 的方式,而是在调用该对象之前使用判断语句进行直接判断。建议使用运行时异常(RuntimeException) 代替已检查异常(CheckedException)。5.4.3 异常处理重新抛出的异常必须保留原来的异常,即throw new NewException(message, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 1
29、8 页 - - - - - - - - - e); 而不能写成 throw new NewException(message) 。在所有异常被捕获且没有重新抛出的地方必须写日志,避免异常的湮没。如果属于正常异常的空异常处理块必须注释说明原因,否则不允许空的catch 块。框架尽量捕获低级异常,并封装成高级异常重新抛出,隐藏低级异常的细节。多个异常应分别捕捉并处理,避免使用一个单一的catch 来处理。5.5 JDK5.0 及后续版本重载方法必须使用Override,可避免父类方法改变时导致重载函数失效不关心的 warning 信息用 SuppressWarnings(unused) ,Supp
30、ressWarnings(unchecked),SuppressWarnings(serial) 注释掉。5.6 性能与安全5.6.1 String 与StringBugffer 不要使用如下String 初始化方法:String str = new String(“ abcdef ” );这将产生两个对象,应当直接赋值:String str = “ abcdef ”;在处理可变 String 的时候要尽量使用StringBuffer 类, StringBuffer 类是构成 String 类的基础。 String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人
31、员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用StringBuffer 来实现大部分的工作,当工作完成后将StringBuffer 对象再转换为需要的String 对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer 对象和她的 append() 方法。如果我们用String 对象代替 StringBuffer 对象的话,将会花费许多不必要的创建和释放对象的CPU 时间。5.6.2 集合避免使用 Vector 和HashTable 等旧的集合实现,这些实现的存在仅是为了与旧的系统兼容,而且由于这些实现是同步的,故而在大量操作
32、时会带来不必要的性能损失。在新的系统设计中不当出现这些实现,使用ArrayList 代替Vector,使用 HashMap 代替HashTable。若却是需要使用同步集合类,当使用如下方式获得同步集合实例:Map map = Collections.synchronizedMap(new HashMap(); 由于数组、 ArrayList 与 Vector 之间的性能差异巨大(具体参见Java fitball ),故在能使用数组时不要使用ArrayList ,尽量避免使用Vector。5.6.3 对象名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
33、 - - - - - 名师精心整理 - - - - - - - 第 14 页,共 18 页 - - - - - - - - - 避免在循环中频繁构建和释放对象。不再使用的对象应及时销毁。如无必要,不要序列化对象5.6.4 同步在不需要同步操作时避免使用同步操作类,如能使用ArrayList 时不要使用Vector。尽量少用同步方法,避免使用太多的synchronized 关键字。尽量将同步最小化,即将同步作用到最需要的地方,避免大块的同步块或方法等。5.6.5 final 将参数或方法声明成final 可提高程序响应效率,故此:注意绝对不要仅因为性能而将类、方法等声明成final ,声明成 f
34、inal 的类、方法一定要确信不再被继承或重载!不需要重新赋值的变量(包括类变量、实例变量、局部变量)声明成final 。所有方法参数声明成final 。私有 (private)方法不需要声明成final 。若方法确定不会被继承,则声明成final。5.6.6 垃圾收集和资源释放不要过分依赖JVM 的垃圾收集机制,因为你无法预测和知道JVM 在什么时候运行GC。尽可能早的释放资源,不再使用的资源请立即释放。可能有异常的操作时必须在try 的finally 块中释放资源,如数据库连接、IO 操作等。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
35、- - - - 名师精心整理 - - - - - - - 第 15 页,共 18 页 - - - - - - - - - 6 自动代码检查和修正6.1 为了编码的一致性,统一将Workspace 中的编码方式设置为UTF-8 编码6.2 使用统一的代码模板首先,需要加载指定的代码模板,打开Code Templates 后选择Comments,再点击Import,将 jsecode_eclipse_codetemplates.xml 模板导入。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
36、 第 16 页,共 18 页 - - - - - - - - - 其次,在创建类或者接口的时候需要勾选Generate comments 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 18 页 - - - - - - - - - 代码模板导入之后,请修改注释中的作者部分,改写为您自己的联系方式和名称。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 18 页 - - - - - - - - -