编码规范

一.为什么要有编码规范
编码规范对于程序员而言尤为重要,有以下几个原因:
- 一个软件的生命周期中,80%的花费在于维护
- 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
- 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
- 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已
构建的其它任何产品
为了执行规范,每个软件开发人员必须一致遵守编码规范。
二.Java 命名约定
命名时应始终采用完整的英文描述符。此外,一般应采用小写字母,但类名、接口名以及任何非初始单词的第一个字母要大写。
1. 一般概念
a.尽量使用完整的英文描述符
b.采用适用于相关领域的术语
c.采用大小写混合使名字可读
d.尽量少用缩写,但如果用了,要明智地使用,且在整个工程中统一避免使用长的名     字(小于 15 个字母是个好主意
e.避免使用类似的名字,或者仅仅是大小写不同的名字
f.避免使用下划线(除静态常量等)
2. 示范
包(Package): 采用完整的英文描述符,应该都是由小写字母组成。
类(Class): 采用完整的英文描述符,所有单词的第一个字母大写。 Customer, SavingsAccount
接口(Interface): 采用完整的英文描述符说明接口封装,所有单词的第一个字母大写。习惯上,名字后面加上后缀 able, ible 或者 er,但这不是必需的。
组件/部件(Component) :使用完整的英文描述来说明组件的用途,末端应接上组件类型。 okButton, customerList,fileMenu
异常(Exception): 通常采用字母 e 表示异常。 e
类变量: 字段采用完整的英文描述,第一个字母小写,任何中间单词的首字母大写。 firstName, lastName
获取成员函数: 被访问字段名的前面加上前缀 get。 getFirstName(), getLastName()
布尔型的获取成员函数 :所有的布尔型获取函数必须用单词 is 做前缀。 isPersistent(), isString()
设置成员函数: 被访问字段名的前面加上前缀 set。 setFirstName(), setLastName(),setWarpSpeed()
普通成员函数: 采用完整的英文描述说明成员函数功能,第一个单词尽可能采用一个生动的动词,第一个字母小写。 openFile(), addAccount()
循环计数器: 通常采用字母 i,j,k 或者 counter 都可以接受。 i, j, k, counter
数组: 数组应该总是用下面的方式来命名:objectType[]。 byte[] buffer;
二。Java 注释约定
一个很好的可遵循的有关注释的经验法则是:问问你自己,你如果从未见过这段代码,要在合理的时间内有效地明白这段代码,你需要哪些信息。
1. 一般概念
a.注释应该增加代码的清晰度
b.保持注释的简洁
c.在写代码之前写注释
d.注释出为什么做了一些事,而不仅仅是做了什么
2. 注释哪些部分
类 :类的目的、即类所完成的功能,注释出采用的不变量。
接口: 设置接口的目的、它应如何被使用以及如何不被使用。
成员函数注释: 对于设置与获取成员函数,在成员变量已有说明的情况下,可以不加注释;普通成员函数要求说明完成什么功能,参数含义是什么返回什么;
普通成员函数内部注释: 控制结构,代码做了些什么以及为什么这样做,处理顺序等。
实参/参数 :参数含义、及其它任何约束或前提条件
3.实现注释的格式
程序可以有4种实现注释的风格:块(block)、单行(single-line)、尾端(trailing)和行末(end-of-line)。
3.1 块注释
块注释通常用于提供对文件,方法,数据结构和算法的描述。块注释被置于每个文件的开始处以及每个方法之前。它们也可以被用于其他地方,比如方法内部。在功能和方法内部的块注释应该和它们所描述的代码具有一样的缩进格式。
块注释之首应该有一个空行,用于把块注释和代码分割开来。  
3.2 单行注释
短注释可以显示在一行内,并与其后的代码具有一样的缩进层级。如果一个注释不能在一行内写完,就该采用块注释。单行注释之前应该有一个空行。以下是一个Java代码中单行注释的例子:
3.3 尾端注释
极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空白来分开代码和注释。若有多个短注释出现于大段代码中,它们应该具有相同的缩进。
3.4 行末注释
注释界定符"//",可以注释掉整行或者一行中的一部分。它一般不用于连续多行的注释文本;然而,它可以用来注释掉连续多行的代码段。
三. Java编码其它约定

a.缩进
缩进应该是每行2个空格。 不要在源文件中保存Tab字符, 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度。
如果使用 UltrEdit 作为Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符, 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。
b.页宽
页宽应该设置为80字符。 源代码一般不会超过这个宽度, 并导致无法完整显示, 但这一设置也可以灵活调整。 在任何情况下, 超长的语句应该在一个逗号或者一个操作符后折行。 一条语句折行后, 应该比原来的语句再缩进2个字符。
c.{} 对
{} 中的语句应该单独作为一行。 例如, 下面的第1行是错误的, 第2行是正确的:
if (i>0) { i ++ }; // 错误, { 和 } 在同一行 if (i>0) { i ++ }; // 正确, 单独作为一行
d.括号
左括号和后一个字符之间不应该出现空格; 同样, 右括号和前一个字符之间也不应该出现空格。 下面的例子说明括号和空格的错误及正确使用:
CallProc( AParameter ); // 错误
CallProc(AParameter); // 正确
不要在语句中使用无意义的括号,括号只应该为达到某种目的而出现在源代码中。
e.JSP文件命名
采用完整的英文描述说明JSP所完成的功能,尽可能包括一个生动的动词,第一个字母小写,如:viewMessage.jsp、editUser.jsp或者forumChooser.jsp等。
四.复合语句:
复合语句是包含在大括号中的语句序列,形如"{ 语句 }"。
- 被括其中的语句应该较之复合语句缩进一个层次
- 左大括号"{"应位于复合语句起始行的行尾;右大括号"}"应另起一行并与复合语句首行对齐。
- 大括号可以被用于所有语句,包括单个语句,只要这些语句是诸如if-else或for控制结构的一部分。这样便于添加语句而无需担心由于忘了加括号而引入bug。
1. 返回语句:一个带返回值的return语句不使用小括号"()",除非它们以某种方式使返回值更为显见。
2. 当在for语句的初始化或更新子句中使用逗号时,避免因使用三个以上变量,而导致复杂度提高。若需要,可以在for循环之前(为初始化子句)或for循环末尾(为更新子句)使用单独的语句。
3. 每当一个case顺着往下执行时(因为没有break语句),通常应在break语句的位置添加注释。
五.编程惯例
1. 提供对实例以及类变量的访问控制
若没有足够理由,不要把实例或类变量声明为公有。通常,实例变量无需显式的设置(set)和获取(gotten),通常这作为方法调用的边缘效应 (side effect)而产生。
一个具有公有实例变量的恰当例子,是类仅作为数据结构,没有行为。亦即,若你要使用一个结构(struct)而非一个类(如果java支持结构的话),那么把类的实例变量声明为公有是合适的。
2. 引用类变量和类方法
避免用一个对象访问一个类的静态变量和方法。应该用类名替代。例如:
  classMethod();             //OK
  AClass.classMethod();      //OK
  anObject.classMethod();    //AVOID!
3.常量:
位于for循环中作为计数器值的数字常量,除了-1,0和1之外,不应被直接写入代码。
4. 变量赋值
避免在一个语句中给多个变量赋相同的值。它很难读懂。例如:
  fooBar.fChar = barFoo.lchar = 'c'; // AVOID!
不要将赋值运算符用在容易与相等关系运算符混淆的地方。例如:
  if (c++ = d++) {        // AVOID! (Java disallows)
      ...
  }
应该写成
  if ((c++ = d++) != 0) {
    ...
  }
不要使用内嵌(embedded)赋值运算符试图提高运行时的效率,这是编译器的工作。例如:
  d = (a = b + c) + r;        // AVOID!
应该写成
  a = b + c;
  d = a + r;
5. 条件运算符"?"前的表达式
如果一个包含二元运算符的表达式出现在三元运算符" ? : "的"?"之前,那么应该给表达式添上一对圆括号。例如:(x >= 0) ? x : -x;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值