一 代码原则
通过所有测试(Passes its tests):强调的是外部需求,这是代码实现最重要的
尽可能消除重复 (Minimizes duplication):代码的模块架构设计,保证代码的正交性,保证代码更容易修改
尽可能清晰表达 (Maximizes clarity):代码的可阅读性,保证代码是容易阅读的
更少代码元素 (Has fewer elements):保证代码是简洁的,在简洁和表达力之间,我们更看重表达
二 命名规范
项目名:全部采用小写方式, 单词之间以中划线分隔。如my-first-job
包名: 使用小写字母,多个单词使用点分隔,如com.example.myproject
类名: 使用驼峰命名法,每个单词首字母大写,如MyClass
方法名: 使用驼峰命名法,首字母小写,第二个单词开始首字母大写,如myDemo
变量名: 使用驼峰命名法,首字母小写,第二个单词开始首字母大写,如totalCount
常量名: 使用大写字母和下划线,如MAX_SIZE.
三 方法参数规范
每个方法的参数数量不超过3个,超出三个参数要封装成javabean对象。
四 注释规范
在书写代码时,应养成添加注释的习惯,便于我们或他人快速阅读、理解代码。但是注释数量不应过多(例如每行代码都添加一条注释),数量过多反而会造成反面效果。从理论上来讲,对于程序中的每个变量、每个方法都应添加对应的注释,方法作用尽量使用方法名表示,注释中应具有返回值、用途、算法实现逻辑等信息。使用注释时,原则上注释应单独成行,尽量不要使用行内注释,以Javadoc形式的注释为佳。
/*** This is a Javadoc comment.*/
public class MyClass {/*** Calculates the total.* @param a The first operand.* @param b The second operand.* @return The total.*/public int calculateTotal(int a, int b) {// code here}
五 代码目录结构
目录结构应统一、符合约定,不要随意按照自己的喜好修改包名或类名。符合特定条件的类应放在对应的包下,例如,src为根目录,存放所有核心源码;common存放一些通用的类库,config存根配置信息,moudel为各个业务模块等。
我们常用的mvc模式分层为controller、service、manger、dao层。controller 负责协同和委派业务,充当路由的角色,方法内要求不做任何关于业务逻辑的操作,不做任何数据相关的操作,如组合、拼接、赋值等操作。service层负责处理业务逻辑,manger层是对第三方平台封装的层,预处理返回结果及转化异常信息;dao层禁止直接在 mybatis xml 中写死常量,应从 dao 中传入到 xml 中,同时建议不要使用星号 *
代替所有字段,方法命名尽量以sql语义命名,避免与业务关联。
六 其他
基本数据类型尽量使用其包装类型(如int--Integer);
类中布尔类型的变量不要使用isXXX命名(如isFlag,isDelete),否则部分框架解析会引起序列化错误;
左花括号不另起一行,右花括号另起一行;
if (condition) {// code here
} else {// code here
}
运算符前后加上空格,使表达式更清晰;
int result = a + b;
导包名确导入需要的类,不要使用通配符*;
import java.util.List;
import java.util.ArrayList;
异常处理不要捕捉所有异常,应该具体捕捉可能发生的异常;
try {// code that may throw an exception
} catch (SpecificException ex) {// handle specific exception
} catch (AnotherException ex) {// handle another specific exception
} finally {// code to be executed regardless of whether an exception is thrown
}
避免在循环中使用String
拼接,尤其是在大量数据的情况下,使用StringBuilder
来提高性能。
// 不推荐
String result = "";
for (String str : listOfStrings) {result += str;
}// 推荐
StringBuilder result = new StringBuilder();
for (String str : listOfStrings) {result.append(str);
}