《java 编程规范》个人总结

最近看了点《java编程规范》,总结了点个人觉得很必要的规范内容。


一. 排版规范

1.避免长的布尔表达式,应换成多个更容易理解的表达式。
bool isFinished = (elementNo < 0) || (elementNo > maxElement);
bool isRepeatedEntry = elementNo == lastElement;
if (isFinished || isRepeatedEntry) {

}
// 避免
if ((elementNo < 0) || (elementNo > maxElement)|| elementNo ==
lastElement) {

}

2.不要在条件语句中执行方法,以提高可读性(java里似乎经常这样做)
InputStream stream = File.open(fileName, "w");
if (stream != null) {

}
//避免
if (File.open(fileName, "w") != null)) {

}

3 代码缩进,应该使用4 个空格为一个单位进行缩进(如果用eclipse的话,直接选定需要缩进内容,按ctrl+shitf+F,注意先切换掉输入法)
public String invoke() throws Exception {
....String profileKey = "invoke: ";
try {
....UtilTimerStack.push(profileKey);
if (executed) {
....test = true;
}
catch{
}
}

4. 条件语句的主要形式,即使单条语句,也要使用括号括起来。(我似乎做到了)
if (condition) {
statements;
}


if (condition) {
statements;
} else {
statements;
}


if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}

5.空循环体也要使用完整的{}块
for (initialization; condition; update) {
;
}

6. try-catch 使用格式(个人觉得第二种挺重要的)
try {
statements;
}
catch (Exception exception) {
statements;
}


try {
statements;
}
catch (Exception exception) {
statements;
}
finally {
statements;
}

7. 空格的使用 (这个值得注意)
1. 运算符两边应该各有一个空格。
2. Java 保留字后面应跟随一个空格。
3. 逗号后面应跟随一个空格。
4. 冒号两个应各有一个空格。
5. 分号后面应跟随一个空格。

a = (b + c) * d; // NOT: a=(b+c)*d
while (true) { // NOT: while(true){ ...
doSomething(a, b, c, d); // NOT: doSomething(a,b,c,d);
case 100 : // NOT: case 100:
for (i = 0; i < 10; i++) { // NOT: for(i=0;i<10;i++){ ...

8. 空行的使用(我的理解是,尽量多用...)
1. 文件头部注释、package 语句和import 语句之间。
2. class 之间
3. 方法之间
4. 方法中,变量的申明和具体代码之间。
5. 逻辑上相关的语句段之间
6. 块注释和行注释的前面

9. 逻辑上紧密相关的代码块应该用一个空行分开。
// Create a new identity matrix
Matrix4x4 matrix = new Matrix4x4();

// Precompute angles for efficiency
double cosAngle = Math.cos(angle);
double sinAngle = Math.sin(angle);

// Specify matrix as a rotation transformation
matrix.setElement(1, 1, cosAngle);
matrix.setElement(1, 2, sinAngle);
matrix.setElement(2, 1, -sinAngle);
matrix.setElement(2, 2, cosAngle);
// Apply rotation

transformation.multiply(matrix);

10  为了保证可读性,变量名应该左对齐。
TextFile file;
int nPoints;
double x, y;
//避免
TextFile file;
int nPoints;
double x, y;

11  当对if 语句中的条件进行折行时,应该使折行的条件语句相对主功能
语句再行缩进4 个空格,以突出主要功能语句。(好像没注意过)

//使用这种缩进,突出主要功能语句。
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}

//避免使用这种缩进,主功能语句不突出。
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}

12 三元条件运算符
可以使用如下三种表达方式,条件要用括号括起来。
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma


二.  命名规范

先说两个术语:
Pascal case :所有单词第一个字母大写,其它字母小写。
 例:Person, OrderDetail, OilTank。
Camel  case :除了第一个单词,所有单词第一个字母大写,其他字
 母小写。
 例:oilLevel, customerName


1. 包名应该用小写字母,不要出现下划线等符号,名词用有意义的缩写或
者英文单词。
//推荐
com.esse.business
java.lang.util
//避免
com.Esse-tech.buSiness

2 所有类命名使用Pascal(单词首字母都大写)表示方式,使用名词组合。
UserManager, ClassLoader, HttpHeaderResult

3 接口命名使用字母“I”加上Pascal 形式的表示方式。
IQuery, IDataAccess,IReportBuilder

4. 使用名词组合或形容词去命名一个接口,接口声明了一个对象能提供的
服务,也描述了一个对象的能力。一般以“able”和“ible”作为后缀,
代表了一种能力。

public interface Runnable{
public void run();
}
public interface Accessible{
public Context getContext();
}

5 变量名和参数名使用Camel 表示方式。
userName, objectFactory, entrys, list

6 对于常量名,使用大写字母,并使用下划线做间隔。
MAX_TIMES, DEFAULT_NAME
程序中应该使用常量代替“25”,“100”等实际的数字,如:
//推荐
if(times == MAX_TIMES){

}
//避免
if(times == 25){

}
这样做的好处是,当因需要修改实际的数字时,比如修改25 为30,只需要
修改一处。

7 方法名应该使用动词开头,使用Camel 表示方式,一般由动词+名词组
成。

getName, initialize, addParameter, deleteUser

8 缩写字母也应该保持首字母大写
exportHtmlSource(); // 避免: exportHTMLSource();
openDvdPlayer(); // 避免: openDVDPlayer();

9 变量的名字应该和类型名称一致
void setTopic(Topic topic) // 避免: void setTopic(Topic value)
// 避免: void setTopic(Topic aTopic)
// 避免: void setTopic(Topic t)
void connect(Database database)
// 避免: void connect(Database db)
// 避免: void connect(Database oracleDB)

当同时定义多个属于同一个类的变量时,把类型作为实例的后缀,如:
Point startPoint;
Point centerPoint;
这样做是为了从实例名就可以推断它的类型名称

10 根据变量的作用范围,作用范围大的应该使用长名称,作用范围大,表
明变量的生命周期比较长,为了有助于理解,应尽量用长名称以表达变量的
真实意图。反之,对于作用范围小,可以使用一些简化的名称,比如i,j,
k 等,提高编程效率。
for(int i =0;i < times; i++){

}

11 使用get/set 对类属性进行访问,这是Java 社区的核心编码规范。(吾等谨记)

12 使用is 前缀表示一个布尔变量和方法。
isUsed, isEmpty,isVisible,isFinished
有时也可以使用has,can,should:
boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;

13 对于对象集合, 变量名称应使用复数。
Collection<Point> points;
int[] values;

14 对于抽象类,应该使用Abstract 前缀。 (貌似很多代码不是这样的么....)
AbstractReportBuilder,AbstractBeanFactory

15 对于表示编号的变量,应加No 后缀。(好像我都用的idx..)
tableNo, userNo,employeeNo

16 避免使用否定布尔变量(不然要想半天是什么意思了...)
bool isError; // 避免: isNoError
bool isFound; // 避免: isNotFound

17 对于单例类(Singleton),应该使用getInstance 方法得到单例。
class UnitManager {
private final static UnitManager instance = new UnitManager();
private UnitManager() {
...
}
public static UnitManager getInstance(){
return instance_;
}
}

18 对于工厂类,进行创建对象的方法,应该使用new 前缀
class PointFactory {
public Point newPoint(...) {
...
}
}

三. 注释规范

1. 使用行末注释对深层嵌套代码进行注释
for(i…){
for(j…){
while(…){
if(…){
switch(…){

}// end switch
}//end if
}//end while
}//end for i
}//end for j



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值