如何编写高效代码?这是每一个研发团队都面临的一个重大问题。《阿里Java高效代码50例》(实际54例)来源于实际经验,帮助咱们成为编写高效代码的软件工程师。
正则表达式
类别数组 |
要点安全 |
常量&变量多线程 |
直接赋值常量值,禁止声明新对象ide |
当成员变量值无需改变时,尽可能定义为静态常量函数 |
|
尽可能使用基本数据类型,避免自动装箱和拆箱ui |
|
若是变量的初值会被覆盖,就没有必要给变量赋初值spa |
|
尽可能使用函数内的基本类型临时变量线程 |
|
尽可能不要在循环体外定义变量设计 |
|
不可变的静态常量,尽可能使用非线程安全类 |
|
不可变的成员变量,尽可能使用非线程安全类 |
|
对象&类 |
禁止使用JSON转化对象 |
尽可能不使用反射赋值对象 |
|
采用Lambda表达式替换内部匿名类 |
|
尽可能避免定义没必要要的子类 |
|
尽可能指定类的final修饰符 |
|
方法 |
把跟类成员变量无关的方法声明成静态方法 |
尽可能使用基本数据类型做为方法参数类型,避免没必要要的装箱、拆箱和空指针判断 |
|
尽可能使用基本数据类型做为方法返回值类型,避免没必要要的装箱、拆箱和空指针判断 |
|
协议方法参数值非空,避免没必要要的空指针判断 |
|
协议方法返回值非空,避免没必要要的空指针判断 |
|
被调用方法已支持判空处理,调用方法无需再进行判空处理 |
|
尽可能避免没必要要的函数封装 |
|
尽可能指定方法的final修饰符 |
|
表达式 |
尽可能减小方法的重复调用 |
尽可能避免没必要要的方法调用 |
|
尽可能使用移位来代替正整数乘除 |
|
提取公共表达式,避免重复计算 |
|
尽可能不在条件表达式中用!取反 |
|
对于多常量选择分支,尽可能使用switch语句而不是if-else语句 |
|
字符串 |
尽可能不要使用正则表达式匹配 |
尽可能使用字符替换字符串 |
|
尽可能使用StringBuilder进行字符串拼接 |
|
不要使用""+转化字符串 |
|
数组 |
不要使用循环拷贝数组,尽可能使用System.arraycopy拷贝数组 |
集合转化为类型T数组时,尽可能传入空数组T[0] |
|
集合转化为Object数组时,尽可能使用toArray()方法 |
|
集合 |
初始化集合时,尽可能指定集合大小 |
不要使用循环拷贝集合,尽可能使用JDK提供的方法拷贝集合 |
|
尽可能使用Arrays.asList转化数组为列表 |
|
直接迭代须要使用的集合 |
|
不要使用size方法检测空,必须使用isEmpty方法检测空 |
|
非随机访问的List,尽可能使用迭代代替随机访问 |
|
尽可能使用HashSet判断值存在 |
|
避免先判断存在再进行获取 |
|
异常 |
直接捕获对应的异常 |
尽可能避免在循环中捕获异常 |
|
禁止使用异常控制业务流程 |
|
缓冲区 |
初始化时尽可能指定缓冲区大小 |
尽可能重复使用同一缓冲区 |
|
尽可能设计使用同一缓冲区 |
|
尽可能使用缓冲流减小IO操做 |
|
线程 |
在单线程中,尽可能使用非线程安全类 |
在多线程中,尽可能使用线程安全类 |
|
尽可能减小同步代码块范围 |
|
尽可能合并为同一同步代码块 |
|
尽可能使用线程池减小线程开销 |
示例代码,详见原文:http://www.javashuo.com/article/p-zlvqawyo-bm.html