Java编码规范.docx

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

Java编码规范.docx

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

Java编码规范.docx

Java编码规范

 

 

 

 

 

 

 

 

 

 

 

[Java编码规范]

 

 

 

 

 

 

 

 

 

 

 

目录

1.为什么要制定编码规范?

3

2.JAVA编码规范3

2.1命名规范3

2.1.1共性规范3

2.1.2个性规范5

2.2注释规范7

2.3排版规范8

2.3.1空行8

2.3.2代码行9

2.3.3代码行内的空格10

2.3.4对齐10

2.3.5长行拆分11

2.3.6缩进12

2.4代码编写规范12

2.4.1运算符的优先级12

2.4.2复合表达式13

2.4.3if语句14

2.4.4循环语句的效率15

2.4.5for语句的循环控制变量16

2.4.6switch语句17

2.5程序编写规范17

2.6JAVA文件样式19

2.7可读性22

2.8性能22

2.9代码编译23

3.JSP编码规范23

4.其他编程经验25

4.1提高程序的效率25

4.2一些有益的建议25

 

1.为什么要制定编码规范?

Ø代码规范相当重要。

代码规范提高软件代码的可读性,使得开发人员快速和彻底的理解新代码。

Ø好的代码风格不仅会提高可读性,而且会使代码更健壮,更为重要的是在修改时不容易出错。

Ø再现代软件开发中,维护工作会占用80%的时间,而且开发者和维护者通常不是同一个程序员。

这意味着你经常要阅读和修改别人开发的程序,别人也同样可能需要阅读和修改你开发的程序。

既然如此,为什么不把这利人利己的事情作好呢?

一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的。

2.JAVA编码规范

2.1命名规范

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。

(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)

2.1.1Package的命名

Package的名字应该都是由一个小写单词组成。

例如:

packagecom.neu.util

在struts+spring+hibernate框架中,包名命名如下:

所属层

包名

Persist

Model

persist.model

DAO

persist.dao

Hibernate(DAO实现)

persist.hibernate

Service

service

Service实现

service.impl

Struts

Action

web.action

Form

web.form

2.1.2Class的命名

类名用大写字母开头的而其他字母都小写的单词组成,其中包含的所有单词都应紧靠在一起。

例如:

classNode;//类名

classLeafNode;//类名

在struts+spring+hibernate框架中,类名的命名如下:

所属块

类名

Model

Customer.java

DAO

CustomerDAO.java

Hibernate(DAO实现)

CustomerDAOHibernate.java

Service

CustomerService.java

Service实现

CustomerServiceImpl.java

Action

CustomerAction.java

Form

CustomerForm.java

2.1.3方法的命名

方法名用小写字母组成的单词开头,后边跟上大写字母开头而其他字母都小写的单词组成,其中包含的所有单词都应紧靠在一起。

例如:

voidgetName();//方法名

voidsetValue(intvalue);//方法名

在struts+spring+hibernate框架中,Action中的方法命名如下:

方法

作用

方法名

增加

进入增加页面

add()

修改

进入修改页面

edit()

删除

删除数据

delete()

保存

保存数据

save()

查询

查询数据

search()

2.1.4Class中变量的命名

类中的一个变量的名字=类型标志+描述词。

变量和参数用小写字母开头的单词和大写字母开头其他字母都小写的单词组合而成。

类型标志分类如下:

变量类型

标识符

变量类型

标识符

boolean

b

long

l

Char

chr

float

f

byte

by

double

dbl

int

i

数组

ary

short

sht

Date

d

object

obj

一般对象

o

String对象

str

List对象

list

EJB的Home对象

h

EJB的Bean对象

ejb

Model对象

mod

Servlet对象

srv

Struct对象

stc

Remote对象

r

描述词为一个简短且意思明确的英文单词.

如果通过以上规则,还出现同名的变量,可以在变量后添加后缀来解决,但后缀应该以”_”来连接.

例:

bOpenFlag,

