JAVA编程规范
Java编程规范
1为什么需要编程规范
1、在软件的⽣命周期中,80%的⼯作是在产品的维护上。
2、在软件产品的整个⽣命周期中,它的维护不可能都由产品的开发⼈员来完成。
3、良好的编程规范,可以增加程序的可读性,让⼯程师更好更彻底的理解程序。
4、当原代码作为产品提交时,需要象其它产品⼀样,有着良好的包装。
因此,要求开发⼈员遵守编程规范。
2⽂件的命名
2.1 ⽂件后缀
1)JA V A 源⽂件后缀为.java;
2)JA V A类⽂件后缀为.class
2.2 公有⽂件名
1)编译⽂件(GNUmakefile)命名为gunmakefile
2)注释⽂件名readme
3⽂件的组织
当⼀个⽂件有多个部分组成时,应⽤空⾏来分隔,并尽可能给出注释。
应尽量避免超过2000⾏的⽂件。
3.1 Java源代码⽂件
每个Java原代码⽂件由⼀个单独的公共类或接⼝(interface)组成。当有私有的类或接⼝与公有的类或接⼝相关时,可以将它们放在⼀个⽂件中。其中的公共类或接⼝应该是第⼀个成员。
⼀个JA V A源⽂件的组织顺序如下:
◆起始注释
◆包声明及导⼊包声明
类或接⼝声明
3.1.1起始注释声明
所有的Java源代码⽂件均应该包含象C语⾔那样的起始注释,列出类名,版本信息,⽇期及版权声明。
如下:
/*
* 类名称
*
* 版本信息
*
* ⽇期
*
* 版权声明
*/
3.1.2包及导⼊包声明
第⼀个⾮注释⾏应该是包声明,紧接着的是导⼊包的声明。
如:
package java.awt;
import java.awt.peer.CanvasPeer;
注意:
通常,包名中第⼀个组成部分应该是⼩写的在ISO Standard 3166, 1981标准中公布的顶级域名,如:com,edu,gov,mil,net,org或者是两个字母的国家代码。
3.1.3类或接⼝声名
4缩进(indentation)
采⽤4个空格作为缩进的单元。可⽤空格键或TAB键做缩进。TAB键应设为8个空格(不是4个)4.1 ⾏的长度由于很多的终端设备或编辑⼯具不好处理超过80个字符的⾏,所以每⾏应⼩于80个字符。
4.2 折⾏处理
如果表达式在⼀⾏写不下,则应按以下原则分⾏:
1.在逗号以后(comma)分⾏;如:
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
2.在操作符之前分⾏(operator);
3.按运算优先级分⾏。如:
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; // PREFER
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; // A VOID
4.在同⼀层次上,表达式的开始处,新⾏应与前⼀⾏对齐;
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
5.当⽤以上原则缩进时反⽽使代码混乱或右边距过⼩时应往左缩进8个space(即⼀个TAB)。如:
//CONVENTIONAL INDENTATION(规范的缩进)
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
//INDENT 8 SPACES TO A VOID VERY DEEP INDENTS(只缩进8个space以免缩进太深)private static synchronized horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
●只缩进4个space会使读程序变的困难。如下:
//不要使⽤下⾯的缩进⽅式:(只缩进4个空格)
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { //BAD WRAPS
doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS
}
//USE THIS INDENTATION INSTEAD(缩进8个空格)
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
/
/OR USE THIS如何阅读java源码
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
●以下⼏种格式也是可以接受的:
(1)alpha = (aLongBooleanExpression) ? beta : gamma;
(2)alpha = (aLongBooleanExpression) ? beta
: gamma;
(3)alpha = (aLongBooleanExpression)
beta
:
gamma;
5注释
Java程序有程序注释和⽂档注释两种注释。程序注释是类似于C++中的程序注释格式,它采⽤/*…*/或//分隔。⽂档注释(称之为“doc comments”)是Java特有的,它采⽤/**…*/分隔。⽂档注释可以通过javadoc 来导出到HTML⽂档。
程序注释是⽤来对代码作出注释以及对代码实现的解释。⽂档注释是对程序规格及接⼝的说明,供没有源代码的开发⼈员参考。
注释应给出代码的总的说明(overviews),提供代码所不能给出的额外的信息。其⽬的是为了便于阅读和理解程序。除此之外的信息不应包含在内(如package是如何建⽴的,程序所在的⽬录等等信息)。
有必要就⼀些重要的及不明确的设计做讨论,但应该避免在代码中的冗余注释信息。通常很容易发⽣
注释与代码的不同步现象,注释应随着代码的更新⽽更新,不应保留过期的注释。
注:过于频繁出现注释,从另⼀个侧⾯反映出较差的代码质量。当你感到不得不增加注释时,应该考虑重写代码,让代码更明了。
注释不应封装在⽤特殊的字符(如*)组成的⼤盒⼦⾥。
注释不应包含特殊的字符如换页或退格字符。
5.1 程序注释格式
程序中可以包含4种格式的注释:块注释,单⾏注释,跟踪注释,⾏尾注释。
5.1.1块注释
块注释⽤于给⽂件、⽅法、数据结构和算法提供描述。块注释可以写在每个⽂件和⽅法的头部。它们也可以⽤在其它地⽅,⽐如说写在⽅法中。写在函数或⽅法中的块注释必须与它所描述的代码的缩进⼀致。
⼀个块注释之前应该由⼀个空⾏将它与代码隔离开:
/*
*此处书写块注释。
*/
块注释可以以字符串/*-开始,indent(1)把它看作⼀个块注释的开始,不应该再设置其它格式。例如:/*-
*此处是⼀个块注释,它有⼀些特殊的格式,我希望ident(1)忽略它。
* 第⼀段
* 第⼆段
* 第三段
*/
注:如果你不使⽤indent(1),你不必在代码中使⽤/*-,或者因为其它⼈有可能在你的代码中使⽤indent(1)⽽做出任何让步。
相关内容可见:“⽂档注释”
5.1.2单⾏注释
单⾏的短注释与它所跟着的代码的缩进⼀致。如果⼀个注释不能在⼀⾏中写完,就应该使⽤块注释的格式(见5.1.1)。单⾏注释之前应该有⼀个空⾏。以下是⼀个在Java代码中的单⾏注释的例⼦(相关内容
见:“⽂档注释”):
if (condition) {
/* 处理条件*/
……
}
5.1.3跟踪注释
⾮常短的注释可以在同⼀⾏中紧跟着所描述的代码后⾯,但必须与代码隔开⾜够的空间。如果在⼀段代码中有多个短注释,这些注释应该保持相同的制表符缩进。
下⾯是在Java代码中的跟踪注释的例⼦:
if (a == 2) {
return TRUE; /* 这是个特例*/
} else {
return isPrime(a); /* 当a是奇数时*/
}
5.1.4⾏尾注释
注释分割符// 可以注释⼀整⾏或⼀⾏中的⼀部分。它后⾯不能跟连续多⾏的⽂本注释,但是,可以在连续多⾏的注释每⾏前加上注释分割符。下⾯是三种使⽤⽅式的例⼦:
if (foo > 1) {
// 当foo > 1时
……
} else {
return FALSE; // 当foo <= 1 时
}
// if (bar > 1) {
// // 当bar > 1 时
// ……
// } else {
// return FALSE;
// }
5.2 ⽂档注释
注:参见“Java例程源⽂件”中的注释格式样例。
要获得进⼀步的细节,参见“如何为Javadoc书写⽂档注释”,它包括关于⽂档注释标记符的信息(@return, @param,
@see):
www.doczj/doc/765d79bd1a37f111f1855b30.html /products/jdk/javadoc/writingdoccomments.html
要获得关于⽂档注释和javadoc的进⼀步细节,参见javadoc的主页:
www.doczj/doc/765d79bd1a37f111f1855b30.html /products/jdk/javadoc/
⽂档注释描述了Java类、接⼝、构造器、⽅法和域。每个⽂档注释设在注释分割符/**…*/中,每个类、接⼝或成员⼀个注释。这种注释应该放在声明之前:
/**
* 这个例⼦类提供了...
*/
public class Example { ...