本文参考整理自https://mp.weixin.qq.com/s/-u6ytFRp-ZAqdLBsMmuDMw

对于在本文中有所疑问的点可以去该文章查看详情

常量&变量

  • 直接赋值常量值, 禁止声明新对象,如Long i = new Long(1L);

  • 当成员变量值无需改变时, 尽量定义为静态常量

  • 尽量使用基本数据类型, 避免自动装箱和拆箱

  • 如果变量会被覆盖没必要赋初值

  • 尽量使用函数内基本类型临时变量

    • 函数内, 基本类型的参数和临时变量都保存在中, 访问速度较快. 对象类型的参数和临时变量和引用都保存在栈中, 而内容都保存在堆中, 访问速度较慢

    • 在类中, 任何类型的成员变量都保存在

  • 尽量不要在循环体外定义变量, 避免延长大对象生命周期导致延缓回收问题

  • 不可变的静态常量和成员变量, 尽量使用非线程安全类

对象&类

  • 禁止使用JSON转化对象, 应该手动包装来转化对象

    • 先转化为JSON字符串再转为对应对象可以实现转化对象, 但是性能上存在问题

  • 尽量不使用通过反射赋值对象, 会造成性能下降, 比如DTO取值赋值到VO

  • 匿名内部类采用Lambda表达式, 因为Lambda表达式在大多数虚拟机中采用invokeDynamic指令实现, 效率会比匿名内部类更高

  • 尽量避免定义不必要的子类,多一个类就需要多一份类加载

  • 尽量指定类和方法final修饰符

    • Java编译器会寻找机会内联所有的final, 具体参见Java运行期优化, 能够使性能平均提高50%

方法

  • 把和类成员变量无关的方法声明为静态方法

  • 尽量使用基本数据类型作为参数类型和返回值类型, 避免不必要的装箱拆箱和空指针判断

  • 协议编程, 协议方法参数值与返回值非空

  • 避免多余的判空处理

  • 避免不必要的函数封装, 方法调用引起的额入栈和出栈会导致更多的CPU和内存消耗, 不过为了代码的简洁和清晰, 增加一定的方法是值得的

  • 减少方法的重复调用

    •  for (int i = 0, userLength = userList.size(); i < userLength; i++) {
          ...
       }
  • 尽量避免不必要的方法调用, 其实就是避免出现 调用了一个方法并将结果赋值, 赋的值还未起到作用, 就被覆盖了 的情况发生

  • 尽量使用移位来代替正整数乘除

  • 提取公共表达式

  • 尽量少在条件表达式用 ! 取反

  • 当高于5个分支时, switch语句效率更高, 而非if else

字符串

  • 尽量不要使用正则表达式匹配

  • 尽量使用字符替换字符串, 因为字符长度固定为1, 查找和匹配的效率自然高

  • 使用StringBuilder进行字符串拼接

  • 使用String.valueOf来进行字符串转化

数组

  • 使用System.arraycopy进行拷贝数组

  • 集合转化为类型T数组时, 尽量传入空数组T[0]

  • 集合转化为Object数组时, 尽量使用toArray()方法而非toArray(new Object[0])

集合

  • 初始化集合时, 尽量指定大小, 减少扩容次数

  • 尽量使用addAll()来批量拷贝

  • 使用Arrays.adList()转化数组为列表

  • 直接迭代需要使用的集合

  • 不要用size()方法检测空, 用isEmpty方法检测, 因为某些size方法实现的时间复杂度可能是O(n)

  • 尽量使用迭代遍历来代替for循环里get()

  • 尽量使用HashSet判断值存在

  • 避免先判断存在再获取, 因为会造成二次查找, 直接获取然后判断是否为空

异常

  • 直接捕获各种异常, 而非instanceof

  • 避免在循环中捕获, 在循环体外捕获可以提高执行效率

  • 禁止使用异常控制业务流程, 比如 抛了异常就返回false

缓冲区

  • 尽量重复使用同一缓冲区

  • 使用缓冲流减少IO操作

线程

  • 单线程中, 尽量使用非线程安全类

  • 多线程中, 尽量使用线程安全类

  • 尽量减少同步代码块范围

  • 尽量合并为同一同步代码块

  • 尽量使用线程池来减少线程开销

