Java开发规范补缺

命名风格:

命名不能以下划线、美元符起止,(公司的项目在添加检查后会报错导致直接启动不了,强!大!)

类名使用UpperCamelCase风格,只有在DTO\VO\UID等情形中例外,例如:HtmlDTO、XmlVO(这里我平时可能会写HTMLDto这种的样式)

避免子父类的成员变量之间、同一个方法的不同代码块之间使用相同命名的变量,减少混淆

在命名变量时,表示类型的名词放在词尾,例如选择使用startTime,避免使用startedAt

pojo是vo、dto、do的总称,禁止命名为xxPojo

常量定义:

在使用long或者Long赋值时,避免使用l,使用L防止l和1的混淆

换行时,遵循运算符与下文一起换行、不要在括号前换行,方法内多个参数换行应在逗号后进行

不同语义、逻辑、业务等情况下,只需要插入一个回车分割即可

OOP规范:

所有覆写方法都需要使用@Override注解,防止覆盖失败

接口过时时使用@Deprecated表示废弃方法

尽量使用"constant".equals(object),因为object.equals("constant")容易抛出空指针异常

货币金额单位应以最小单位存储,避免使用浮点数。浮点数的引用类型不能使用equals判断相等

使用BigDecimal定义值,来进行浮点数的运行。但是注意定义的时候用string或者valueOf,直接使用BigDemical(double)依旧会导致精度缺失的问题

数据库中的类型对应:bigint对应Long

关于基本数据类型和引用数据类型:pojo中必须都使用引用数据类型,RPC的返回值和参数都要使用引用数据类型,推荐在局部变量中使用基本数据类型

定义pojo类时,不要设定默认值

pojo类中不要同时出现isXXX和getXXX,因为框架在调用提取时不能确定哪一个方法优先调用

日期时间:

日期格式化时,yyyy表示当前年;而YYYY表示当前周的所属年份,即当前周如果跨年,那么YYYY会属于下一年,因此推荐使用yyyy

日期格式化时,大写M表示月份,小写m表示分钟,24小时制为大H,12小时制为小h

集合处理:

使用isEmpty判空,而非size==0,因为前者性能更好。但是在实践中我发现还是应该用hutool中CollUtil的isEmpty,这个不但能判size=0,还能判null;此外string可以使用commons中的StringUtils的isBlank,这个可以判断null、""、"  "

在stream流中的toMap方法转为集合时,如果value为null会报NPE

使用map的entrySet等方法返回集合后,不能再在循环里添加对象

性能

正则表达式利用好预编译功能,不要在方法体内定义正则表达式

避免使用Apache的beanUtils中的copy,性能比较差

异常

事务场景中如果使用了try-catch,要记得手动回滚文件

不要在finally中使用return,try中的代码块执行结束后会执行finally中的代码,并且如果finally中有return会直接抛弃try中的return

使用optional防止NPE,例如链式调用a.getB().getC,易产生NPE(刚遇到过),这种情况应该用optional解决,例如

String safeValue = Optional.ofNullable(a)
                            .flatMap(A::getB)
                            .flatMap(B::getC)
                            .map(C::getValue)
                            .orElse("default")

生产环境不能使用system.out或system.errr/e.printStackTrace

打印日志尽量使用toString而非jsonToString,防止打印日志影响正确业务逻辑执行

数据库

MySQL的表名、字段名必须都用小写字母和数字,因为Windows下的MySQL是不区分大小写的,但是linux下的MySQL是区分大小写的

varchar长度不要超过5000,如果过了5000用text存储,并且用对应的主键单独另设一个表,避免降低其他索引的查询效率

业务上唯一特性的字段,即便是组合字段也必须建为唯一索引

页面搜索不要使用左模糊和全模糊,会导致索引失效

使用count()函数时,不要使用count(列名/常量名),这样会不统计括号内对应的列的值为null的数据

当某一列全为null时,count(col)为0,而sum(col)为null

使用count(distinct col1,col2)时,只有在两个字段都相同才会去重,但如果有一列为null该组合也会被忽略不计。该方法可以用子查询优化

select count(*) from (select distinct col1,col2 from table) as t;

null值与任何值比较的结果都是null,而非true/false,使用ISNULL来判断是否为NULL值

不得使用外键与级联:级联更新是强阻塞,容易引起数据库更新风暴,外键会影响数据库更新的性能

in操作尽量避免,若实在避免不了,则将in内的数据控制在1000内

posted @ 2025-08-05 23:58  天启A  阅读(8)  评论(0)    收藏  举报