好记忆不如烂笔头,能够记录点什么,就赶紧记录点 , 方便知识的积累 !
1. 使用"=="判断两个字符串相等;
在判断两个字符串的时候,不要使用"=="判断两个字符串相等.
2. 在foreach中改变list的结构;
不能在foreach中去remove/add list的结构;
3. 凌乱打印日志的规范性;
日志是定位问题时最重要的依据,业务流程中缺少必要的日志会给定位问题带来很多麻烦,甚至可能造成问题完全无法定位。
异常产生后,必须在日志中以ERROR或以上级别记录异常栈,否则会导致异常栈丢失,无法确认异常产生的位置。并不需要在每次捕获异常时都记录异常日志,这样可能导致异常被多次重复记录,影响问题的定位。但异常发生后其异常栈必须至少被记录一次。和注释一样,日志也不是越多越好。无用的冗余日志不但不能帮助定位问题,还会干扰问题的定位。而错误的日志更是会误导问题,必须杜绝。
4. 代码中使用魔鬼数字;
在代码中使用魔鬼数字(没有具体含义的数字、字符串等)将会导致代码难以理解,应该将数字定义为名称有意义的常量。
将数字定义为常量的最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是魔鬼数字了。如果常量的名称没有意义,无法帮助理解代码,同样是一种魔鬼数字。
在个别特殊情况下,将数字定义为常量反而会导致代码更难以理解,此时就不应该强求将数字定义为常量
5. 空指针异常为处理;
空指针异常是编码过程中最常见的异常,在使用一个对象的时候,如果对象可能为空,并且使用次对象可能会造成空指针异常,那么需要先判断对象是否为空,再使用这个对象。
在进行常量和变量的相等判断时,建议将常量定义为Java对象封装类型(如将int类型的常量定义为Integer类型),这样在比较时可以将常量放在左边,调用equals方法进行比较,可以省去不必要的判空。
6. 数据的下标越界;
访问数组、List等容器内的元素时,必须首先检查下标是否越界,杜绝下标越界异常的发生
7. 字符串转数字异常;
调用Java方法将字符串转换为数字时,如果字符串的格式非***抛出运行时异常NumberFormatException
8. 资源释放操作;
在使用文件、IO流、数据库连接等不会自动释放的资源时,应该在使用完毕后马上将其关闭。关闭资源的代码应该在try...catch...finally的finally内执行,否则可能造成资源无法释放。
9. 循环体的性能考量;
在循环体内重复使用且不会变化的资源(如变量、文件对象、数据库连接等),应该在循环体开始前构造并初始化,避免在循环体内重复和构造初始化造成CPU资源的浪费。
除非业务场景需要,避免在循环体内构造try...catch块,因为每次进入、退出try...catch块都会消耗一定的CPU资源,将try...catch块放在循环体之外可以节省大量的执行时间。
10. 数据重载的toString()方法;
数据类如果没有重载toString()方法,在记录日志的时候会无法记录数据对象的属性值,给定位问题带来困难。
11.不变资源使用static修饰或者启动系统时放入内存, 而不是在使用时候再去获取.
12. 系统配置文件,第一次加载完成之后,放入内存中,再次获取时候,在内存中去,不去读文件。
后期收集的时候,再会放入新的常见错误.