JAVA编程规范.docx

上传人:b****7 文档编号:8985688 上传时间:2023-02-02 格式:DOCX 页数:18 大小:27.83KB
下载 相关 举报
JAVA编程规范.docx_第1页
第1页 / 共18页
JAVA编程规范.docx_第2页
第2页 / 共18页
JAVA编程规范.docx_第3页
第3页 / 共18页
JAVA编程规范.docx_第4页
第4页 / 共18页
JAVA编程规范.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

JAVA编程规范.docx

《JAVA编程规范.docx》由会员分享,可在线阅读,更多相关《JAVA编程规范.docx(18页珍藏版)》请在冰豆网上搜索。

JAVA编程规范.docx

JAVA编程规范

深圳市伊爱高新技术开发有限公司

文件编号

深伊[技术]第004-0804A号

机密级别

秘密

受控对象

纸质、电子版

保存期限

永久

归档部门

研究院

执行范围

研究院

JAVA编程规范

 

文件类型

编制部门

编制人

审核人

签发人

发布日期

技术规范

研究院

2013.05.21

特别说明

送达签收

文件修改控制

修改记录编号

修改条款

修改人

审核人

批准人

修改日期

目录

1概述4

1.1规范制定原则4

1.2公共约定4

2命名规范5

2.1文件、包命名规范6

2.2类、接口命名规范6

2.3方法命名规范7

2.4常量、变量、参数命名规则8

2.5数据库命名规范8

2.6其他9

3书写格式9

3.1缩进9

3.2空格10

3.3对齐10

3.4空行11

3.5注释11

4代码文件风格13

4.1文件生成13

4.2程序注释13

4.3配置文件注释15

4.4get\set方法15

4.5构造函数16

4.6类方法17

5表达式和语句18

1概述

为确保系统源程序可读性,从而增强系统可维护性,兹制定下述编程规范,以规范系统各部分编程。

系统继承的其它资源中的源程序也应按此规范作相应修改。

1.1规范制定原则

(1)方便代码的交流和维护。

(2)不影响编码的效率,不与大众习惯冲突。

(3)使代码更美观、阅读更方便。

(4)使代码的逻辑更清晰、更易于理解。

1.2公共约定

(1)除需进行特定的编码集处理,其他使用UTF-8编码集。

(2)命名指系统中对源文件名、方法、目录、包、数据库表名、数据库字段等的命名。

(3)系统所用的命名都使用英文缩写来表达。

(4)命名的组成方式为:

前缀+{命名词素缩写},前缀表达出命名的用途,如数据库表等。

(5)命名的前缀由项目组确定。

(6)除系统公共维护对象外的其他对象,命名全部用小写。

一种方式用“_”作连接符,另一种方式是词素的第一个字母大写直接连接在一起。

在本规范中,数据库名、数据库字段名采用第一种方式,其余采用第二种方式。

(7)使用可以准确说明变量/字段/类/接口/包等的完整的英文描述符。

例如,采用类似firstName,listAllUsers或CorporateCustomer这样的名字,严禁使用汉语拼音及不相关单词命名,虽然JAVA支持Unicode命名,但本规范规定对包、类、接口、方法、变量、字段等不得使用汉字等进行命名。

(8)采用大小写混合,提高名字的可读性。

一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写,包名全部小写。

(9)尽量少用缩写,但如果一定要使用,当使用公共缩写和习惯缩写等,如实现(implement)可缩写成impl,经理(manager)可缩写成mgr等,具体参看下表,严禁滥用缩写。

(10)避免使用长名字(最好不超过25个字母)。

(11)避免使用数字,但可用2代替to,用4代替for等。

如:

go2Jsp。

2命名规范

标示符类型

命名约定

例子

全部小写。

标识符用点号分隔开来。

为了使包的名字更易读,Sun公司建议包名中的标识符用点号来分隔。

Sun公司的标准JAVA分配包用标识符.java开头。

全局包的名字用你的机构的Internet保留域名开头。

局部包:

interface.screens

全局包:

com.rational.www.interface.screens

类,接口

类的名字应该使用名词。

每个单词第一个字母应该大写。

避免使用单词的缩写,除非它的缩写已经广为人知,如HTTP。

ClassHello;

ClassHelloWorld;

InterfaceApple;

方法

第一个单词一般是动词。

第一个字母是小些,但是中间单词的第一个字母是大写。

如果方法返回一个成员变量的值,方法名一般为get+成员变量名,如若返回的值是bool变量,一般以is(has)作为前缀。

如果方法修改一个成员变量的值,方法名一般为:

set+成员变量名。

getName();

setName();

isFirst();

 

变量

第一个字母小写,中间单词的第一个字母大写。

