一、代码效率方面
1、循环体中String对像使用“+”操作符的拼接现象需要规避,根据不同场景可以使用StringBuffer/StringBuilder/String.format()等;
2、HashMap循环时,如果需要使用key和value,要使用 entrySet()进行遍历;
3、Collection 循环遍历使用到Contains时,Set 的效率要高于List;
4、Collection.isEmpty()效率高于 Collection.size()==0 ;
5、try catch 块在for循环体内,效率低;
6、IO资源未释放,占用内存,效率低。
二、try-catch放在for循环内外的区别
-
异常处理后的循环行为
- 外层try-catch(覆盖整个循环):
- 若循环内某次迭代抛出异常,循环会立即终止,后续迭代不再执行,异常被统一捕获处理。
- 适用场景:需统一处理异常且允许循环中断的场景(如批量操作中任一失败即整体终止)。
- 内层try-catch(每次迭代单独捕获):
- 即使某次迭代出现异常,循环仍会继续执行后续迭代,适合需要保障循环完整性的场景(如处理多个独立任务时部分失败不影响整体)。
- 外层try-catch(覆盖整个循环):
-
性能差异
- 外层try-catch:性能略优,因异常处理代码仅执行一次,减少重复开销。
- 内层try-catch:每次迭代均涉及异常处理,可能增加性能损耗,尤其在循环次数极多时。
- 若无异常触发,两者性能差异可忽略。
-
代码结构与可读性
- 外层try-catch:代码更简洁,异常处理集中,但可能掩盖具体错误位置。
- 内层try-catch:异常定位更精准(可记录具体迭代信息),但代码冗余性较高。
建议场景
- 选择外层:当异常需统一处理,且单次失败可中断整个流程时(如事务性操作)。
- 选择内层:当需保障循环完整性,或异常需针对性处理(如日志记录具体失败项)时。
三、编码规范方面:
1、无效的类引用、变量引用;
2、关键的逻辑注释不够清晰:
1)新增方法在添加注释时,把方法的增加人、时间、实现的功能、参数的意义等关键信息进行说明;
2)修改原有的代码逻辑时,也要明确人员、修改原因等关键信息,尽量注释原逻辑,再增加新逻辑。
3、代码结构及格式化,每个方法不要写的太长,保持方法的独立性、原子性,方便代码的复用及复杂逻辑调整;
4、方法中返回 null ,如果在引用的地方未做空值检查,将可能会出现空指针,尽量在返回时不要直接 “return null ”;
5、SQL语句尽量使用预编译的写法,避免SQL注入;
6、硬编码问题,密码、Ip地址等;
7、循环体内创建对象,效率低下。