-
控制语句
- 在if/else/for/while/do语句中必须使用大括号;
- 表达异常的分支时,少用if-else方式处理分支(容易出现错漏、也不便于代码的阅读)
- 不要在其它表达式(尤其是条件表达式)中,插入赋值语句
- 不要在条件判断中执行其它复杂的语句,以提高可读性;
- 避免采用取反逻辑运算符(除一些特殊场景除外)
关于switch的使用建议
- 每个case要么通过continue/break/return等来终止
- 如果case中没有终止的控制,需要注释来说明程序将继续执行到哪个case为止
- 在switch块中,都必须有一个default语句并放在最后(防止意外情况)
- 使用switch前,最好先判断参数是否为空,避免造成NPE出现
三目运算(condition?表达式1:表达式2)
三目运算符高度注意类型对齐时,可能抛出因自动拆箱导致的NPE异常。拆箱操作情景:
1. 表达式1或表达式2的值只要有一个是原始类型
2. 表达式1或表达式2的值的类型不一致,会强制拆箱升级成表示范围更大的那个类型。在高并发场景中控制语句规约
避免使用“==”判断作为中断或退出的条件,容易产生等值判断被“击穿”的情况,应使用大于或小于的区间判断条件来代替
需要参数校验的场合
- 调用频次低的方法
- 执行时间开销很大的方法。此情形中,参数校验时间几乎可以忽略不计,但如果因为参数错误导致中间执行回退,或者错误,那就得不偿失。
- 需要极高稳定性和可用性的方法
- 对外提供的开放接口,不管是RPC/API/HTTP接口
- 敏感权限入口
- 公开接口需要进行入参保护,尤其是批量操作的接口
不需要参数校验的场合
- 极有可能被循环使用的方法(方法说明里必须注明外部参数检查)
- 底层调用频率比较高的方法
- 被声明为private
面向对象(OOP, Object-Oriented Programming)
OOP实践了软件工程的三个主要目标:可维护性、可重用性和可扩展性。
OOP的四大特征:
抽象:对需求进行业务抽象和建模分析,通过模型的行为组合去共同解决某一类问题
封装:一种对象功能内聚的表现形式,降低模块之间的耦合度
继承:使子类能够继承父类,获得父类的部分属性和行为,增强模块的复用性
多态:使模块在复用性基础上更加有扩展性OOP规约
- 所有的覆写方法必须加@Override注解(便于检查是否覆写成功)
- 可变参数
a. 相同参数类型,相同业务含义(执行匹配度最高的方法)
b. 避免使用object
c. 可变参数必须放置在参数列表的最后
d. 尽量不用可变参数 - 对象比较
a. 所有整型包装类对象之间值的比较,全部使用equals方法比较
b. 应使用常量或确定有值的对象来调用equals - 方法及属性中需要校验的场合:
a. 所有的POJO类属性必须使用包装数据类型
b.定义DO/DTO/VO等POJO类时,不要设定任何属性默认值
c.定义数据对象DO类时,属性类型要与数据库字段类型相匹配
d.getter/setter方法中,不要增加业务逻辑
e.禁止在POJO类中,同时存在对应属性xxx的isXxx()和getXxx()方法;
f. 构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请在init方法中进行
扩展
可变参数
定义: 适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
特点:- 只能出现在参数列表的最后;
- “...”位于变量类型和变量名之间,前后有无空格都可以;
- 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
Java开发避坑总结2
最新推荐文章于 2022-07-15 00:36:16 发布