aryCount,

dDate_temp,

srvMenuJob.

ejbgetData

hMoneyInput

Ø静态变量加前缀s_(表示static)。

例如:

staticints_iValue;//静态变量

Ø如果不得已需要全局变量,则使全局变量加前缀g_(表示global)。

例如:

intg_iHowManyPeople;//全局变量

intg_iHowMuchMoney;//全局变量

Ø类的数据成员加前缀m_(表示member),这样可以避免数据成员与成员函数的参数同名。

例如:

voidSetValue(intwidth,intheight)

{

m_width=width;

m_height=height;

}

Ø循环计数的变量通常用i,j,k等表示。

例如:

for(inti=0;i

{

}

2.1.5数组的命名

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

byte[]aryCount;

String[][]aryName;

而不是:

bytearyCount[];

StringaryName[][];

2.1.6常量的命名

staticfinal常量的名字应该都大写,并且指出完整含义。

staticfinalStringS_DB_CONFIG_FILE_PATH="com.neu.etrain.dbconfig";

staticfinalintS_MAX_VALUE=100;

2.1.7参数的命名

方法中参数的名字规则为第一个单词首字母小写,其后的单词的每个字母大写

例:

(StringintColorCode)

Servlet中传递的参数名字规则为小写

例:

"OrderChangeEntry.SRV?

submit=INITIAL&jobcode="+VLG031&contractno="+ContractNO

2.1.8JSP文件的命名

JSP文件名=模块(或功能)名+操作(增加、修改、查询、查询结果、查看等),例如:

操作页面

JSP文件名

客户增加页面

CustomerAdd.jsp

客户修改页面

CustomerEdit.jsp

客户查询页面

CustomerSearch.jsp

客户查询结果页面

CustomerSearchList.jsp

客户查看页面

CustomerView.jsp

2.1.9画面部品的命名

画面部品是指在开发中使用的来源于treck共通基类的各种显示用部品.这类部品的命名原则基本上和变量的命名原则类似,只是将类型标志替换成部品类型即可.常用部品的类型如下:

组件类型

类型名称

按钮(button)

btn

表格(table)

tb

文本输入框(text)

txt

单选框(radio)

rdo

复选框(checkbox)

chx

下拉框(select)

sel

例:

txtCustomerName

2.2注释规范

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。

Java的注释有三种:

//注释一行  

/*......*/注释若干行

除了以上两种之外,还有第三种,文档注释:

  

/**......*/注释若干行,并写入javadoc文档

Ø【规则1】注释是对代码的“提示”,而不是文档。

程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。

注释的花样要少,简单明了。

Ø【规则2】如果代码本来就是清楚的,则不必加注释。

否则多此一举,令人厌烦。

例如:

i++;//i加1,多余的注释

Ø【规则3】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。

不再有用的注释要删除。

Ø【规则4】注释应当准确、易懂,防止注释有二义性。

错误的注释不但无益反而有害。

Ø【规则5】尽量避免在注释中使用缩写,特别是不常用缩写。

Ø【规则6】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。

例如:

StringuserName=null;//用户名

Ø【规则7】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。

if(…)

{

While(…)

{

}//Wile结束

}//if结束

Ø【规则8】在每个源文件的头部要有必要的注释信息,包括:

文件名;版本号;作者;生成日

期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文

件关系等);主要函数或过程清单及本文件历史修改记录等。

例如:

/**

*文件名:

dbBean.java

*作者:

张晓东

*版本号:

1.02

*生成日期:

2005-01-10

*功能描述:

连接数据库和操作数据表。

*修改人:

范玉静

*修改日期:

2005-02-20

*修改内容:

增加了事务处理功能。

*/

Ø【规则9】在每个函数或过程的前面要有必要的注释信息,包括:

函数或过程名称;功能描述;输入、输出及返回值说明;调用关系及被调用关系说明等

 

/**

*函数介绍:

*输入参数:

*输出参数:

*返回值:

*/

