Java编程规范10.docx
- 文档编号:29361276
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:18
- 大小:24.87KB
Java编程规范10.docx
《Java编程规范10.docx》由会员分享,可在线阅读,更多相关《Java编程规范10.docx(18页珍藏版)》请在冰豆网上搜索。
Java编程规范10
Java编程规范1.0
规范说明2
第二部分排版7
第1节空行7
第2节代码行8
第3节代码行内的空格9
第4节对齐10
第5节长行拆分12
第7节注释13
第三部分命名规则16
第四部分表达式和基本语句23
第五部分常量27
第六部分函数28
第1节参数28
第2节返回值30
第3节函数体30
第4节成员函数30
第5节重载、覆盖和隐藏31
第7节其他33
第七部分内存管理34
第八部分类35
第1节构造函数35
第2节拷贝构造函数和赋值函数36
第3节成员变量38
第4节成员函数38
规范说明
本规范各款“规则”或“建议”标准的制定原则:
兼容公司的历史代码,提高公司代码的可读性、一致性和健壮性,人的效率优先而不是机器效率优先。
本规范中的【规则x-x-x】部分内容为公司强制执行的标准,【建议x-x-x】部分内容为公司推荐的标准。
强制标准:
公司程序部的所有员工编写JAVA代码不应与该规范的规则标准相抵触,违反规则标准编写的JAVA代码,由违反者改正。
建议标准:
是一种良好的JAVA编程风格,由于各种因素公司只推荐使用。
公司程序部员工可以不按照某款建议标准编写JAVA代码。
对本规范的不同意见或建议可通过正式途径提交,公司将在下一版规范中采纳或不采纳提出的意见或建议。
正式途径由程序部行政部们另行建立。
第二部分排版
第1节空行
【规则2-1-1】类声明、函数定义之后空行
在每个类声明之后、每个函数定义结束之后都要加空行。
参见示例2-1-1(a)
【规则2-1-2】函数体内,逻辑中断空行
在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。
参见示例2-1-1(b)
【示例2-1-1】(a-b)
//空行
voidFunction1(…){
…
}
//空行
voidFunction2(…){
…
}
//空行
voidFunction3(…){
…
}
//空行
while(condition){
statement1;
//空行
if(condition){
statement2;
}
else{
statement3;
}
//空行
statement4;
}
示例2-1-1(a)函数之间的空行示例2-1-1(b)函数内部的空行
第2节代码行
【规则2-2-1】if、for、while、do等语句自占一行
执行语句不得紧跟其后。
不论执行语句有多少都要加{}。
这样可以防止书写失误。
假设if后面跟的是检查参数错误等逻辑上不可能出现的情况后不跟{}
例如:
if(null==user)
return;
示例2-2-1(a)为风格良好的代码行,示例2-2-1(b)为风格不良的代码行。
【示例2-2-1】(a-b)
intnWidth;//宽度
intnHeight;//高度
intnDepth;//深度
intnWidth,nHeight,nDepth;//宽度高度深度
x=a+b;
y=c+d;
z=e+f;
X=a+b;y=c+d;z=e+f;
if(nWidth dosomething(); } if(nWidth for(initialization;condition;update){ dosomething(); } //空行 other(); for(initialization;condition;update) dosomething(); other(); 示例2-2-1(a)风格良好的代码行示例2-2-1(b)风格不良的代码行 【规则2-2-2】就近原则,变量在使用前才定义 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。 如果引用了未被初始化的变量,可能会导致程序错误。 第3节代码行内的空格 【规则2-3-1】‘,’之后要留空格 如Function(x,y,z)。 如果‘;’不是一行的结束符号,其后要留空格,如for(initialization;condition;update)。 【规则2-3-2】二元操作符的前后应当加空格 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加空格。 【规则2-3-3】一元操作符前后不加空格 一元操作符如“! ”、“~”、“++”、“--”、等前后不加空格。 【规则2-3-4】“[]”、“.”这类操作符前后不加空格。 【建议2-3-1】关键字之后要留空格 if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。 【建议2-3-2】函数名之后不要留空格 紧跟左括号‘(’,以与关键字区别。 【建议2-3-3】‘(’向后紧跟不留空格;‘)’、‘,’、‘;’向前紧跟不留空格 紧跟处不留空格。 多个”((“连在一起处可在外层加空格,”))”也是 【建议2-3-4】较长表达式可以适当地去掉一些空格 对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d)) 【示例2-3-1】 voidfunc1(intnX,intnY,intnZ);//良好的风格 voidfunc1(intnX,intnY,intnZ);//不良的风格 if(nYear>=2000)//良好的风格 if(nYear>=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(); b->Function();//不要写成b->Function(); 第4节对齐 【规则2-4-1】分界符对齐 程序的分界符‘{’应跟在前一行后 }’应独占一行并且位于同一列,同时与引用它们的语句左对齐。 (可用编译器的自动格式化对齐功能来对齐各缩进) 【规则2-4-2】分界符内的代码块对齐 {}之内的代码块在‘{’应跟在前一行后 示例2-4-1(a)为风格良好的对齐,示例2-4-1(b)为风格不良的对齐。 【示例2-4-1】(a-b) 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-4-1(a)风格良好的对齐示例2-4-1(b)风格不良的对齐 第5节长行拆分 【规则2-5-1】拆分方法 长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。 拆分出的新行要进行适当的缩进,使排版整齐,语句可读。 【示例2-5-1】 if((very_longer_variable1>=very_longer_variable12) &&(very_longer_variable3<=very_longer_variable14) &&(very_longer_variable5<=very_longer_variable16)) { dosomething(); } MatrixMultiplyMatrix(MatrixleftMatrix, MatrixrightMatrix); for(very_longer_initialization; very_longer_condition; very_longer_update) { dosomething(); } 第7节注释 【规则2-7-1】注释不可滥用 注释是对代码的“提示”,而不是文档。 程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。 注释的花样要少。 【规则2-7-2】代码可能是最好的注释 如果代码本来就是清楚的,则不必加注释。 否则多此一举,令人厌烦。 例如 i++;//i加1,多余的注释 【规则2-7-3】注释与代码的一致性 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。 不再有用的注释要删除。 【规则2-7-4】注释应当准确、易懂,防止注释有二义性 错误的注释不但无益反而有害。 【规则2-7-5】避免使用缩写 尽量避免在注释中使用缩写,特别是不常用缩写。 【规则2-7-6】注释的位置应与被描述的代码相邻 可以放在代码的上方或右方,不可放在下方。 【建议2-7-1】尽量使用JAVA的标准注释 标准注释是“//”,C标准注释“/**/”。 【建议2-7-2】段落结束注释 当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。 【示例2-7-1】 /* *函数介绍: *输入参数: *输出参数: *返回值: */ voidfunction(floatx,floaty,floatz){ … } if(…){ … while(…){ … }//endofwhile … }//endofif 第三部分命名规则 【规则3-1-1】直观且可以拼读 标识符应当直观且可以拼读,可望文知意,不必进行“解码”。 标识符最好采用英文单词或其组合,便于记忆和阅读。 切忌使用汉语拼音来命名。 程序中的英文单词一般不会太复杂,用词应当准确。 例如不要把nCurrentValue写成nNowValue。 本地化变量命名可采用拼音,但需加上明确的注释。 【规则3-1-2】命名既不要太长,也不用太短 标识符的长度应当符合“min-length&&max-information”原则。 一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。 那么名字是否越长约好? 不见得! 例如变量名maxVal就比maxValueUntilOverflow好用。 单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。 【规则3-1-3】不要仅靠大小写区分标识符 程序中不要出现仅靠大小写区分的相似的标识符。 例如: intx,X;//变量x与X容易混淆,且变量不要用大写字母开头 voidfoo(intx);//函数foo与FOO容易混淆 voidFOO(floatx);//且函数不要用大写字母开头 【规则3-1-5】使用“名词”做变量名 变量的名字应当使用“名词”或者“形容词+名词”。 例如: floatfValue; floatfOldValue; floatfNewValue; 【规则3-1-7】用正确的反义词组 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。 例如: intnMinValue; intnMaxValue; voidsetValue(…); intgetValue(…); 【规则3-1-8】尽量避免名字中出现数字编号 如Value1,Value2等,除非逻辑上的确需要编号。 这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。 【规则3-1-9】自定义类型名 (1)类类型名用大写字母开头的单词组合而成; 例如: classNode;//类名 接口类类型名用“I”加大写字母开头的单词组合而成; 例如: classIRole;//接口类名 【规则3-1-10】变量和参数 变量和参数用小写字母开头的类型标识加大写开头的单词组合而成。 例如: JAVA标准内置数据类型变量 boolbFlag; charcData; shortsData; intnData;//该整数代表实际意义的整数 intiEnumType;//该整数为枚举或者数组的下标 longlData; floatfData; doubledData; char[]arrayCharData; int[]arrayData; StringstrUser; 自定义类类型变量 Useruser;//类对象 集合型数据类型变量 VectorvecUser; HashtabletabUser; 【规则3-1-11】用来当数组下标或者意义为索引的int或byte等都用 intiIndex; int[]arrayData; if(iIndex>=arrayData.length){ intnData=arrayData[iIndex]; } 【规则3-1-12】静态变量加前缀s_(表示static) staticints_nInitValue;//静态变量 【规则3-1-13】类的成员变量加前缀m_(表示member) 这样可以避免成员变量与成员函数的参数同名。 classUser{ privateintm_nAge; } 【规则3-1-14】常量全用大写的字母,用下划线分割单词 例如: finalintMAX=100; finalintMAX_LENGTH=100; 【规则3-1-15】函数全用小写的字母开头,用大写字母分割单词 例如: classUser{ publicintgetAttack(){ return10; } } 【规则3-1-16】一组相同意义的常量定义只要写一次类型,且前缀要相同,其它与此无关的变量不要写在里面. 例如: staticfinalbyte STATUS_NORMAL=0, STATUS_LIVE=1, STATUS_DEAD=2; 第四部分表达式和基本语句 【规则4-1-1】避免使用默认的优先级,四则运算允许 用括号确定表达式的操作顺序,避免使用默认的优先级。 为了防止产生歧义并提高可读性,应当用括号确定表达式的操作顺序。 例如: word=(high<<8)|low if((a|b)&&(a&c)) 【规则4-1-2】不要编写太复杂的复合表达式 例如: i=a>=b&&c 【规则4-1-3】不要有多用途的复合表达式 例如: d=(a=b+c)+r; 该表达式既求a值又求d值。 应该拆分为两个独立的语句: a=b+c; d=a+r; 【规则4-1-4】分清复合表达式和数学表达式 不要把程序中的复合表达式与“真正的数学表达式”混淆。 例如: if(a 并不表示 if((a 而是成了令人费解的 if((a 【规则4-1-7】比较表达式中如果有常量,应把常量放在双等号前面 if(USER_ATK==nType) 这样写可以让代码更清晰,让人第一时间看到数据 【规则4-1-8】不要忘记最后那个default分支 即使程序真的不需要default处理,也应该保留语句default: break;这样做并非多此一举,而是为了防止别人误以为你忘了default处理。 【建议4-1-3】不要在case语句中return跳出函数 若要在case语句中return跳出函数,在return后必须有break。 这样作是为了避免将return语句改为其他语句后,会产生意料之外的错误。 第五部分常量 【规则5-1-1】使用常量表示将在程序中多次出现的数字或字符串 例如: finalintMAX=100; finalfloatPI=3.14159; 【规则5-1-4】注意常量相关性 如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。 例如: finalintRADIUS=100; finalintDIAMETER=RADIUS*2; 第六部分函数 第1节参数 【规则6-1-1】参数的书写要完整 不要贪图省事只写参数的类型而省略参数名字。 例如: voidsetValue(intnWidth,intnHeight);//良好的风格 voidsetValue(int,int);//不良的风格 【规则6-1-2】参数命名要恰当,顺序要合理 例如编数据类拷贝函数DataCopy,它有两个参数。 如果把参数名字起为data1和data2,例如 voidDataCopy(Datadata1,Datadata2); 那么我们很难搞清楚究竟是把data1拷贝到data2中,还是刚好倒过来。 可以把参数名字起得更有意义,如叫dataSource和dataDestination。 这样从名字上就可以看出应该把dataSource拷贝到dataDestination。 还有一个问题,这两个参数那一个该在前那一个该在后? 参数的顺序要遵循程序员的习惯。 一般地,应将目的参数放在前面,源参数放在后面。 第2节返回值 【规则6-2-2】函数名字与返回值类型在语义上不可冲突 例如: intgetChar(),这是错误的写法 【规则6-2-3】函数参数为JAVA内部类型或String时通过值传递,如果为类类型通过引用传递 注意引用传递参数在多线程模式下安全问题 第3节函数体 【规则6-3-1】在函数体的“入口处”,应对参数的有效性进行检查和错误处理 【规则6-3-2】在函数体的“出口处”,对return语句的正确性和效率进行检查。 第5节重载、覆盖和隐藏 【规则6-5-1】区分成员函数重载、覆盖和隐藏的不同含义,禁止定义返回值不同但函数名相同的函数 成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; 覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; 第7节其他 【建议6-7-1】功能要单一化 函数的功能要单一,不要设计多用途的函数。 【建议6-7-2】规模小型化 函数体的规模要小,尽量控制在50行代码之内。 第七部分内存管理 【规则7-2-1】注意一个对象只在一个容器内保存,当变量是在容器中保存时,尽量不要再在其它类的成员变量中引用,否则删除的时候需要删除多个地方的变量,容易遗漏. 第八部分类 第1节构造函数 【规则8-1-2】清晰类成员对象初始化的次序 构造从类层次的最根处开始,在每一层中,首先调用基类的构造函数,然后调用成员对象的构造函数。 不要在初始化函数中去调用其它类的函数或者对其它类的变量赋值。 第3节成员变量 【规则8-3-1】原则上,类的成员变量应声明为private,不对外暴露,除历史已存在的变量外不可新增private的成员变量 第4节成员函数 【规则8-4-2】原则上,对外暴露的成员函数应声明为public,不对外暴露的成员函数应声明为private,只在子类中使用的成员函数应声明为protected
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 编程 规范 10