为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程。系统继承的其它资源中的源程序也应按此规范作相应修改。
本文档将作为java编程人员软件开发的编程格式规范。在项目Java部分的编码、测试及维护过程中,要求严格遵守。
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。
Package 的名字应该都是由一个小写单词组成。示例:unipost.trans
Class 的名字每个单词必须由大写字母开头而其他字母都小写的单词组成。示例:FileMng
变量、方法、属性:大小写混排的单词组成,首字母小写
示例: functionName、countNum、size
Static Final常量:大写单词组成,单词之间使用“_”连接
示例: MAX_INDEX
前台变量 fg_变量名
后台变量 bg_变量名
参数的名字必须和变量的命名规范一致。
数组应该总是用下面的方式来命名:
byte[] buffer;
而不是:
byte buffer[];
使用有意义的参数命名,如果可能的话,使用和要赋值的属性一样的名字:
setCounter(int size)
{
this.size = size;
}
某些通用的缩写可以使用,如:
temp 可缩写为 tmp ;
message 可缩写为 msg ;
对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。
说明:变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。
除非必要,不要用数字或较奇怪的字符来定义标识符。
示例:如下命名,使人产生疑惑。
void set_sls00( BYTE sls );
应改为有意义的单词命名
void setUdtMsgSls( BYTE sls );
用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
说明:下面是一些在软件中常用的反义词组。
add / remove begin / end create / destroy
insert / delete first / last get / set
increment / decrement put / get add / delete
lock / unlock open / close min / max
old / new start / stop next / previous
source / target show / hide send / receive
source / destination cut / paste up / down
示例:
int minSum;
int maxSum;
int addUser( BYTE *userName );
int deleteUser( BYTE *userName );
应避免使用_EXAMPLE_TEST_之类以下划线开始和结尾的定义。
所有的 Java(*.java) 文件都必须遵守如下的样式规则
版权信息必须在 java 文件的开头,示例:
/*
* -------------------------------------------------------
* Copyright (c) 2003, 国家邮政局
* All rights reserved.
*
* FileName:filename.java
* Description:简要描述本文件的内容
* History:
* Date Author Desc
* -------------------------------------------------------
*/
package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则建议用 * 来处理。
package com.nantian;
import java.io.*;
import java.util.Observable;
import translator;
这里 java.io.* 使用来代替InputStream and OutputStream 的。
包含了在不同的行的 extends 和 implements
public class CounterSet extends Observable
implements Cloneable
类的成员变量:
/**
* Packet counters
*/
protected int[] packets;
public 的成员变量一定要有注释而且必须生成文档(JavaDoc)。
proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。
构造函数,它应该用递增的方式写(比如:参数多的写在后面)。示例:
public CounterSet(int size)
{
this.size = size;
}
public CounterSet(int size,String name)
{
this.size = size;
this.name = name;
}
如果这个类是可以被克隆的:
public Object clone()
{
try
{
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}
catch(CloneNotSupportedException e)
{
throw new InternalError("Unexpected CloneNotSUpportedException: "+ e.getMessage());
}
}
建议编写顺序为:
public protected private
final static transient
如果main(String[]) 方法已经定义了, 那么它应该写在类的底部。
代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)