不要用_或&作为第一个字母。

尽量使用短而且具有意义的单词。

单字符的变量名一般只用于生命期非常短暂的变量。

i,j,k,m,n一般用于integers;c,d,e一般用于characters。

如果变量是集合,则变量名应用复数。

命名组件采用骆驼命名法,所有前缀均应遵循同一个组件名称缩写列表。

 

StringmyName;

int[]students;

inti;

intn;

charc;

saveBtn(Btn是Button的缩写)

常量

所有常量名均全部大写,单词间以“_”隔开。

intMAX_NUM;

2.1文件、包命名规范

(1)文件名当与其类严格相同,所有单词首字母大写。

(2)包名一般以项目或模块名命名,少用缩写和长名,一律小写。

(3)基本包:

com,所有包、文件都从属于此包。

(4)包名按如下规则组成:

[基本包].[公司名].[项目名].[模块名].[子模块名]...

如:

com.e-eye.emiv

com.e-eye.emiv.until…

(5)不得将类直接定义在基本包下,所有项目中的类、接口等都当定义在各自的项目和模块包中。

2.2类、接口命名规范

所有单词首字母大写。

使用能确切反应该类、接口含义、功能等的词,一般采用名词。

如使用MVC模式:

(1)Servlet类命名

一般对应于所服务的对象加后缀Service来命名,如:

UserService,TradeService等。

实现类一般对应于所服务的对象加后缀Impl来命名,如UserServiceImpl,TradeServiceImpl等。

(2)JSP\html文件命名

采用完整的英文描述说明JSP所完成的功能,尽可能包括一个生动的动词,第一个字母小写,如:

viewMessage.jsp、editUser.jsp或者forumChooser.html等。

(3)DAO类命名

一般对应于所服务的对象加后缀Service来命名,如:

UserDao,TradeDao等。

实现类一般对应于所服务的对象加后缀Impl来命名,如UserDaoImpl,TradeDaoImpl等。

(4)Controller类命名

一般对应于所服务的对象加后缀Controller来命名,如:

UserController等。

2.3方法命名规范

方法的命名应采用完整的英文描述符,大小写混合使用。

所有中间单词的第一个字母大写。

方法名称的第一个单词常常采用一个有强烈动作色彩的动词。

取值使用get前缀、设值使用set前缀、查询使用query(find)前缀、修改使用upd(update)前缀、删除使用del前缀、判断类使用is(has)前缀。

例:

getName();

setSarry();

isLogon();

queryUser();

updUserById();

方法参数建议顺序:

(被操作者,操作内容,操作标志,其他⋯)。

例:

publicvoidreplace(StringsourceStr,StringoldStr,StringnewStr)

{

........

}

2.4常量、变量、参数命名规则

采用Camel命名法(骆驼命名法),词素规则见“公共约定”。

常量采用完整的英文大写单词,在词与词之间用下划线连接,如:

DEFAULT_VALUE。

临时变量通常被取名为i、j、k,m和n,它们一般用于整型;c、d、e它们一般用于字符型。

2.5数据库命名规范

(1)表命名

前缀与命名词素间用下划线分隔。

命名由小写字母组成。

命名词素如果由单一词组成,可用全拼;如果是多词组成,用缩写。

缩写间用下划线。

如:

库表:

以“t_”开头;

视图:

以“v_”开头;

库表索引:

以“t_”开头,以“_idx”结尾;

库表唯一索引:

以“t_”开头,以“_uidx”结尾。

(2)表字段命名

命名词素如果由单一词组成,可用全拼;如果是多词组成,用缩写;缩写间用下划线。

命名由小写字母组成。

没有前缀。

2.6其他

命名时应使用复数来表示它们代表多值。

如:

orderItems

(1)集合

一个集合,例如数组和矢量,应采用复数命名来表示队列中存放的对象类型。

命名应采用完整的英文描述符,名字中所有非开头的单词的第一个字母应大写,适当使用集合缩写前缀。

如:

VectorvProducts=newVector();//产品向量

ArrayaryUsers=newArray();//用户列表

(2)数组

数组应该总是用下面的方式来命名:

byte[]buffer;

而不是

bytebuffer[];

(3)神秘的数

程序里经常会用到一些量,它是有特定的含义的,把神秘的数定义为一个常量。

注意这个常量的命名应该能表达该数的意义,并且应该全部大写,以与对应于变量的标识符区别开来。

例如50这个数,可以定义为一个名为NUM_OF_EMPLOYEES的常量来代替。

3书写格式

严格要求书写格式是为了使程序整齐美观、易于阅读、风格统一,程序员对规范书写的必要性要有明确认识。

建议源程序使用eclipse\myEclipse工具开发,格式规范使用工具中自带格式化效果(Ctrl+Shift+f)。

