后缀inter的是一个接口比如LifeCycleInter
Event后缀表示某种事件
Adapter用来连接以前某种不被支付的类的对象
Job用来表示某种按时间执行的任务
Wrapper表示这是一个包装类,包装某些功能
返回类型是Boolean类型的,方法名一般使用is或has开头。示例:isConnected()
准确地控制成员方法的修饰符,不是必须使用public的,请使用protected,如果不是必须使用protected的,请使用private。
方法名不要超过18个字母,使用合适的简写
命名常用词汇:
initialize(初始化)、prepare(准备)、modity(修改)、calculate(计算)、do(执行某个过程或流程),dispatch(判断程序流程走向),receive(接收),respond(响应用户动作)
普遍认可的缩写:
temp 可缩写为 tmp ;
flag 可缩写为 flg ;
statistic 可缩写为 stat ;
increment 可缩写为 inc ;
message 可缩写为 msg ;
不太好理解的命名一定要在相应的地点标明注释
对于变量命名,禁止取单个字符(如i、j、k…),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的
正确使用相意词组
increment /decrement 、next /previous、source / target(来源目标)、put / get、send /receive
静态常量和枚举类型使用全大写加下划线的形式
当一句语句过长时,超过140个字符(eclipse标准),我们需要进行断行。
逗号的后面可断行
调用函数或者构造函数时需要断行时,与函数相连的左括号需要在一行也就是在做括号之后断行
当一个非赋值运算的语句断行时,在运算符号之前断行。
当一个赋值运算语句断行时,一般在赋值符号之后断行。但是也可以在之前断行。
左花括号前面有一个空格(所有保留的关键字与紧接它之后的位于同一行的左括号之间需要用空格隔开。(例如if、for、catch))
所有保留的关键字与在它之前的右花括号之间需要空格隔开。(例如else、catch)
注释单独占一行
二元三元运算符两边用一个空格隔开
a + b = c;
return a == b ? 1 : 0;
逗号语句后如不换行,紧跟一个空格
空行可以表达代码在语义上的分割,注释的作用范围
一组操作放在一起不用空行隔开,而用空行隔开不同组的代码
order = orderDao.findOrderById(id);
//update properties
order.setUserName(userName);
order.setPrice(456);
order.setStatus(PAID)
不同组的操作语句分离开,使注释的作用域很明显. 多行空格,分割意义更强
一行只能定义一个变量
需要使用时才声明变量,并尽快完成初始化(局部变量尽可能在声明的时候就进行初始化)
局部变量不应该习惯地在语句块开始的时候声明,应该在要使用的时候声明
switch的case后面的另起一行(加tab),每个标签对应的代码执行完后,都应该通过语句结束(例如:break、continue、return 或抛出异常),否则应该通过注释说明,代码需要继续向下执行下一个标签的代码
每个switch语句中,都要显式声明default标签。即使没有任何逻辑要处理也需要声明。
不用的代码应该直接删除而不是注释掉
较短的代码块用空行表示注释作用域
较长的代码块要用
/*----- start: [代码块功能]-----*/
代码
/*----- end: [代码块功能] -----*/
clean code:
尽量保持代码短小,但是死守80字符的上限有点僵化,不反对长度达到100个字符或是120个,但是再多的话,大概就规矩可言了(我的规矩最长120个字符)
相关性弱的才用空格隔开,比如2*3 + 3*4,乘法优先级高相关性强不用空格
在Junit测试的方法上加上@Ignore("msg")注解表示,这个方法希望这个方法被忽略,不被执行,如果加在类上,那么整个类的方法都不会被执行了
那怕你的常量只在当前类使用但是还是要加上static,否则sonal扫描会报提示,加static好处就是:在创建类的多个对象时,用static修饰的常量在内存中只有一份拷贝。不用static修饰则可能有多份拷贝。public static final String CONSTANT_A = "Hello";
异常不要用来做流程控制,条件控制。异常设计地初衷是解决运行中的各种意外情况,且异常的处理效率比条件判断方式要低很多
很多异常其实不需要产生并捕获的,尽量不要让异常抛出来,比如NullpointerException,IndexOutBoundsException等 正例:if(obj != null ) {} 反例:try{obj.method();} catch(NullPointException) {}
数据库相关的单元测试,可以设定自动回滚机制,不给数据库留下脏数据
事务不要滥用,事务会影响数据库的QPS,另外要设计回滚方案(处理补偿)
manager层(通用处理层)对接外部接口或第三方平台
分层异常处理规范:在dao层,产生的异常类型有很多,无法用细粒度的异常进行catch,使用catch(Exception e)方式,并throw new DAOException(e), 不需要打印日志,因为日志在Manager/service 层一定需要捕获并打印到日志文件中去
二方库群依赖使用同一版本号(${spring.version})
pojo里面的boolean类型变量,前都不要用is做为前缀,因为rpc框架解析会以为属性名字是success,从而找不到属性(idea默认的get,set方法生成也会是getsuccess),推荐使用基本数据类型来定义boolean形变量
SimpleDateFormat并不是一个线程安全的类,在多线程情况下,会出现异常