voidFunction(floatx,floaty,floatz)

{

}

2.3排版规范

2.3.1空行

Ø【规则1】在每个类声明之后、每个函数定义结束之后都要加空行。

参见示例(左)

Ø【规则2】在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。

参见示例(右)

示例:

//空行

voidFunction1(…)

{

}

//空行

voidFunction2(…)

{

}

//空行

voidFunction3(…)

{

}

//空行

while(condition)

{

statement1;

//空行

if(condition)

{

statement2;

}

else

{

statement3;

}

//空行

statement4;

}

(左)函数之间的空行(右)函数内部的空行

2.3.2代码行

Ø【规则1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。

这样的代码容易阅读,并且方便于写注释。

Ø【规则2】if、for、while、do等语句自占一行,执行语句不得紧跟其后。

不论执行语句有多少都要加{}。

这样可以防止书写失误(该规则作为建议)。

示例:

intwidth;//宽度

intheight;//高度

intdepth;//深度

intwidth,height,depth;//宽度高度深度

x=a+b;

y=c+d;

z=e+f;

X=a+b;y=c+d;z=e+f;

if(width

{

doSomething();

}

if(width

for(inti=0;i

{

doSomething();

}

//空行

other();

for(inti=0;i

doSomething();

other();

 

(左)风格良好的代码行(右)风格不良的代码行

2.3.3代码行内的空格

Ø【规则1】关键字之后要留空格。

象const、virtual、case等关键字之后至少要留一个空格,否则无法辨析关键字。

象if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。

Ø【规则2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。

Ø【规则3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。

Ø【规则4】‘,’之后要留空格,如Function(x,y,z)。

如果‘;’不是一行的结束符号,其后要留空格,如for(initialization;condition;update)。

Ø【规则5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”等操作符的前后应当加空格。

Ø【规则6】一元操作符如“!

”、“++”、“--”等前后不加空格。

Ø【规则7】像“[]”、“.”这类操作符前后不加空格。

✧【建议】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d))

voidFunc1(intx,inty,intz);//良好的风格

voidFunc1(intx,inty,intz);//不良的风格

if(year>=2000)//良好的风格

if(year>=2000)//不良的风格

if((a>=b)&&(c<=d))//良好的风格

if(a>=b&&c<=d)//不良的风格

for(i=0;i<10;i++)//良好的风格

for(i=0;i<10;i++)//不良的风格

for(i=0;I<10;i++)//过多的空格

x=a

a:

b;//良好的风格

x=a

a:

b;//不好的风格

int*x=&y;//良好的风格

int*x=&y;//不良的风格

array[5]=0;//不要写成array[5]=0;

a.Function();//不要写成a.Function();

代码行内的空格

2.3.4对齐

Ø【规则1】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。

Ø【规则2】{}之内的代码块在‘{’右边数格(参照缩进)处左对齐。

 

voidFunction(intx)

{

…//programcode

}

voidFunction(intx){

…//programcode

}

if(condition)

{

…//programcode

}

else

{

…//programcode

}

if(condition){

…//programcode

}

else{

…//programcode

}

for(initialization;condition;update)

{

…//programcode

}

for(initialization;condition;update){

…//programcode

}

While(condition)

{

…//programcode

}

while(condition){

…//programcode

}

如果出现嵌套的{},则使用缩进对齐,如:

{

{

}

}

(左)风格良好的对齐(右)风格不良的对齐

2.3.5长行拆分

Ø【规则1】代码行最大长度宜控制在70至80个字符以内。

代码行不要过长,否则眼睛看不过来,也不便于打印。

Ø【规则2】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。

拆分出的新行要进行适当的缩进,使排版整齐,语句可读。

if((very_longer_variable1>=very_longer_variable12)

&&(very_longer_variable3<=very_longer_variable14)

&&(very_longer_variable5<=very_longer_variable16))

{

dosomething();

}

virtualCMatrixCMultiplyMatrix(CMatrixleftMatrix,

CMatrixrightMatrix);

for(very_longer_initialization;

very_longer_condition;

very_longer_update)

{

dosomething();

}

长行的拆分

2.3.6缩进

Ø【规则1】缩进应该是每行2个空格,不要在源文件中保存Tab字符,在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度。

如果你使用比较优秀的IDE,譬如:

eclipse或者JBuilder,那么在你完成你的代码以后,只要注意“format”一下就可以达到上边的效果。

2.4代码编写规范

Ø【规则1】文档化

必须用javadoc来为类生成文档。

不仅因为它是标准,这也是被各种java编译器都认可的方法。

2.4.1运算符的优先级

优先级

运算符

结合律

 

()[].

从左至右

!

~++--(类型)sizeof

+-*&

从右至左

*/%

从左至右

+-

从左至右

<<>>

从左至右

<<=>>=

从左至右

==!

=

从左至右

&

从左至右

^

从左至右

|

从左至右

&&

从左至右

||

从右至左

?

:

从右至左

=+=-=*=/=%=&=^=

|=<<=>>=

从左至右

如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。

由于将上述表熟记是比较困难的,为了防止产生歧义并提高可读性,应当用括号确定表达式的操作顺序。

例如:

word=(high<<8)|low

if((a|b)&&(a&c))

2.4.2复合表达式

如a=b=c=0这样的表达式称为复合表达式。

允许复合表达式存在的理由是:

(1)书写简洁;

(2)可以提高编译效率。

但要防止滥用复合表达式。

Ø【规则1】不要编写太复杂的复合表达式。

例如:

i=a>=b&&c

Ø【规则2】不要有多用途的复合表达式。

例如:

d=(a=b+c)+r;

该表达式既求a值又求d值。

应该拆分为两个独立的语句:

a=b+c;

d=a+r;

Ø【规则3】不要把程序中的复合表达式与“真正的数学表达式”混淆。

例如:

if(a

并不表示

if((a

而是成了令人费解的

if((a

2.4.3if语句

Ø【规则1】布尔变量比较

假设布尔变量名字为flag,它与零值比较的标准if语句如下:

if(flag)//表示flag为真

if(!

flag)//表示flag为假

其它的用法都属于不良风格,例如:

if(flag==true)

if(flag==false)

Ø【规则2】浮点变量与零值比较

不可将浮点变量用“==”或“!

=”与任何数字比较(特殊情况除外)。

千万要留意,无论是float还是double类型的变量,都有精度限制。

所以一定要避免将浮点变量用“==”或“!

=”与数字比较,应该设法转化成“>=”或“<=”形式。

假设浮点变量的名字为x,应当将

if(x==0.0)//隐含错误的比较

转化为

if((x>=-EPSINON)&&(x<=EPSINON))

其中EPSINON是允许的误差(即精度)。

Ø对if语句的补充说明

有时候我们可能会看到if(null==p)这样古怪的格式。

不是程序写错了,是程序员为了防止将if(p==null)误写成if(p=null),而有意把p和null颠倒。

编译器认为if(p=null)是合法的,但是会指出if(null=p)是错误的,因为null不能被赋值。

此方法可以供我们借鉴,用来避免因为把“==”写成“=”而程序不出现错误提示。

程序中有时会遇到if/else/return的组合,应该将如下不良风格的程序

if(condition)

returnx;

else

returny;

改写为

if(condition)

{

returnx;

}

else

{

returny;

}

或者改写成更加简练的

return(condition?

x:

y);

2.4.4循环语句的效率

在循环语句中,for语句使用频率最高,while语句其次,do语句很少用。

本节重点论述循环体的效率。

提高循环体效率的基本办法是降低循环体的复杂性。

Ø【建议1】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。

例如示例(右)的效率比示例(左)的高。

for(row=0;row<100;row++)

{

for(col=0;

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

当前位置:首页 > 求职职场 > 职业规划

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

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