3.1缩进

缩进建议以4个空格为单位。

预处理语句、全局数据、标题、附加说明、函数说明、标号等均顶格书写。

语句块的“{”和“}”配对对齐,并与其前一行对齐,语句块类的语句缩进建议每个“{”和“}”单独占一行,便于匹对。

eclipse中的默认方式是开始的“{”不是单独一行,建议更改成上述格式。

如:

在if语句后缩进;

在else语句后缩进;

在switch语句后缩进;

在case语句后缩进;

在do句后缩进;

已经用行接续符分割的语句的各个行要缩进;

对从属于行标注的代码进行缩进。

3.2空格

原则上变量、类、常量数据和函数在其类型,修饰名称之间适当空格并据情况对齐。

关键字原则上空一格,如:

if(...)等。

运算符的空格规定如下:

“:

:

”、“->”、“[”、“]”、“++”、“--”、“~”、“!

”、“+”、“-”(指正负号)、“&”(引用)等几个运算符两边不加空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括)大多数二目运算符和三目运算符“?

”和“:

”两边均加一空格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。

“,”运算符只在其后空一格,需对齐时也可不空或多空格。

不论是否有括号,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。

个人认为此项可以依照个人习惯决定遵循与否。

3.3对齐

原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。

另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。

变量定义最好通过添加空格或TAB键形成对齐,同一类型的变量最好放在一起。

如下例所示:

intnValue;

intnResult;

intnLength;

3.4空行

不得存在无规则的空行,比如说连续十个空行。

程序文件结构各部分之间空一行,由于每个函数还要有函数说明注释,故通常只需空一行或不空,但对于没有函数说明的情况至少应再空一行。

对自己写的函数,建议也加上“//------”做分隔。

函数内部数据与代码之间应空至少一行,代码中适当处应以空行空开,建议在代码中出现变量声明时,在其前空一行。

类中四个“p”之间至少空一行,在其中的数据与函数之间也应空行。

3.5注释

注释是软件可读性的具体体现。

程序注释量一般占程序编码量的20%,软件工程要求不少于20%。

程序注释不能用抽象的语言,类似于“处理”、“循环”这样的计算机抽象语言,要精确表达出程序的处理说明。

避免每行程序都使用注释,可以在一段程序的前面加一段注释,具有明确的处理逻辑。

注释必不可少,但也不应过多,不要被动的为写注释而写注释。

以下是必要的注释:

(1)标题、附加说明。

(2)函数、类等的说明。

对几乎每个函数都应有适当的说明,通常加在函数实现之前,在没有函数实现部分的情况下则加在函数原型前,其内容主要是函数的功能、目的、算法等说明,参数说明、返回值说明等,必要时还要有一些如特别的软硬件要求等说明。

公用函数、公用类的声明必须由注解说明其使用方法和设计思路,当然选择恰当的命名格式能够帮助你把事情解释得更清楚。

(3)在代码不明晰或不可移植处必须有一定的说明。

(4)及少量的其它注释,如自定义变量的注释、代码书写时间等。

(5)注释一定出现在要注释的程序段前,不要在某段程序后书写对这段程序的注释,先看到注释对程序的理解会有一定帮助。

如果有可能,请在注释行与上面代码间加一空行。

(6)需要注释的部分:

项目

注释哪些部分

实参/参数

参数类型

参数用来做什么

任何约束或前提条件

示例

字段/属性

字段描述

注释所有使用的不变量

示例

并行事件

可见性决策

类的目的

已知的问题

类的开发/维护历史

注释出采用的不变量

并行策略

编译单元

每一个类/类内定义的接口,含简单的说明

文件名和/或标识信息

版权信息

接口

目的

它应如何被使用以及如何不被使用

局部变量

用处/目的

成员函数注释

成员函数做什么以及它为什么做这个

哪些参数必须传递给一个成员函数

成员函数返回什么

已知的问题

任何由某个成员函数抛出的异常

可见性决策

成员函数是如何改变对象的

包含任何修改代码的历史

如何在适当情况下调用成员函数的例子适用的前提条件和后置条件

成员函数内部注释

控制结构

代码做了些什么以及为什么这样做

局部变量

难或复杂的代码

处理顺序

4代码文件风格

所有的JAVA(*.java)文件都必须遵守如下的样式规则。

4.1文件生成

对于规范的JAVA派生类,尽量用eclipse\myEclipse工具来生成文件格式,避免用手工制作的头文件/实现文件。

package/import

package行要在import行之前,import中标准的包名要在本地的包名之前,而且按照字母顺序排列。

如果import行中包含了同一个包中的不同子目录,尽量不使用“*”进行处理,减少程序引用的资源。

