代码基本规范

一、代码格式

1.命名

  1. 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

  2. 所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

    说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。

  3. 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。

  4. 抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类 命名以它要测试的类的名称开始,以 Test 结尾。

  5. POJO 类中的任何布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列 化错误。

  6. 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数形式,但是类名如果有复数含义,类名可以使用复数形式。

  7. 避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名, 使可理解性降低。

  8. 杜绝完全不规范的缩写,避免望文不知义。

2.间隔

  1. 如果是大括号内为空,则简洁地写成{}即可,大括号中间无需换行和空格;如果是非 空代码块则:

    1) 左大括号前不换行。

    2) 左大括号后换行。

    3) 右大括号前换行。

    4) 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。

  2. 左小括号和右边相邻字符之间不出现空格;右小括号和左边相邻字符之间也不出现空格;而左大括号前需要加空格。

  3. if/for/while/switch/do 等保留字与括号之间都必须加空格。

  4. 任何二目、三目运算符的左右两边都需要加一个空格。说明:包括赋值运算符=、逻辑运算符&&、加减乘除符号等。

  5. 采用 4 个空格缩进,禁止使用 Tab 字符。

    说明:如果使用 Tab 缩进,必须设置 1 个 Tab 为 4 个空格。IDEA 设置 Tab 为 4 个空格时,请勿勾选 Use tab character;而在 Eclipse 中,必须勾选 insert spaces for tabs。

  6. 注释的双斜线与注释内容之间有且仅有一个空格。

  7. 在进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开。

  8. 单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:

    1)第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进,参考示例。

    2)运算符与下文一起换行。

    3)方法调用的点符号与下文一起换行。

    4)方法调用中的多个参数需要换行时,在逗号后进行。

    5)在括号前不要换行。

  9. 方法参数在定义和传入时,多个参数逗号后面必须加空格。

  10. IDEA 的 text file encoding 设置为 UTF-8; IDEA 中文件的换行符使用 Unix 格式,不要 使用 Windows 格式。

3.常量

  1. 不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。

  2. 在 long 或者 Long 赋值时,数值后使用大写字母 L,不能是小写字母 l,小写容易跟 数字混淆,造成误解。

  3. 常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。

    1)跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下。 
    2)应用内共享常量:放置在一方库中,通常是子模块中的 constant 目录下。 
        反例:易懂变量也要统一定义成应用内共享常量,两位工程师在两个类中分别定义了“YES”的变量: 
        类 A 中:public static final String YES = "yes"; 
        类 B 中:public static final String YES = "y"; 
        A.YES.equals(B.YES),预期是 true,但实际返回为 false,导致线上问题。
    3)子工程内部共享常量:即在当前子工程的 constant 目录下。 
    4) 包内共享常量:即在当前包下单独的 constant 目录下。 
    5) 类内共享常量:直接在类内部 private static final 定义。
    

二、数字

1.等值判断问题

BigDecimal 的等值比较应使用 compareTo()方法,而不是 equals()方法。

说明:equals()方法会比较值和精度(1.0 与 1.00 返回结果为 false),而 compareTo()则会忽略精度。

2.类型转换问题

禁止使用构造方法 BigDecimal(double)的方式把 double 值转化为 BigDecimal 对象。

说明:BigDecimal(double)存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。 
	如:BigDecimal g = new BigDecimal(0.1F); 实际的存储值为:0.10000000149
	优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法,此方法内部其实执行了 Double 的 toString,而 Double 的 toString 按 double 的实际能表达的精度对尾数进行了截断。 

三、日期时间

1.格式

日期格式化时,传入 pattern 中表示年份统一使用小写的 y。

说明:日期格式化时,yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year(JDK7 之后 引入的概念),意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的 YYYY 就是下一年。
表示日期和时间的格式如下所示: new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

**在日期格式中分清楚大写的 M 和小写的 m,大写的 H 和小写的 h 分别指代的意义。 **

说明:日期格式中的这两对字母表意如下: 
1) 表示月份是大写的 M; 
2) 表示分钟则是小写的 m; 
324 小时制的是大写的 H; 
412 小时制的则是小写的 h。

2.引用

不允许在程序任何地方中使用:1)java.sql.Date。 2)java.sql.Time。 3)java.sql.Timestamp。

说明:
第 1 个不记录时间,getHours()抛出异常;
第 2 个不记录日期,getYear()抛出异常;
第 3 个在构造 方法 super((time/1000)*1000),在 Timestamp 属性 fastTime 和 nanos 分别存储秒和纳秒信息。

四、集合

1.集合判空

判断所有集合内部的元素是否为空,使用 isEmpty()方法,而不是 size()==0 的方式。

说明:在某些集合中,前者的时间复杂度为 O(1),而且可读性更好。

在使用 Collection 接口任何实现类的 addAll()方法时,都要对输入的集合参数进行 NPE 判断。

说明:在 ArrayList#addAll 方法的第一行代码即 Object[] a = c.toArray(); 
其中 c 为输入集合参数,如果 为 null,则直接抛出异常。

集合非空判断,使用 CollectionUtil.isNotEmpty()方法

2.转换

使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法, 它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。

说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList 体现的是适配
器模式,只是转换接口,后台的数据仍是数组。
 String[] str = new String[] { "chen", "yang", "hao" };
 List list = Arrays.asList(str);
第一种情况:list.add("yangguanbao"); 运行时异常。
第二种情况:str[0] = "change"; 也会随之修改,反之亦然。

3.取集合中的一个对象

list.stream().____.findFirst().orElse(null);

五、MySQL数据库

1. null值处理

使用 ISNULL()来判断是否为 NULL 值。

说明:NULL 与任何值的直接比较都为 NULL。
1) NULL<>NULL 的返回结果是 NULL,而不是 false。
2NULL=NULL 的返回结果是 NULL,而不是 true。
3) NULL<>1 的返回结果是 NULL,而不是 true。

2. 配置

# 访问控制关闭
protected-mode no
# 指定端口号
port 26379
# 指定工作模式,是否守护线程
daemonize yes
# 指定哨兵监控master节点的配置
# Sentinel monitor <主节点别名> <主节点host> <主节点端口> <票数> ;后⾯面这个2是指几个哨兵发现master宕机了,才进⾏故障转移
sentinel monitor mymaster 192.168.5.44 6379 2

# 设置主机访问密码
sentinel auth-pass mymaster 123456

# 哨兵连接不上master就认为master宕机了的时间,单位是毫秒,默认30秒
sentinel down-after-milliseconds mymaster 3000

# 新的master出现后,其他follow的slave并⾏同步的个数,并⾏的越多同时阻塞的就越多,设置1来保证每次只有一个slave 处于不能处理命令请求的状态
sentinel parallel-syncs mymaster 1
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值