Java开发手册—嵩山版———内容提取

一、编程规约

(一)命名风格

1.禁止拼音、英文混合,杜绝单词缩写;

2.类名:大驼峰;方法名、参数名、成员变量、局部变量:小驼峰;包名统一小写

3.抽象类使用Abstract或Base开头;异常类以Exception结尾;测试类以Test结尾;

4.数组:类型与[]紧挨,int[];

5.POJO类中任何布尔类型的变量,都不要加is前缀;

6.避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名;

7.如果模块、接口、类、方法使用了设计模式,在命名是需体现具体模式,如OrderFactory;

8.接口中方法、属性不加修饰符;无变量,定义常量;

9.接口与实现类命名规则:①impl   

        ②如果是形容能力的接口:AbstractTranslator 实现  Translatable接口

10.枚举类名加上Enum,枚举成员名称需要全大写,单词间用下划线隔开(特殊常量,构造方法私有)

11.各层命名规约:

(1)Service/DAO方法命名:

        获取单个对象方法用get前缀;获取多个对象方法用list前缀,复数结尾;获取统计值count前缀;插入方法用save/insert前缀;删除用remove/delete前缀;修改用update前缀

(2)领域模型命名规约

        数据对象:xxxDO   xxx为数据表名

        数据传输对象:xxxDTO     xxx为业务领域相关名称

        展示对象:xxxVO     xxx一般为网页名

        POJO是DO/DTO/BO(业务对象)/VO的统称,禁止命名成 xxxPOJO

(二)常量定义

1.不允许出现魔法值:未经预先定义的常量;

2.long或Long类型赋值时后缀用L,小写易混淆;

3.常量存放: 

4.如果变量值仅在固定范围内变化,用enum类型定义;

(三)代码格式

1.右大括号后还有else等代码则不换行,表示终止的右大括号必须换行

2.保留字与括号加空格,运算符前后加空格,4个空格缩进;

3.左小括号和右边相邻字符无空格,右小括号和左边相邻字符无空格;

4.强转时右括号右边不用空格

5.换行:运算符与下文一起换行;括号前不要换行;参数换行在逗号后;

6.多个参数逗号后加空格;

(四)OOP规约

1.直接类名调用静态资源

2.覆写的方法加@Override

3.接口过时必须加@Deprecated注解,说明新接口或新服务是什么

4.Object的equals方法容易抛空指针异常,Integer类型对象用equals方法比较;

5.任何货币金额均以最小货币单位且整型类型来存储

6.浮点数的判断:基本类型不能用==,包装类型不能用equals;可指定误差范围(

绝对值:Math.abs(x) ),或用BigDecimal定义值并用compareTo()比较;

7.定义数据对象DO类时,属性类型与字段类型匹配,数据库bigint对应类Long类型

8.double转BigDecimal的两种方式:

        1.BigDecimal.valueOf(double数据)

        2.new BigDecimal( String.valueOf(double数据) )

9.POJO类属性、RPC方法的返回值和参数必须使用包装类型;局部变量使用基本类型;

10.定义POJO类是不要设定任何默认值

11.禁止在POJO类中,同时存在对应属性的isXxx()和getXxx()方法;

12.使用索引访问使用String的split分割得到的数组时,须佐最后一个分隔符后有无内容的检查,否则会抛IndexOutOfBoundsException的风险

13.类内方法定义顺序:公有方法或保护方法>私有方法>getter/setter

14.循环体内字符串拼接用StringBuilder的append方法

(五)日期时间

1.日期格式化时,年份使用小写y,yyyy表示当天所在的年,YYYY表示当天所在的周属于的年份,周日开始周六结束,只要本周跨年,返回的就是下一年

2.M表示鱼粉,m表示分钟,H表示24小时制,h表示12小时制

        表示日期和时间的格式如下所示:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

3.获取当前毫秒数:System.currentTimeMillis();在JDK8中,针对统计时间等场景,推荐使用Instant类

4.获取今年的天数:LocalDate.now().lengthOfYear();

   获取指定某年(2011)的天数:LocalDate.of(2011.1.1).lengthOfYear();

5.使用枚举值来指代月份。如果使用数字,注意Date,Calendar等日期相关类的月份取值在0-11间

(六)集合处理

1.如果自定义对象作为Map的键,那么必须重写hashCode和equals

2.判断所有集合内部的元素是否为空,使用isEmpty()

3.java.util.stream.collectors中的toMap()是将聚合元素重新组装为Map结构,toConcurrentMap()返回ConcurrentMap(线程安全的Map结构),要使用有参数类型为BinaryOperator,参数名为margeFunction的方法,否则当出现相同的key时会怕抛出IllegalStateException,当value为null时会抛出NPE异常

4.ArraryList的subList结果不可强转成ArraryList,否则会抛出ClassCastException(类型间转换不兼容)

5.使用Map的方法keySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出UnsupportedOperationException异常

6.Collections类返回的对象,如:emptyList()/singletonList()等都是immutable(不可改变) list,不可对其进行添加或者删除元素的操作,会抛出UnsupportedOperationException异常

7.在subList场景中,高度注意对父集合元素的增加或删除,会导致子列表的遍历、增加、删除产生ConcurrentModificationException异常(并发修改异常)

8.集合转数组:必须使用集合的toArray(T[] array),传入的时类型完全一致、长度为0的空数组;若直接使用toArray无参方法,返回值时Object[],若强转会出现ClassCastException;          使用:String[] array = list.toArray(new String[0]);

9.在使用addAll()方法时,对输入的集合参数进行NPE(NullPointException)判断;

10.使用工具类Arrays.asList()把数组转换成集合,不能使用其修改集合相关的方法,会抛出UnsupportedOperationException异常。asList()的返回对象是一个Arrays内部类,并没有实现集合的修改方法;

11.不要在foreach循环里进行元素的remove/add操作,要使用Iterator方式;

(七)并发处理

1.线程资源必须通过线程池提供,线程池不允许使用Exexutors创建,通过ThreadPoolExecutor创建;

2.JDK8中,Instant代替Date ,    LocalDateTime代替Calendar,      DateTimeFormatter代替SimpleDateFormate;

3.锁。。。

(八)控制语句

1.switch语句变量类型为String类型时进行null值判断

2.在高并发场景中,避免使用”等于”判断作为终端或瑞出条件,容易产生“击穿”情况

(九)注释规约

(十)前后端规约

1.请求方法:get:获取资源   post:新建资源  put:更新资源   delete:删除资源

2.前后端的时间格式统一为“yyyy-MM-dd HH:mm:ss”

(十一)其他

二、MySQL数据库

(一)建表规约

1.表名、字段名必须使用小写字母或数字,禁止数字开头,禁止两个下划线中间只出现数字

2.主键索引名为pk_字段名,唯一索引为uk_字段名,普通索引为idx_字段名

3.小数类型为decimal

4.varchar可变长字符串,航都不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应。

5.表必备三字段:id ,create_time,update_time 

(二)索引规约

(三)SQL语句

1.不要使用count(列名)替代count(*),统计行数的标准语法,与null值无关

2.使用isNull()来判断是否为null值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值