IBM GDC DL
Teambiz后台开发规范
(2012年3月9日修订版)
撰写:何杨
2012年3月9日
1. 包的命名
包名应全由小写单词组成,如com.dalpha.common.gui,com.dalpha.biz.supply
2. 接口的命名
Java接口采用统一的前缀I,如IService.java
3. 接口实现类的定义
接口实现类建议采用统一的后缀Impl,如:ServiceImpl
4. 抽象类,普通类的定义
可视化类:功能描述后加上相应的后缀。
例如:
对于对话框,功能加Dlg,如:ContractDlg
对于面板,功能加Panel,如:ContractPanel
对于按钮,功能加Btn,如:deleteBtn
对于实用工具类,功能加Util后缀,如:FileUtil
对于线程类,功能加Thread后缀,如:TimerThread
对于消息主题,功能加Listener后缀或者sender后缀,如:NegotitiaonListener
5. 常量定义
关于常量的命名方法,在JAVA代码中,无论什么时候,均提倡应用常量取代数字、固定字符串。也就是说,程序中除0,1以外,尽量不应该出现其他数字。常量可以集中在程序开始部分定义或者更宽的作用域内,名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线“_”来分割这些单词。
举例:定义最大时间常量,如下:
Public static final String Max_Time;
或者Public static final String MAX_TIME。
6. 变量定义
命名规则如下:
一个变量名应该是可读的,易记的和恰如其分的。
所有变量在其作用域内必须有一个唯一的名称,不要试图用大小写来区分不同的变量。
变量的名称一般应该是名词形式,要能体现出变量的作用,不要使用毫无意义的名称给方法或者变量命名。
使用骆驼命名法给变量命名。变量名以小写字母开头,以后每遇到一个单词则将其首字母大写。变量名中最重要的词应该放在最前面。如revenueTotal(总收入), expenseAverage(平均支出)
在体现变量的功能前提下缩短变量的长度,变量名为6-8个字符最佳,最好不要超过18个字符。
缩写要少用,除非它有唯一的意义并达成了广泛共识。避免使用程序语言中的保留字和关键字。
在循环和多重循环中才能使用单字符的变量名,如i,j,k,切勿在其它场合中使用它们。
当变量是一个集合如数组,链表或哈希表时建议采用s后缀以明示出来,当其不是时切勿采用。也可以采用数组后缀s,链表后缀list,哈希表后缀map的做法,如users,userList,userMap。
常用的变量命名
数量:count
序列:index
总和:sum/total
序号:id
名称:name
大小:size
返回值:retval
图表:chart/graph/diagram
实体:entity
标志:symbol
平均值:average
状态:status
几何尺寸:width,height
布尔变量的命名
一般来说在Java编程中不推荐使用匈牙利命名法,即为每一个类型的变量名前加上其类型的前缀的做法,但布尔变量例外。
布尔变量一般以单词is,has,can,not开头,如isMale,isLoggedIn, hasChild, canBeSerialized,notFound.
常用的布尔变量后缀:done,error,passed,valid,found,success,ok
变量名中的常见对仗词
Begin/end
First/last
Locked/unlocked
Min/max
Next/previous(prev)
Old/new
Opened/closed
Visible/invisible
Source/target
Source/destination
Up/down
可视化组件变量的定义为功能加可视化后缀,比如deleteBtn
7. 参数定义
同普通变量定义一致。
8. 方法定义
函数(方法)名的首个单词应该是动词,因为它表示一个动作,会执行一个或多个操作。
使用具有描述性的名称,命名要能准确的表示出函数的功能和用途,采用动词加名词的形式,且长度为6-18个字符。如getCurrentPage, isPrimeNumber,printArray
一切函数都应该以小写字母开头,无论是常规函数还是静态函数,无论其是公有,私有还是保护。
现举例如下:
C:createNegotitaion()
R:getNegotitaion(),searchNegotitaion()
U:updateNegotitaion()
D:deleteNegotitaion()
H:handleDeal()
表示判断的:isActive(),hasBuyer(),canDelete()
9. 注释的写法规范
注释用来描述代码中复杂晦涩的部分,它必须能清楚的解释代码的意图而不仅仅是复述代码,如果有些事情在代码中不是很明显,那么就必须要加入注释。不要把注释当作不恰当的包名,类名,变量函数名的补救措施,它只是代码的有效补充。
一般来说,在定义,分支,循环和重要的语义段前都要加上注释,在严格的商业项目中,
注释一般占到代码量的1/3左右。多行注释使用/*….*/,单行注释使用//。类,公有函数和成员变量一定要有清晰而规范的注释。
类的注释:
类的注释主要包含以下几点:功能,作者,创建时间,修改者,修改时间
/**
* 功能: XXXXXXXX
* 作者: XXX
* 时间: XXXX-XX-XX XX:XX:XX
* 修改者: XXX
* 修改时间: XXXX-XX-XX XX:XX:XX
*/
函数的注释:
函数的注释主要包含以下几点:功能,作者,创建时间,参数说明
/**
* 功能: XXXXXXXXXXXXXXXXXXXXXXXX
* 作者: XXX
* 时间: XXXX-XX-XX XX:XX:XX
* 参数说明: XXXXX
*/
成员变量和局部变量的注释:
对于成员变量和重要的局部变量,注释应采用如下形式:
// 功能说明,创建者,创建时间
如果进行了修改,修改者应该改写成如下形式
// 功能说明,创建者,创建时间;修改说明,修改者,修改时间
循环和分支代码段的注释:
一般来说循环和分支都需要注释,它们的注释主要包含以下几点:条件说明,功能说明
/******************
* 条件说明,功能说明
******************/
10. Java 格式化及良好的布局
如果你在编程过程中自觉使用空格,TAB,断行,你就可以提高代码的层次性,通过这
样代码的可读性就能得到有效提高。
有些人在编写代码时依赖Ctrl+Shift+F来规整Java代码,这是一种不好的习惯,首先它
纵容了懒惰的恶习;其次Ctrl+Shift+F不是任何时候都好用的,如在使用非Eclipse的文本编辑器编写网页中的JS代码时,缺乏自动格式化会让你觉得举步维艰。如果在平常编程中自觉的使用正确的缩进,即使是在记事本上你也能将代码保持良好的层次。
适当使用空行来区分不同的语义段,其实空行也是一种注释,它意味着旧的代码段的结
束和新的代码段的开始。
良好的布局并不影响执行速度,内存使用等程序性能,但它会让你在日后理解代码,检查代码以及修改代码变得更容易,也是其他人在你缺位时更容易阅读理解和修改你的代码,编排出色的代码会带来视觉上和思维上的愉悦,这是非程序员不能感受到的,而精雕细琢代码并使之达到美观的程序员们却会从这一过程中得到艺术的满足。
11. Java 程序设计约定
有许多的有关 Java 代码可维护性和可改进性的重要约定和标准。99.9% 的时间里,面向他人,面向你的开发同事编程要比面向机器编程重要得多。使你的代码为别人所理解是最重要的。
约定目标 | 约定 |
存取成员函数 | 考虑对数据库中的字段使用滞后初始化 使用存取函数获得和修改所有字段 对常量采用存取函数 对于集合,加入成员函数来插入和删除项 一旦可能,将存取函数置为被保护类型,不是公共类型 |
字段 | 字段永远为私有类型 不要直接访问字段,应使用存取成员函数 不要使用静态常量字段(常量),应使用存取成员函数 不要隐藏名字 一定要初始化静态字段 |
类 | 最小化公共和保护接口 在开始写代码之前定义一个类的公共接口 按以下顺序声明一个类的字段和成员函数: 构造函数 公共成员函数 被保护成员函数 私有成员函数 私有字段 |
局部变量 | 不要隐藏名字 一行代码只声明一个局部变量 用一个行内注释说明局部变量 在使用局部变量之前声明它 仅将局部变量专注于一件事 |
成员函数 | 给代码加上注释 给代码分段 使用空白,控制结构之前用一个空行,成员函数之前用两个空行 一个成员函数应能在 30 秒内让人理解 写短小单独的命令行 尽量限制成员函数的可见性 说明操作的顺序 |
12. Java 命名约定补充
除了以下几个特例之外,命名时应始终采用完整的英文描述符。此外,一般应采用小写字母,但类名、接口名以及任何非初始单词的第一个字母要大写。
检查点:
使用完整的英文描述符
采用适用于该领域的术语
采用大小写混合使名字可读
尽量少用缩写,但如果用了,要明智地使用,易于理解。
避免使用长的名字(最好小于18个字母)
避免使用类似的名字,或者仅仅是大小写不同的名字
避免使用下划线
操作项 | 命名约定 | 示例 |
实参/参数 | 使用传递值/对象的完整的英文描述符 | customer, account |
字段/属性 | 字段采用完整的英文描述,第一个字母小写,任何中间单词的首字母大写。 | firstName, lastName, warpSpeed |
布尔型的获取成员函数 | 所有的布尔型获取函数必须用单词 is 做前缀。如果你遵守前文所说的布尔字段的命名标准,那么你只需将字段名赋给它即可。 | isPersistent(), isString(), isCharacter() |
类 | 采用完整的英文描述符,所有单词的第一个字母大写。 | Customer, SavingsAccount |
编译单元文件 | 使用类或接口的名字,或者如果文件中除了主类之外还有多个类时,加上前缀 java 来说明它是一个源码文件。 | Customer.java, SavingsAccount.java, Singleton.java |
组件/ 部件 | 使用完整的英文描述来说明组件的用途,末端应接上组件类型。 | okButton, customerList, fileMenu |
构造函数 | 使用类名 | Customer(), SavingsAccount() |
异常 | 通常采用字母 e 表示异常。第二层用ex | e, ex |
静态常量字段(常量) | 全部采用大写字母或者首字母大写的方式,单词之间用下划线分隔。一个较好的方法是采用静态常量获取成员函数,因为它很大地提高了灵活性。 | MIN_BALANCE, DEFAULT_DATE Max_Time |
获取成员函数 | 被访问字段名的前面加上前缀 get。 | getFirstName(), getLastName(), getWarpSpeeed() |
接口 | 采用I前缀加上完整的英文描述符说明接口封装,所有单词的第一个字母大写。 | IRunnable, IContactable, IPrompter, ISingleton |
局部变量 | 采用完整的英文描述符,首字母小写,但不要隐藏已有字段。例如,如果有一个字段叫 firstName,不要让一个局部变量叫 firstName。 | grandTotal, customer, newAccount |
循环计数器 | 通常采用字母 i,j,k 或者 counter 都可以接受。 | i, j, k, counter |
包 | 采用完整的英文描述符,所有单词都小写。 | com.ambysoft.www. persistence.mapping |
成员函数 | 采用完整的英文描述说明成员函数功能,第一个单词尽可能采用一个生动的动词,第一个字母小写。 | openFile(), addAccount() |
设置成员函数 | 被访问字段名的前面加上前缀 set。 | setFirstName(), setLastName(), setWarpSpeed() |
13. Java 常用开发术语表
A
o Abstract class:抽象类
o Abstract method:抽象方法
o Annotation:注释
o Anonymous class:匿名类
o API(Application Programming Interface):应用编程接口,由方法和语言构成的库.
o ArrayList:实现了List接口的动态数组
o Assertion:断言
o Atrribute map:属性映射
o Autoboxing:自动装箱,表示一个内置类型如int和它的包装类如Integer之间的自动转换
B
o Boolean function:布尔函数
o Bytecode:字节码
C
o Casting:类型强制转换
o Channel:频道
o ClassCastException:当一个对象引用强制转换程一个不兼容的类型时出现的异常.
o Collection:一个表示对象组或集合的接口
o CSV(Comma-separated values):一种用于存储表格数据的文件形式
o Complier:编译器
o Compose:合成
o Composite function:复合函数,通过多个函数创建的一个函数
D
o Decimal:十进制
o Deep:深度
o DOM(Document Object Model):文档对象模型,一种采用树形表示来处理XML数据的API.
o Database:数据库
E
o Edge:边
o Element:元素,XML文档中的一个节点.
o Encapsulation:封装
o End tag:结束标签
o Enum:枚举
o Escaping:转义
F
o Function:函数
o Fuzzy search:模糊搜索
G
o Generic:泛型
o Graph:图
o GUI:用户图形界面
o Grid computing:网格计算
o Group:组
H
o HashMap:一个将键值映射到值的查找对象
o Heap memory:堆内存
o HTML(Hyper Text Markup Language):超文本标记语言
o HTTP(HyperText Tranfer Protocol):超文本传输协议
I
o Inheritance:继承
o Inner class:内部类
o Iterator:允许迭代到任何Collection类的一个接口
J
o JDBC(Java Database Connectivity):java数据库连接,一种属于Java核心库的用于操作关系数据库的API.
o JDK(Java Development Kit):java开发工具包
o JRE(Java Runtime Environment):java运行时环境
o JSP(Java Server Page):java服务页
o JVM(Java Virtual machine):Java虚拟机
o JavaDoc:属于JDK的一种文档生成工具
o JavaScript:运行于客户端,用于HTML处理的一种轻量级教本语言,语法部分类似于Java.
L
o Layout:布局
o Lexical analysis:词法分析
o Linked List:链表
M
o Matcher:一个用于正则表达式模式匹配的Java类
o Metadata:元数据
o Millisecond:微妙
N
o Namespace:命名空间
o Neural network:神经网络
o Node:节点
O
o Object-oriented programmming:面向对象编程
o Object pool:可以从中获得对象的一个实例池
o Origin:原点
o Override:子类覆写父类的方法
P
o Parser:分析器
o Patch:补丁
o Pattern:模式
o Polymorphism:多态性
o Port:端口
o Predicate:谓词
o Prefix:前缀
o Procedural language:过程式语言,如C
o Property:属性
R
o Real time:实时
o Recursive:递归
o Reference:引用
o Reflection:反射
o Regular expression:正则表达式
o Relative:相对
o Resource:资源
o Runnable:多线程编程使用的一个接口.
S
o Syntax:语法
o Screen scraping:屏幕抓取
o Split:分割
o State:状态
o Static:静态
o Sequence:序列
o Swing:构建在AWT上更高级的图形用户界面
o Synchronized:同步,用于线程安全协作的技术
T
o Tag:标签
o Thread:进程
o Tiger : Sun给Java1.5的代号
o Token:标记
o Translation:平移
o Triple:三元组
o Type:类型
U
o Unicode:统一字符界面
o Unit testing:单元测试
V
o Visitor pattern:访问者模式
W
o WAR(Web Application Archive):Web应用程序归档
o Web Service:Web服务
o Weight:权
o Well-formed:格式良好的
o Whitespace:空白符
X
o XML(Extensible Markup Language):一种描述分级数据结构的文本标记语言