总结Java代码优化的方法
- 尽量少new对象,及时关流,慎用异常
- 将常量声明为 static final,并以大写命名
- 尽量重用对象尽可能使用局部变量
- 指定类、方法的 final 修饰符
- 循环内不要不断创建对象引用
- 乘法和除法使用移位操作
- 尽量在合适的场合使用单例
- 采用懒加载的策略,即在需要的时候才创建
- 使用同步代码块替代同步方法
- 尽量避免随意使用静态变量
- 及时清除不再需要的会话
- 不要将数组声明为 public static final
- 建议使用if(i == 1),不使用if(1 ==i)的形式
- 程序运行过程中避免使用反射
- 不要让 public 方法中有太多的形参
- 当复制大量数据时,使用 System.arraycopy() 命令
- 使用数据库连接池和线程池
- 使用带缓冲的输入输出流进行 IO 操作
- 使用最有效率的方式去遍历 Map
- 对资源的 close() 建议分开操作
- 所有重写的方法必须保留 @Override 注解
- 不要在循环中使用 try-catch,应该把其放在最外层
- 字符串比较相等时,字符串放在前面,避免空指针异常
- 对于线程安全性没有要求的情况下,尽量使用线程不安全的类
- 对ThreadLocal 在线程池场景使用前或者使用后一定要先 remove
- 公用的集合类中不使用的数据一定要及时 remove 掉
- 静态类、单例类、工厂类将它们的构造函数置为 private
- 字符串拼接非常消耗系统资源,如果要用字符串拼接,使用StringBuffer而不用String+
- 基于效率和类型检查的考虑,应该尽可能使用 array,无法确定数组大小时才使用 ArrayList
- 尽量使用 HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用 Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致性能开销
- 字符串变量和字符串常量 equals 的时候将字符串常量写在前面,避免空指针异常
- 循环体内不要使用 “+” 进行字符串拼接,而直接使用 StringBuilder 不断 append
- 不捕获 Java 类库中定义的继承自 RuntimeException 的运行时异常类(因为静态类、单例类、工厂类这种类本来我们就不需要外部将它们 new 出来,将构造函数置为 private 之后,保证了这些类不会产生实例对象)
- 实现 RandomAccess 接口的集合(比如 ArrayList)使用 for循环而不用 foreach 循环
- 建议使用 JDK1.7 中新引入的 Objects 工具类来进行对象的 equals 比较,直接 a.equals(b) 有空指针异常的风险
- 不对超出范围的基本数据类型做向下强制转型(Long 转 Int类型 是会存在潜在风险)
- 常量定义的方式替代魔鬼数字(魔鬼数字的存在大大降低代码可读性)
- 顺序插入和随机访问比较多的场景使用 ArrayList,元素删除和中间插入比较多的场景使用 LinkedList