Java编码技巧与代码优化的更多相关文章

  1. 代码优化:Java编码技巧之高效代码50例

    出处:  Java编码技巧之高效代码50例 1.常量&变量 1.1.直接赋值常量值,禁止声明新对象 直接赋值常量值,只是创建了一个对象引用,而这个对象引用指向常量值. 反例: Long i = ...

  2. 偏执却管用的10条Java编程技巧

    本文由 ImportNew - LynnShaw 翻译自 javacodegeeks.欢迎加入翻译小组.转载请见文末要求. 经过一段时间的编码(咦,我已经经历了将近20年的编程生涯,快乐的日子总是过得 ...

  3. Java 小技巧和在Java避免NullPonintException的最佳方法(翻译)

                前几天就g+里面看到有人引用这篇博文.看了一下.受益颇多. 所以翻译过来,希望和大家一起学习.本人英语水平有限,假设有错,请大家指正. 原文地址(须要翻墙):http://ja ...

  4. java编码过滤器

    1.java编码过滤器的作用: java过滤器能够对目标资源的请求和响应进行截取,过滤信息执行的优先级高于servlet. 2.java过滤器的使用: (1)编写一个普通的java类,实现Filter ...

  5. java中文乱码解决之道(四)-----java编码转换过程

    前面三篇博客侧重介绍字符.编码问题,通过这三篇博客各位博友对各种字符编码有了一个初步的了解,要了解java的中文问题这是必须要了解的.但是了解这些仅仅只是一个开始,以下博客将侧重介绍java乱码是如何 ...

  6. Java数组技巧攻略

      Java数组技巧攻略 0.  声明一个数组(Declare an array) String[] aArray = new String[5]; String[] bArray = {" ...

  7. 资料推荐--Google Java编码规范

    之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的 ...

  8. Java编码规范

    1. Java命名约定 除了以下几个特例之外,命名时应始终采用完整的英文描述符.此外,一般应采用小写字母,但类名.接口名以及任何非初始单词的第一个字母要大写.1.1 一般概念 n 尽量使用完整 ...

  9. 10个精妙的Java编码最佳实践

    这是一个比Josh Bloch的Effective Java规则更精妙的10条Java编码实践的列表.和Josh Bloch的列表容易学习并且关注日常情况相比,这个列表将包含涉及API/SPI设计中不 ...

随机推荐

  1. SQL server 表copy 到别一张表

    SQL server  表copy 到别一张表 ------------------ INSERT INTO  表名 (表字段)   SELECT  表1字段 FROM 表名2: ---------- ...

  2. 10个你不得不知的WEB移动端开发的兼容问题

    1.IOS下input设置type=button属性disabled设置true,会出现样式文字和背景异常问题,使用opacity=1来解决 2.一些情况下对非可点击元素如(label,span)监听 ...

  3. HDU 6582 Path

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  4. optistruct线性求解一次二次单元应力位移比较

    通过分析比较10mm.5mm.3mm.1mm的网格模型, 网格越细密: 位移与应力均趋于恒定值(收敛): 一次与二次单元的应力区域一致: 一次与二次单元的位移相差11.3%,一次单元的位移小. 所用的 ...

  5. centos6最小化安装默认没有 NetworkManager服务

    转载Centos6最小化安装中设置网卡默认启动   Centos 6.0版本提供了一个"最小化"(Minimal)安装的选项.这是一个非常好的改进,因为系统中再也不会存在那些不必要 ...

  6. mysql语句练习50题

    为了练习sql语句,在网上找了一些题,自己做了一遍,收益颇多.很多地方换一种思路,有更好的写法,欢迎指正. 题目地址:https://blog.csdn.net/fashion2014/article ...

  7. C printf格式化输出 的跨平台

    printf()在不同的系统上,占位符的可能有不同的写法,如: %ld:long int, 32位平台4 bytes %lld: long long int, 32位平台8 bytes 可以考虑使用  ...

  8. rtti读取和设置属性

    http://www.cnblogs.com/hnxxcxg/archive/2013/03/02/2940565.html rtti读取和设置属性   编辑器通过 Rtti 还能够调用一个类的方法, ...

  9. 005/搭建fabric环境(一)

    一.安装虚拟机VMware 参考博客:https://blog.csdn.net/u013142781/article/details/50529030 Step1:下载ubuntu镜像 (约1.8G ...

  10. SQL server 2008r2 file is corrupt

    下载的SQLManagement studio有问题,重新下载一遍后再安装就好了.安装顺序没问题. 在卸载SQL Server开始——运行:输入regedit 进入注册表编辑器,进入之后执行下列操作: ...