Java编程规范Word下载.docx
- 文档编号:21057757
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:18
- 大小:47.82KB
Java编程规范Word下载.docx
《Java编程规范Word下载.docx》由会员分享,可在线阅读,更多相关《Java编程规范Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
考虑用几个类来分别实现
许多成员变量在特征上有很大的差别:
考虑使用几个类
1.7.让一切东西都尽可能地“私有”—private
让一切东西都尽可能地“私有”——private。
可使库的某一部分“公共化”(一个方法、类或者一个字段等等),就永远不能把它拿出。
若强行拿出,就可能破坏其他人现有的代码,使他们不得不重新编写和设计。
若只公布自己必须公布的,就可放心大胆地改变其他任何东西。
在多线程环境中,隐私是特别重要的一个因素——只有private字段才能在非同步使用的情况下受到保护。
1.8.对象表达的应该是应用程序的概念,而非应用程序本身。
谨惕“巨大对象综合症”。
对一些习惯于顺序编程思维、且初涉OOP领域的新手,往往喜欢先写一个顺序执行的程序,再把它嵌入一个或两个巨大的对象里。
根据编程原理,对象表达的应该是应用程序的概念,而非应用程序本身。
1.9.考虑是否采用内部类
任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作。
1.10.尽可能细致地加上注释
尽可能细致地加上注释,并用javadoc注释文档语法生成自己的程序文档。
规格如下:
/**
*方法说明:
资金存取总额异常
*@paramciComInput输入参数含义备注信息
*@throwsException
*@returnComOutput返回结果含义备注信息
*/
publicComOutputauFundAccessTotal(ComInputci)throwsException{
}
1.11.抛出构建器内的异常
涉及构建器和异常的时候,通常抛出在构建器中捕获的任何异常——如果它造成了那个对象的创建失败。
这样一来,调用者就不会以为那个对象已正确地创建,从而盲目地继续。
1.12.进行必要的对象清除
当客户程序员用完对象以后,若你的类要求进行任何清除工作,可考虑将清除代码置于一个良好定义的方法里,采用类似于cleanup()这样的名字,明确表明自己的用途。
除此以外,可在类内放置一个boolean(布尔)标记,指出对象是否已被清除。
在类的finalize()方法里,请确定对象已被清除,并已丢弃了从RuntimeException继承的一个类(如果还没有的话),从而指出一个编程错误。
在采取象这样的方案之前,请确定finalize()能够在自己的系统中工作(可能需要调用System.runFinalizersOnExit(true),从而确保这一行为)。
在一个特定的作用域内,若一个对象必须清除(非由垃圾收集机制处理),请采用下述方法:
初始化对象;
若成功,则立即进入一个含有finally从句的try块,开始清除工作。
若在初始化过程中需要覆盖(取消)finalize(),请记住调用super.finalize()(若Object属于我们的直接超类,则无此必要)。
在对finalize()进行覆盖的过程中,对super.finalize()的调用应属于最后一个行动,而不应是第一个行动,这样可确保在需要基础类组件的时候它们依然有效。
1.13.创建大小固定的对象集合时,请将它们传输至一个数组
创建大小固定的对象集合时,请将它们传输至一个数组(若准备从一个方法里返回这个集合,更应如此操作)。
这样一来,我们就可享受到数组在编译期进行类型检查的好处。
此外,为使用它们,数组的接收者也许并不需要将对象“造型”到数组里。
1.14.尽量使用interfaces,不要使用abstract类
尽量使用interfaces,不要使用abstract类。
若已知某样东西准备成为一个基础类,那么第一个选择应是将其变成一个interface(接口)。
只有在不得不使用方法定义或者成员变量的时候,才需要将其变成一个abstract(抽象)类。
接口主要描述了客户希望做什么事情,而一个类则致力于(或允许)具体的实施细节。
1.15.在构建器内,只进行那些将对象设为正确状态所需的工作
在构建器内部,只进行那些将对象设为正确状态所需的工作。
尽可能地避免调用其他方法,因为那些方法可能被其他人覆盖或取消,从而在构建过程中产生不可预知的结果。
1.16.尽量新建类,避免继承
在现成类的基础上创建新类时,请首先选择“新建”或“创作”。
只有自己的设计要求必须继承时,才应考虑这方面的问题。
若在本来允许新建的场合使用了继承,则整个设计会变得没有必要地复杂。
1.17.保证在自己类路径指到的任何地方,每个名字都仅对应一个类
为避免编程时遇到麻烦,请保证在自己类路径指到的任何地方,每个名字都仅对应一个类。
否则,编译器可能先找到同名的另一个类,并报告出错消息。
若怀疑自己碰到了类路径问题,请试试在类路径的每一个起点,搜索一下同名的.class文件。
用合理的设计方案消除“伪功能”。
也就是说,假若只需要创建类的一个对象,就不要提前限制自己使用应用程序,并加上一条“只生成其中一个”注释。
请考虑将其封装成一个“独生子”的形式。
若在主程序里有大量散乱的代码,用于创建自己的对象,请考虑采纳一种创造性的方案,将些代码封装起来。
1.18.避免使用“魔术数字”
避免使用“魔术数字”,这些数字很难与代码很好地配合。
如以后需要修改它,无疑会
成为一场噩梦,因为根本不知道“100”到底是指“数组大小”还是“其他全然不同的东西”
。
所以,我们应创建一个常数,并为其使用具有说服力的描述性名称,并在整个程序中都采用常数标识符。
这样可使程序更易理解以及更易维护。
1.19.警惕“分析瘫痪”
请记住,无论如何都要提前了解整个项目的状况,再去考察其中的
细节。
由于把握了全局,可快速认识自己未知的一些因素,防止在考察细节的时候陷入“死逻辑”中。
1.20.警惕“过早优化”
首先让它运行起来,再考虑变得更快——但只有在自己必须这样做
、而且经证实在某部分代码中的确存在一个性能瓶颈的时候,才应进行优化。
除非用专门的工具分析瓶颈,否则很有可能是在浪费自己的时间。
性能提升的隐含代价是自己的代码变得难于理解,而且难于维护。
1.21.谨惕“巨大对象综合症”
2.Java编程规范
根据第一部分的Java编程规则,来制定本命名规范。
请参考附件一Sample.java文件。
包的命名
全都小写,即便中间的单词亦是如此,并且以com.shinetecnology.为开始部分,接下的字段用来表示项目名称,再下个字段用来表示此项目里的某个模块。
如com.shinetechnology.ecrm.namesample
请在每个类文件里填写包名,使类易于管理。
2.1.类的命名
类名通常用有意义的名词或名词短语来表示,首字母大写,并大写中间单词的首字母。
如:
ClassNameSample{}
2.2.常用类型变量的命名
常用类型变量名一般用有意义的名词或名词短语来表示,请不要用下划线。
如果只有一个单词,则全部小写,如果有多个单词,则头一个单词小写,其余单词的首字母大写。
如intpageNum。
要避免用单个字母来对变量进行命名,除了临时变量和循环变量。
对临时变量和循环变量的命名一般来说:
•byforabyte
•cforachar
•dforadouble
•eforanExceptionobject
•fforafloat
•gforaGraphicsobject
•i,j,k,m,nforintegers
•p,q,r,sforString,StringBuffer,orchar[]objects
•bforaboolean
•strforString
•shforshort
2.3.常量的命名
常量一般用有意义的单词或字母来命名,可用下划线,并全部大写。
如:
finaldoublePI=3.1415926
2.4.数组变量的命名
数组变量名一般用有意义的名词或名词短语来表示,请不要用下划线。
如int[]pageNum
2.5.对象变量的命名
一般说来,用该对象所属类型名称来命名,并把第一个字母小写;
如Samplesample=newSample()
或者用有意义的单词放在类型名称前面,来命名;
如ElementpageNumElement=newElement();
2.6.函数的命名
函数的命名与变量的命名类似,一般用表示目的的动词或动词短语来表示,如果只有一个单词,则全部小写,如果有多个单词,则头一个单词小写,其余单词的首字母大写。
如publicvoidprintString(StringtmpStr){}
2.7.函数的描述
请在函数的定义前用/***/来包含函数描述。
如
/**
取部门用户信息
*@paramcomInput统一入口
*@returncomOutput返回统一出口,具体参数如下:
*@returnretCode:
0正常;
-1其他原因
*@author陈优松
*@see陈优松2006-03-22创建
*@see陈优松2006-03-24修改
publicComOutputgetAllUserInfo()throwsException{
其中“打印字符串”表示的是这个函数的功能,@param表示这个函数的参数列表,@return表示这个函数的返回值,@throws表示这个函数会抛出什么异常,@author表示这个函数的作者
附件一:
Sample.java
/*
*包的命名
*/
packagecom.shinetechnology.ecrm.namesample;
<
br>
Title:
命名例子
Description:
与文档一起,来说明命名规则的例子
Copyright:
Copyright(c)2003
Company:
ShineTechnology
@authorlinsong
@version1.0
*
publicclassSample{
*常用类型变量的命名
StringcompanyName;
*常量的命名
finalStringPI="
3.1415926"
;
*数组变量的命名
String[]companyNames;
这个main函数一般用来演示如何使用此类
@paramargs
publicstaticvoidmain(String[]args){
*对象变量的命名
Samplesample=newSample();
sample.printString("
打印出来了!
"
);
*/
……
}
2.8.代码注释
2.9.代码排版
代码缩进风格;
在我们系统的ejb开发中特别对SQL语句的缩进有严格的要求;
2.10.书写规范
书写规范即在编写代码过程中所使用的标准格式,主要包括空格的使用、括号的使用、缩进
格式和其他一些内容。
1)关于空格
1、在类型强制转化操作符与操作对象间不应有空格,
错误:
y=(double)x+16.7;
正确:
y=(double)x+16.7;
2、在条件语句标识符if与其后的括号间应有一个空格,
错误:
if(x<
y);
正确:
if(x<
3、在条件语句中,表达式与括号间不应有空格,
if(x<
y);
4、方法名与括号间以及方法的参数与括号间都不应有空格;
return(x+y);
return(x+y);
5、赋值运算符前后应各有一个空格,包括=,+=,-=,*=,/=,%=,>
>
=,<
=,&
=,和^=。
6、条件运算符前后应各有一个空格,包括?
和:
7、关系运算符前后应各有一个空格,包括<
<
=,>
>
=,==,和!
=;
8、逻辑运算符前后应各有一个空格,包括&
&
和||;
9、位运算符前后应各有一个空格,包括&
^,|,<
和>
;
10、算术运算符前后应各有一个空格,包括*,/,%,+,and-,不包括++和--;
注:
若操作符前后由括号,参照规则13;
11、逗号和分号后应有空格;
12、一元运算符与操作数间不应有空格,-(negation
),+(valueofoperand),++,--,!
13、在一级运算符前后不应有空格,包括(),[],.,和->
条件判断语句参照规则2、3;
14、在局部变量声明和代码间应至少有一个空行;
2)括号的使用
原则:
应尽量使用圆括号分隔表达式中的各部分,增强可读性;
1、条件语句中各逻辑部分应以圆括号分隔,即使不是必须的;
if(a==b&
c==d)
正确:
if((a==b)&
(c==d));
2、花括号,前一个花括号应在相应的控制语句的后面,前面一个空格;
后一花括号应独自占一行;
y){
x=y;
}
y)
{
x=y;
3、条件分支的语句即使只有一行或0行,仍应使用{};
printf(“%d”,x);
printf(“%d”,x);
3)缩进
1、花括号对中后一个花括号,与相应的控制语句同列;
for(i=0;
i<
10;
i++)
i++){
i++){
2、所有花括号中的程序体(包括局部变量定义等)都应在花括号的基础上缩
进一个TAB的距离,注意不要使用空格缩进;
3、在switch-case结构中,case语句距离switch语句的开始应缩进一个TAB,每个case的程序体距离case的开始缩进一个TAB;
举例:
switch(value){
case1:
/*Bodyforcase1.*/
break;
case2:
/*Bodyforcase2.*/
default:
/*Bodyfordefault.*/
4、同一层次的条件语句应处在相同的列。
Example(错误Usage):
if(condition1==TRUE){
/*Bodyofif.*/
else
if{
/*Bodyofsecondif.*/
else{
/*Bodyofelse.*/
Example(正确Usage):
if(condition1==true){
}elseif{
/*Bodyofsecondelseif.*/
}else{
5、在try与catch、finally对,if与else对中,catch、else与上一个花括号同一行。
catch、finally、else前后都应有一个空格.
例:
try{
/*try语句块*/
}catch(Exceptione){
/*catch语名块*/
}finally{
/*finally语句块*/
5)其他
1、对复杂的条件语句(分支中的语句较多),应在每个结束的花括号后加一条注释说明是
哪一个分支的结束,并在分支的开始加注释说明进入分支的条件;
复杂的循环程序段遵循此规则;
2、每个语句占一行;
3、方法定义时,方法的返值和方法名应在同一行;
4、方法的参数
使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:
SetCounter(intsize){
this.size=size;
5、数组应该总是用下面的方式来命名:
bytebuffer[];
而不是:
byte[]buffer;
2.11.Import语句
Import语句必须详细的写清楚具体的类,尽量避免使用.*语句。
正确的规则如下:
importjava.util.ArrayList;
importjava.util.Hashtable;
importorg.apache.foo.Bar;
importorg.apache.bar.Foo;
避免使用:
importjava.util.*;
importorg.apache.foo.*;
importorg.apache.bar.*;
3.J2EE命名规范
3.1.J2EE应用程序和模块的命名
3.1.1.应用程序的命名
应用程序的名字被应用于程序文件打包后的存档文件(archive)的文件名。
文件名应该是全部小写的ASCII码字符且体现系统的含义。
为避免名字的冲突, 文件名可以用更详细和精确的文字命名。
格式:
Applicationarchive:
<
application-name>
.ear
用例:
petstore.ear
或者更详细
bppetstore.ear
应用程序显示的名字(出现在应用程序的发布文件中)是大小写混合的被扩展的应用程序名。
expanded-application-name>
EAR
display-name>
PetStoreEAR<
/display-name>
BluePrintsPetStoreEAR<
3.1.2.EJB模块的命名
EJB模块的名字被用作EJB存档文件的文件名。
模块的命名应基于所在的JAVA包的名字且全部小写的ASCII码字符。
EJBarchive:
module-name>
-ejb.jar
EJBclientarchive:
-ejb-client.jar
com.sun.j2ee.blueprints.petstore
petstore-ejb.jar//EJBarchive
petstore-ejb-client.jar//EJBclientarchive
或者更详细:
bppetstore-ejb.jar//EJBarchive
bppetstore-ejb-client.jar//EJBclientarchive
EJB模块显示的名字(出现在应用程序的发布文件中)是大小写混合的被扩展的模块名。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 编程 规范
![提示](https://static.bdocx.com/images/bang_tan.gif)