package.stats;

importjava.util.Observable;

importhotlava.util.Application;

4.2程序注释

文件头部注释主要是表明该文件的一些信息,是程序的总体说明,可以增强程序的可读性和可维护性。

文件头部注释一般位于package/imports语句之后,Class描述之前。

要求至少写出文件名、创建者、创建时间和内容描述。

其格式应该尽量约束如下:

(1)Class(类)

接下来的是类的注释,一般是用来解释类的。

/**

*本类做什么的,处理什么

*@author:

作者

*@version:

版本

*/

publicclassCounterSet{

..........

}

接下来是类定义,尽量包含在同行的extends和implements

publicclassCounterSetextendsObservableimplementsCloneable{

.....................

}

(2)ClassFields(类中成员)

接下来是类的成员变量:

/**

*该变量做什么用,默认值是什么

*/

protectedint[]packets;

接下来是类的方法:

/**

*本方法做什么用,使用什么场景

*@param参数

*@throws什么时候抛出什么异常

*/

protectedint[]getPackets(){

......

}

public的成员变量必须生成文档(JAVADoc)。

proceted、private和package定义的成员变量如果名字含义明确的话,可以没有注释。

(3)代码注释

对于逻辑复杂的代码片段,如多重for,多重if等必须要有注释标明。

单行注释:

//判断(处理)什么用的逻辑

If(){

........

}

多行注释:

/**

*判断(处理)什么用的逻辑

*/

If(){

........

}

4.3配置文件注释

配置文件注释对于配置文件中每一个(配置)节点进行解释。

用法:

--节点做什么用-->

aspectj-autoproxyproxy-target-class="true"/>

4.4get\set方法

类变量的存取的方法,它只是简单的用来将类的变量赋值获取值的话,简单的写在一行上。

publicint[]getPackets()

{

 returncopyArray(packets,offset);

}

publicint[]getBytes()

{

 returncopyArray(bytes,offset);

}

publicint[]getPackets()

{

 returnpackets;

}

publicvoidsetPackets(int[]packets)

{

 this.packets=packets;

}

4.5构造函数

(1)构造函数,它应该用递增的方式写(比如:

参数多的写在后面)。

访问类型(public、private等)和任何(static、final、synchronized)应该在一行中,遵循JAVA编写习惯。

publicCounterSet(intsize)

{

  this.size=size;

}

(2)克隆方法

如果这个类是可以被克隆的。

如下clone方法:

PublicObjectclone()

{

try

  {

CounterSetobj=(CounterSet)super.clone();

obj.packets=(int[])packets.clone();

obj.size=size;

returnobj;

catch(CloneNotSupportedExceptione)

{

thrownewInternalError("UnexpectedCloneNotSUpportedException:

"

         +e.getMessage());

}

}

4.6类方法

方法必须明确,处理某一件(类)事情,逻辑处理复杂则进行按逻辑分隔为方法进行处理。

类的方法:

/**

*本方法做什么用,使用什么场景

*@param参数

*@throws什么时候抛出什么异常

*/

protectedfinalvoidsetArray(int[]r1,int[]r2,int[]r3,int[]r4)

 throwsIllegalArgumentException

{

 //

  //Ensurethearraysareofequalsize

  //

  if(r1.length!

=r2.length||r1.length!

=r3.length||r1.length

!

=r4.length)

thrownewIllegalArgumentException("Arraysmustbeofthesamesize";

System.arraycopy(r1,0,r3,0,r1.length);

System.arraycopy(r2,0,r4,0,r1.length);

}

(1)toString方法

建议每一个类都应该定义toString方法。

如:

PublicStringtoString()

{

 Stringretval="CounterSet:

";

   for(inti=0;i

   {

      retval+=data.bytes.toString();

      retval+=data.packets.toString();

   }

   returnretval;

}

(2)main方法

如果main(String[])方法已经定义了,那么它应该写在类的底部。

(3)System.out.println()使用

代码中尽量不使用该控制台输出,使用完后必须移除。

5表达式和语句

每行应该只有一条语句。

(1)if-else、if-elseif语句

任何情况下,都应该有“{”和“}”格式如下:

if(condition){

statements;

}elseif(condition){

statements;

}else{

statements;

}

(2)for语句格式

如下:

for(initialization;condition;update){

statements;

}

如果语句为空:

for(initialization;condition;update);

(3)while语句格式

如下:

while(condition){

statements;

}

如果语句为空:

while(condition);

(4)do-while语句格式

如下:

do{

statements;

}while(condition);

(5)switch语句

每个switch里都应包含default子语句。

格式如下:

switch(condition){

caseABC:

statements;

/*fallsthrough*/

caseDEF:

statements;

break;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1