svn理解与编码规范(自己整理)

**SVN:**可以看成是一个实现文件共享管理的软件,分为服务器端和客户端,文件可以保存到服务器端,个人也可以把服务器端的文件下载到本地查看,更新,修改,然后上传到服务器端,这样大家就可以看到最新版的文件。
一。命名风格
常规的话:包名,项目名全部小写。
类名采用驼峰命名,首字母大写。方法名(接口)和变量首字母小写,第二个英文开始大写。常量名全部大写,单词间用_隔开。
1.代码开始和结尾不能为下划线或美元符号。
(×)_name/Object$
2.抽象类命名以Abstract或Base开头,异常类以Exception结尾,测试类以Test结尾。
3.对于service类,内部的实现类用Impl的后缀与接口区别。
(√)CacheServiceImpl实现CacheService接口
4.如果模块,接口,类,方法使用了设计模式,在命名时体现出具体模式。
(√)public class OrderFactory
5.各层命名规约:
A)Service/DAO 层方法命名规约
1)获取对象的方法用 get 做前缀。
2)获取多个对象的方法用 list 做后缀。
3)获取统计值的方法用 count 做后缀。
4)插入的方法用 save/insert 做前缀。
5)删除的方法用 remove/delete 做前缀。
6)修改的方法用 update 做前缀。
B)领域模型命名规约
1)数据对象:xxxPO或直接xxx,xxx 即为数据表名。
2)展示对象:xxxVO,xxx 一般为网页名称。
3)POJO 是 PO/VO 等的统称,禁止命名成 xxxPOJO。
二、常量定义
1、long与Long初始赋值时,使用大写的L,小写容易和1混淆。
如Long a = 21;不确定是2l还是21
2.按功能归类常量
例子:缓存相关常量放在类CacheConsts下,系统配置相关常量放在类ConfigConsts下。
(三)代码格式
1.大括号的使用规定,大括号内为空,简介写成{},不用换行;如果非空,左大括号前不换行,后换行;右大括号前换行,后还要else等代码不换行,表示终止的右大括号必须换行。
2.小括号和字符之间不出现空格
(√)if(a == b)
3.任何二目、三目运算符的左右两边都需要加一个空格。
4.使用tab字符缩进对齐
eg:
public static void mian(String[] args){
String say = “hello”;
int flag = 0;
if (flag == 0) {System.out.println(“world”);
} else {
System.out.println(“OK”);
}
}
5.当行字符数限制不超过120个,超出需要换行。
正例:
StringBuffer sb = new StringBuffer();
// 超过 120 个字符的情况下,换行缩进,点号和方法名称一起换行
sb.append(“zi”).append(“xin”)…
.append(“huang”)…
.append(“huang”)…
.append(“huang”);
6.一个方法体内的行数不超过200行代码
7.方法参数在定义和传入时,多个参数逗号后边必须加空格。
eg:method(“a”, “b”, “c”);
四.OOP规约
1.直接通过类名访问此类的静态变量或静态方法。
2.所有的覆写方法,必须加@Override注解
3.尽量不用可变参数编程
4.不要使用过时的类或方法
5.Object的equals方法容易抛出空指针异常,应使用常量或确定有值的对象来调用equals。
(√)“test”.equals(object);
6.所有的相关类型的包装类对象之间值的比较,全部使用equals方法比较。
eg:Integer在-128至127范围的赋值,不会出错,超出范围出错。
7.定义pojo类时,不要设定任何属性默认值。
8.序列化类新增属性时,请不要修改 serialVersionUID 字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改 serialVersionUID 值。
说明:注意 serialVersionUID 不一致会抛出序列化运行时异常。
9.pojo类必须重写toString方法。如果继承了另一个pojo类,注意在前面加一个super.toString().
(√)重写后test.toString()输出的字符串“名称:xxx,年龄:xxx”.
10.使用String中的split方法得到的数组时,需要对最后一个分隔符后有无内容的检查,否则会有索引超出边界异常的风险。
11.字符串的连接方式,使用StringBuilder的append方法进行扩展。
(×)
String str = “start”;
for (int i = 0; i < 100; i++) {
str = str + “hello”;
}
17.final声明的类不允许继承(如String类)。final声明的方法不允许重写(如pojo类的setter方法)。final修饰的变量变成了常量,且只能赋值一次。
18.慎用clone方法拷贝对象
19.类成员与方法访问控制从严:
1)如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
2)工具类不允许有 public 或 default 构造方法。
3)类非 static 成员变量并且与子类共享,必须是 protected。
4)类非 static 成员变量并且仅在本类使用,必须是 private。
5)类 static 成员变量如果仅在本类使用,必须是 private。
6)若是 static 成员变量,必须考虑是否为 final。
7)类成员方法只供类内部调用,必须是 private。
8)类成员方法只对继承类公开,那么限制为 protected。
五.集合处理
1.关于hashcode和equals的处理,尊徐如下规则:
1)重写了equals方法,就必须重写hashCode方法。
2)因为set存储的是不重复的对象,依据hashcode和equals进行判断,所以Set存储的对象必须重写这两个方法。
3)如果自定义对象作为map的键,必须重写两个方法。
注:String内部重写了两个方法
4)使用集合转数组的方法,必须使用集合的toArray(T[] array),传入类型一致,大小为list.size().
eg:
//集合转数组
List list = new ArrayList(2);
list.add(“teshi”);
list.add(“活跃”);
String[] strList = new String[list.size()];
strList = list.toArray(strList);
for (String string : strList) {
System.out.println(string);
}
注:使用toArray的无参方法,返回值只能是Object[]类,若强转其他类型数组会出现ClassCastException错误。
2.不要在foreach循环里面进行remove/add操作。remove元素使用迭代器Iterator方式,如果并发操作,需要对Iterator对象加锁。
eg:
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (删除元素的条件) {
iterator.remove();
}
}
5.推荐使用entrySet方法遍历Map集合K-V,而不是keySet方式进行遍历。
说明:values()返回的是V值集合,是一个list集合对象;keySet返回的是K值集合,是一个set集合对象;entrySet返回的是k-v值组合集合。
6.高度注意Map集合K/V能不能存储null值的情况。
集合类 Key Value 说明
Hashtable 不允许为 null 不允许为 null 线程安全
ConcurrentHashMap 不允许为 null 不允许为 null 锁分段技术(JDK8:CAS)
TreeMap 不允许为 null 允许为 null 线程不安全
HashMap 允许为 null 允许为 null 线程不安全
7.合理利用好集合的有序性和稳定性
ArrayList是order/unsort,HashMap是unorder/unsort;TreeSet是order/sort
8利用set元素唯一的特性,可以快速对集合进行去重操作,避免使用List的contains方法进行遍历。对比和去重操作。
9.除常用方法(如getXxx/isXxx)等外,不要在条件判断中执行其他复杂的语句。
eg:
// 伪代码如下
final boolean existed = (file.open(fileName, “w”) != null) && (…) || (…);
if (existed) {

}
七、注释规约
1.类、类的属性和类方法的注释用Javadoc规范,使用/ ** 内容 * /格式,不能使用//xxx方式。
八、jsp规约
1.文件名采用大小写混合的方式,第一个单词的首字母小写,其后单词首字母大写2.文件编码使用utf-8格式。
<%@ page language=“java” import="jaa.util." pageEncoding=“utf-8”%>
3.页面不要写css与js的内容,只能是引用文件的形式。
九。
1.在代码中写分页查询逻辑时,若count为0应直接返回,避免执行后面的分页语句。
2.获取当前毫秒数:System.currentTimeMillis();而不是new Date.getTime();
3.对于暂时被注释掉的代码片段,在注释代码上方,使用三个斜杠来说明注释掉的理由。
十、异常规约
1、定义时区分unchecked/checked异常,避免直接抛出new RuntimeException().
注:runtimeException是未检查异常。
十一。安全规约
1.隶属于用户个人的页面或者功能必须进行权限控制权限校验。
2.根据业务场景,用户敏感数据禁止直接展示。
eg:用户手机号码显示时隐藏中间四位。
3.5.表单、AJAX 提交必须执行 CSRF 安全过滤。(待议)
说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在
CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户不知情情况下对数据库中用户参数进行相应修改。
十二。数据库
(一)建表规约
1,所有的业务表和和表字段都要加上中文注释。
2.禁用数据库保留字
3.住家索引名为pk_字段名,唯一索引名为uk_字段名;普通索引名为idx_字段名。
4.小数类型使用Number,禁止使用float和double
5.表必备三字段:ID,CREATEDATE,LASTUPDATE
6.单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。
(二)SQL语句
1.不要使用count(列名)
来统计数量
2.当某一列的值全是null时,count(col)的返回结果为0,但sum(col)
的返回结果为null,因此使用sum()时需要注意NPE问题。
3.使用ISNULL()来判断是否为Null值。null与任何值的直接比较都为null
4.in操作能避免就避免,若不能限制在1000个之内。
(三)ORM(对象关系)映射
1.在表查询时,一律不要使用
作为查询的字段列表。
2.sql.xml配置参数时使用:#{,不要使用${}防止SQL注入
3.更新数据库记录时,必须同时更新记录对应的LASTUPDATE字段值为当前时间。

猜你喜欢

转载自blog.csdn.net/weixin_41047492/article/details/84256364