Java编码规范
Neusoft Co., Ltd.
注释
• • • • • • 版权信息注释 类注释 成员注释 方法注释 内部类的注释 其它的注释
Neusoft Co., Ltd.
Hale Waihona Puke 注释• 版权信息注释 必须在java文件的开头,建议如下格式:
/* * $Header$ * $Revision$ * $Date$ * * Copyright (c) 2007 东软IT实训中心 */
Neusoft Co., Ltd.
类
• 构造方法 它应该用递增的方式写(如:参数多的写在后面):
public CounterSet(size) { this.size = size; }
• 类方法(静态方法) 有static关键字 • 实例方法 无static关键字。 必要时,须加上final修饰符,表示本方法不可被覆盖。
Neusoft Co., Ltd.
源程序
• 源文件的组织 – 版本信息和版权声明 • 作为源文件开始。 • *建议使用开发工具(如Eclipse)的注释功能自动完成此 类工作。
– *使用部门统一的格式化和模版文件(只能在Eclipse
中使用)。
Neusoft Co., Ltd.
源程序
• 源文件的组织 • 包的声明必须是非注释的第一行,用一个空格分隔 package关键字与包的名字,如: – package com.neusoft.softdev.firewall; • 引用声明 – 从第一列开始 – 用一个空格分隔import关键字和引用类型名。 – 应保证引入类都被使用,减少引入*的使用。 ※ »import java.sql.SQLException; //GOOD »Import java.sql.*; // BAD • 类或接口声明 – 每个源程序必须有一个class或interface声明
Neusoft Co., Ltd.
注释
• 成员注释 – 建议所有类成员都作注释以提高可读性与可维护性 – 只有public和protected类型的类成员注释可被javadoc提 取到文档中 /** * <p>Discription:[字段功能描述]</p> */
Neusoft Co., Ltd.
Neusoft Co., Ltd.
类
• main方法 如果定义了main(String[] args)方法,那应写在类底部。
Neusoft Co., Ltd.
接口
• 定义形式类似于类的定义形式。声明采用如下格式:
[public] interface InterfaceName [extends SuperInterfaces] { // Interface Body }
注释
• 方法注释 内容包括:※ – 方法功能介绍 – 参数说明 – 返回类型说明 – 例外类型 – JDK/SDK的引入版本等
/** * <p>Discription:[方法功能中文描述]</p> * @param arg1 * @param arg2 * @author:[创建者中文名字] * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述] */
Neusoft Co., Ltd.
注释
应能够帮助读者理解代码的功能和作用、程序的流程 注释要言简意赅 须注意注释的正确性,错误的注释还不如不做注释 临时的注释用“temporary note”进行标注,以利于将来程序 发布时将其删去,如: // temporary note: Change this to call sort() when the bugs... • 源码中加入适当的注释,可自动生成与源码同步的文档 • • • •
代码规范的目的
• • • • • 代码的编写保持一致性 提高代码的可读性和可维护性 方便团队中的成员之间共享代码 易于代码的回顾 ……※
Neusoft Co., Ltd.
源程序
• 源程序命名 – 名字:源程序中定义的class或interface的名字 – 后缀: .java • 供发布的文件 – 名字:应该是有代表性的 – 后缀: *.jar(推荐使用);或*.zip、*.ear、*.war等 • 源文件的组织 – 应按如下顺序书写,并且各元素之间至少一个空行分隔: • 1)版本信息和版权声明 • 2)包的声明 • 3)引用声明 • 4)类或接口的声明
Neusoft Co., Ltd.
类
• 类成员变量(字段/属性)的存取方法 接下来是类变量的存取方法:
/** * Get the counters * @return an array containing the statistical data. */ public int[] getPackets() { return packets; } public void setPackets(int[] packets) { this.packets = packets; }
Neusoft Co., Ltd.
类
• 类的组织顺序建议如下: – 类的定义 – 类的成员变量(字段/属性) – 类成员变量(字段/属性)的存取方法 – 构造函数 – 类方法(静态方法) – 实例方法 – main方法
Neusoft Co., Ltd.
类
• 类的定义 包含在不同的行的extends和implements,如: public class CounterSet extends Observable implements Cloneable • 类的成员变量(字段/属性) 接下来是类的成员变量 /** * Packet counters */ protected int[] packets;
Neusoft Co., Ltd.
注释
• 内部类的注释 可参考“类注释” • 其它的注释 – 代码修改的注释※ • 修改单行,在上一行使用单行注释,写明修改原因, 人员姓名和日期 • 用单行注释符号注释原行代码,在下一行添加更新的 代码 – 冗余代码的注释 • 注释冗余代码行,并在前一行注明原因,注释人员姓 名和日期 – 类体外的注释 • 主要包括package和import语句。引入新类包同时不需 要指定引入人及日期等log信息,多余类包可直接删除
Neusoft Co., Ltd.
空白的使用
• 缩进 – 要求是四个空格 TAB在不同的源代码管理工具中因为用户设置的不同宽度 不相同,因此不要使用TAB – 建议修改各管理工具的设置将TAB字符扩展为4个空格 • 行的延续(折行) – 行应为120列,超出此限制应截成比较短的行 – 在逗号之后折行或一个操作符之前折行△ – ※尽可能采用高层次的折行 – ※折行后对齐上一行语句同一层的起始位置 – ※如果上面规则不适用,则缩进4个字符
语句
• 简单语句※ – 赋值的表达式 • 每行只含一条语句 – 本地变量声明 • 应在不同的行中 • 对声明后不再变动应当声明为final,使编译器作优化 – 数组声明 • 数组的[]应紧跟类型名 • 在“[”之前不能有空格 – return语句 • return后的表达式,应用括号包起来 • 简单返回值,不用括号
Neusoft Co., Ltd.
注释
• 类注释 – 通常放在类定义的前面(类实体以外) – 通常详细介绍该类的功能、作者、版本,“@deprecated” 标志的使用,以及产生该类的时间和引用其他类等信息
/** * <p>Description: [描述该类概要功能介绍]</p> * * @see ng.Class#getDeclaredMethod(String, Class[]) * @author 作者中文名 * @version 1.0, 2006-1-11 * @deprecated */
Neusoft Co., Ltd.
命名规范
• 类和接口的命名 – 一般由大写字母开头其它字母小写的单词组成 – 专有的缩写词除外,如:AWTException – class名字建议用名词或名词短语 – interface名字取决于其主要功能和用途 • 是使Object具有特定的功能,建议使用可以描述此功 能的形容词(加上-able或者-ible后缀)如: Searchable, Sortable, NetworkAccessible等 • 否则,建议使用名词或者名词短语
Neusoft Co., Ltd.
命名规范
• 变量命名 – 采用大小写混合的形式 – 以小写字母开头,名字中其他单词(或只取首字母的缩写 单词)以大写字母开头,其它都为小写字母 – 不使用下划线分隔 – 应为名词或名词短语 例: boolean resizable; char recordDelimiter
Neusoft Co., Ltd.
空白的使用
• • • • 空行 空格 缩进 行的延续(折行)
Neusoft Co., Ltd.
空白的使用
• 空行 有益于将代码按照逻辑分段,以提高代码的可读性。※ 下列情况用一个空行: – 在版权声明、包声明块、引用声明块之后 – 在类的声明之间 – 在方法的声明之间 – 在类中声明最后一个属性之后,声明第一个方法之前
Neusoft Co., Ltd.
命名规范
• • • • • 包的命名 类和接口的命名 变量命名 常量命名 方法命名
Neusoft Co., Ltd.
命名规范
• 包的命名 – 全部由小写字母组成。 – 如: package telmecall.business.console; package telmecall.business.exception; package telmecall.presentation.util; 其中 telmecall 指项目名称 business 指业务逻辑 console指具体模块