JAVA程序开发规范.docx
《JAVA程序开发规范.docx》由会员分享,可在线阅读,更多相关《JAVA程序开发规范.docx(11页珍藏版)》请在冰豆网上搜索。
JAVA程序开发规范
JAVA程序开发规范
黄义发
20004年5月
文档类型:
管理文档计划文档需求文档设计文档
测试文档用户文档工程文档维护文档
密级:
公开资料内部资料保密资料机密资料
状态:
初稿讨论稿发布
版权声明
福建泰讯网络科技有限公司版权所有,保留一切权利。
未经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档的部分或全部,并以任何形式传播。
产品支持服务
我们的联系地址和电话是:
公司地址:
福建省福州市五四路环球广场33层
邮编:
350003
电话:
+86-591-7801566
传真:
+86-591-7858970
网址:
文档修改/审批记录
版本号
修改人/审批人
修改/审批日期
修改内容
备注
V1.0
黄义发
2004.50.12
创建文档
目录
1目的1
2命名规范1
2.1Package的命名1
2.2Class的命名1
2.3Class变量的命名1
2.3.1关于数据类型标识的说明(弱化该要求,尽量保持)1
2.4StaticFinal变量的命名2
2.5参数的命名2
2.6数组的命名2
2.7方法的命名2
3Java文件样式2
3.1版权信息2
3.2Package/Import3
3.3Class3
3.4ClassFields3
3.5构造函数3
3.6存取方法4
3.7类方法4
3.7.1方法的注释4
4代码编写格式5
4.1文档化5
4.2缩进5
4.3页宽5
4.4{}5
5程序编写规范5
5.1exit()5
5.2异常6
5.3垃圾收集6
5.4final类6
6性能6
6.1不必要的对象构造6
6.2使用StringBuffer对象6
6.3避免太多的使用synchronized关键字(线程同步)7
6.4换行7
1目的
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。
2命名规范
2.1Package的命名
Package的名字应该都是由一个小写单词组成,
如:
packagecom.wholewise.ucss.workflow;。
在UCSS项目中,我们对所有的包做如下规定:
packagecom.wholewise.ucss.*;其中,*是开发人员根据模块自己定义的。
2.2Class的命名
Class的名字必须由大写字母开头而其他字母都小写的单词组成,最好用有意义的单词命名。
如:
classGetTreeInfo,classTransToXml等。
2.3Class变量的命名
类对象的名字必须用一个小写字母开头。
后面的单词用大写字母开头。
数据类型的变量第一个字母为变量类型的缩写。
如:
sPassword,iCount。
2.3.1关于数据类型标识的说明(弱化该要求,尽量保持)
数据类型
数据类型标识
数据类型
数据类型标识
整型(int)
i
浮点型(float)
f
字符串型(String)
s
字符型(char)
c
浮点型(double)
d
布尔型(boolean)
b
长整型(long)
l
数组(Array)
a
StringBuffer
sb
二维数组
aa
2.4StaticFinal变量的命名
StaticFinal变量的名字应该都大写,并且指出完整含义。
如:
privatestaticfinalintSERVER_PORT=7100;//表示服务器端口号。
2.5参数的命名
参数的名字必须和变量的命名规范一致。
2.6数组的命名
数组应该总是用下面的方式来命名:
byte[]aBuffer;而不是:
byteaBuffer[];
2.7方法的命名
使用有意义的参数命名,原则上是动词+名词。
且除第一个单词外其他单词的第一个字母大写。
如果可能的话,使用和要赋值的字段一样的名字:
publicvoidsetSize(intiSize){
this.iSize=iSize;
}
publicintgetSize()
{
returnthis.iSize;
}
3Java文件样式
所有的Java(*.java)文件都必须遵守如下的样式规则。
3.1版权信息
版权信息必须在java文件的开头,比如:
/**
*Copyright®2001WholeWiseSci.&Tech.Co.,Ltd
*Allrightreserved.
*MODIFIED(YYYY-MM-DD)
*V1.0.0.0developer2000-01-01created
*V1.0.0.1changer2000-02-01modified
*/
其他不需要出现在javadoc的信息也可以包含在这里。
3.2Package/Import
package行要在import行之前,import中标准的包名要在本地的包名之前,而且按照字母顺序排列。
如果import行中包含了同一个包中的不同子目录,则应该用*来处理。
packagecom.wholewise.ywzx;
importjava.io.*;
importjava.util.Observable;
importcom.wholewise.ucss.tool.UseJolt;
这里java.io.*使用来代替InputStreamandOutputStream的。
如果你能确定你要调用包中的哪一个类,指明具体的类会更好。
如:
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.Observable;
importcom.wholewise.ucss.tool.UseJolt;
这样运行速度会更快些,查错也方便。
3.3Class
接下来的是类的注释,一般是用来解释类的。
/**
*描述这个类的功能
*/
接下来是类定义,
publicclassCounterSetextendsObservableimplementsCloneable;
3.4ClassFields
接下来是类的成员变量:
protectedintiSize;
public的成员变量必须生成文档(JavaDoc)。
proceted、private和package定义的成员变量如果名字含义明确的话,可以没有注释。
3.5构造函数
接下来是构造函数,它应该用递增的方式写(比如:
参数多的写在后面)。
PublicSetSize(intiSize){
this.iSize=iSize;
}
3.6存取方法
接下来是类变量的存取的方法。
如果它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。
publicint[]getPackets(){returncopyArray(packets,offset);}
publicint[]getBytes(){returncopyArray(bytes,offset);}
publicint[]getPackets(){returnaPackets;}
publicvoidsetPackets(int[]aPackets){this.aPackets=aPackets;}
其它的方法不要写在一行上
3.7类方法
下面开始写类的方法:
/**
*参见3.7.1的注释说明
*/
protectedfinalStringdisplayTreeInfo(StringsNode)
{
}
3.7.1方法的注释
对于方法注释,一般情况下是对一些重要的方法(如接口方法)、复杂或困难的方法加以注释,内容包括:
方法名、功能描述、输入、输出、返回值、注意事项等内容。
如:
/**
*功能描述:
根据输入的节点显示其相关的信息
*@paramStringsNode节点值
*@return信息内容
*/
4代码编写格式
4.1文档化
建议用javadoc来为类生成文档。
不仅因为它是标准,这也是被各种java编译器都认可的方法。
4.2缩进
缩进应该是每行2个空格.不要在源文件中保存Tab字符.在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.
如果你使用UltrEdit作为你的Java源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符,方法是通过UltrEdit中先设定Tab使用的长度室2个空格,然后用Format|TabstoSpaces菜单将Tab转换为空格。
我们建议采用Jbuild里的样式。
4.3页宽
页宽应该设置为80字符.源代码一般不会超过这个宽度,并导致无法完整显示,但这一设置也可以灵活调整.在任何情况下,超长的语句应该在一个逗号或者一个操作符后折行.一条语句折行后,应该比原来的语句再缩进2个字符.
4.4{}
{}中的语句应该单独作为一行.例如,下面的第1行是错误的,第2行是正确的:
if(i>0){i++};//错误,{和}在同一行
if(i>0){
i++;
};//正确,{单独作为一行
}语句永远单独作为一行.
如果}语句应该缩进到与其相对应的{那一行相对齐的位置。
5程序编写规范
5.1exit()
exit除了在main中可以被调用外,其他的地方不应该调用。
因为这样做不给任何代码机会来截获退出。
一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。
5.2异常
申明的错误应该抛出一个RuntimeException或者派生的异常。
5.3垃圾收集
JAVA使用成熟的后台垃圾收集技术来代替引用计数。
但是这样会导致一个问题:
你必须在使用完对象的实例以后进行清场工作。
非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。
必须象下面一样写:
FileOutputStreamfos=newFileOutputStream(projectFile);
。
。
。
。
。
。
。
;
。
。
。
。
。
。
。
;
fos.close();
5.4final类
绝对不要因为性能的原因将类定义为final的(除非程序的框架要求)。
如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为final的。
这是因为没有人可以保证会不会由于什么原因需要继承她。
6性能
6.1不必要的对象构造
不要在循环中构造和释放对象
6.2使用StringBuffer对象
在处理String的时候要尽量使用StringBuffer类,StringBuffer类是构成String类的基础。
String类将StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。
当我们在构造字符串的时候,我们应该用StringBuffer来实现大部分的工作,当工作完成后将StringBuffer对象再转换为需要的String对象。
比如:
如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer对象和她的append()方法。
如果我们用String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的CPU时间。
6.3避免太多的使用synchronized关键字(线程同步)
避免不必要的使用关键字synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法。
BorlandJbulider不喜欢synchronized这个关键字,如果你的断点设在这些关键字的作用域内的话,调试的时候你会发现的断点会到处乱跳,让你不知所措。
除非必须,尽量不要使用。
6.4换行
如果需要换行的话,尽量用println来代替在字符串中使用"\n"。
你不要这样:
System.out.print("Hello,world!
\n");
要这样:
System.out.println("Hello,world!
");