常用插件
阿里编码规范
阿里编码规范,即p3c开发规范:https://github.com/alibaba/p3c
安装阿里巴巴规范插件,会实时扫描代码,在右上角显示代码质量,一般要改到右上角的图标是绿色的√。也可以手动扫描,在控制台查看结果,可在根据提示直接在控制台进行修改。
Statistic 统计代码整体情况,可以查看注释率
重启IDEA生效,在控制台会有对应的栏目。
注释率只统计了单独注释,不会统计到和代码在同一行的注释。
注释原则
- 注释要突出主要的业务流程
- 核心方法必须提供注释
- 条件判断、分支操作上尽量提供注释说明
if过多的问题
- 尽量少使用嵌套的if…else
- 尽量用if代替if…else,在if中可以用return、throw之类中断方法执行,减少分支数量,提高可读性
- 单个if…else可以换为三目运算符?:
- 如果是多个等值判断,可以使用switch或者策略模式代替
- 多重判空可以使用Optional
避免出现空指针异常
1、使用对象之前进行初始化,或者使用时注意需不需要检查对象、对象的成员字段是否为null
- xxx.equals(),参数可以为null,但调用方不能为null,否则会发生NPE,尽量把确定的不为null的作为调用方。
- User[ ] arr = new User[10]; 只是创建了一个数组,但没有显式初始化数组元素,数组元素会初始化为该类型的默认初始值,比如int是0、引用类型是null,注意String的默认初始值是null,不是空串。
2、自动拆箱实质是调用包装类的xxxValue()方法,比如Integer的intValue(),如果包装类为null,自动拆箱会发生NPE
- 将包装类型的变量赋给基本类型的变量时,需要注意拆箱时是否可能发生NPE;
- 能使用基本类型就使用基本类型,更加高效且能避免NPE。
3、jdk自带的一些方法可能出现NPE,使用时需要注意
HashMap<String, Object> map = new HashMap<>();
map.put(null, "");
//NPE
map.putAll(null);
ArrayList<String> list = new ArrayList<>();
list.add(null);
//NPE
list.addAll(null);
HashSet<String> set = new HashSet<>();
set.add(null);
//NPE
set.addAll(null);
- map的key可以为null,但添加整个Map中的全部键值对时,map不能为null。
- list、set添加单个元素时,元素可以为null;但添加整个单例集合中的全部元素时,单例集合不能为null,原因时addAll()添加单例集合时会访问单例集合的成员。
4、方法尽量避免返回null,如果要返回null,需要在文档注释中写明,以提醒使用者。