Java代码优化是Java编程开发很重要的一个步骤,Java代码优化要注重细节优化,一个两个的细节的优化,产生的效果不大,但是如果处处都能注意代码优化,对代码减少体积、提高代码运行效率是有巨大帮助的,还能在一定程度上避免未知错误,常用的Java代码优化细节如下:

1. 为类、方法指定final修饰符

为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写,如果指定了一个类为final,则该类所有的方法都是final的,Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,能够使性能平均提高50%。

2. 尽量重用对象

由于Java虚拟机不仅要花时间生成对象,还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。

3. 尽可能使用局部变量

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快,其他变量都在堆中创建,速度较慢,且栈中创建的变量,随着方法的运行结束,内容就没了,不要额外的垃圾回收。

4. 及时关闭流

Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源,因为对这些大对象的操作会造成系统大的开销,稍有不慎,将会导致严重的后果。

5. 尽量减少对变量的重复计算

在方法调用中,即使方法只有一句语句,也是有消耗的,因此,在进行方法调用时尽可以减少对变量的重复定义和引用。

6. 尽量采用懒加载的策略,即在需要的时候才创建

7. 慎用异常

异常对性能不利,因为只要有异常被抛出,Java虚拟机就必须调整调用堆栈,异常只能用于错误处理,不应该用来控制程序流程。

8. 不要在循环中使用try…catch…,应该把其放在最外层

9. 如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度

10. 当复制大量数据时,使用System.arraycopy()命令

11. 乘法和除法使用移位操作

用移位操作可以极大地提高性能,因为在计算机底层,对位的操作是最方便、最快的。

12. 循环内不要不断创建对象引用

13. 基于效率和类型检查的考虑,应该尽可能使用array,无法确定数组大小时才使用ArrayList。

14.

尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销

15. 不要将数组声明为public static final

因为这毫无意义,这样只是定义了引用为static

final,数组的内容还是可以随意改变的,将数组声明为public更是一个安全漏洞,这意味着这个数组可以被外部类所改变。

16. 尽量在合适的场合使用单例

在控制资源的使用、控制实例的产生以及控制数据的共享的场合下,可以使用单例以减轻加载的负担、缩短加载的时间以及提高加载的效率等。

17. 尽量避免随意使用静态变量

18. 及时清除不再需要的会话

19. 实现RandomAccess接口的集合比如ArrayList,应当使用最普通的for循环而不是foreach循环来遍历

20. 使用同步代码块替代同步方法

除非能确定一整个方法都需要进行同步,否则尽量使用同步代码块,避免对那些不需要进行同步的代码也进行了同步,影响代码执行效率。

21. 将常量声明为static final,并以大写命名

22. 不要创建一些不使用的对象,不要导入一些不使用的类

23. 程序运行过程中避免使用反射

反射具有强大的功能,但效率不高,不建议在程序运行过程中频繁使用反射机制,如果确实需要使用,建议将那些需要通过反射加载的类和项目启动的时候通过反射实例化一个对象并放入内存

24. 使用数据库连接池和线程池

这两个池都是用于重用对象的,前者可以避免频繁地打开和关闭连接,后者可以避免频繁地创建和销毁线程。

25. 使用带缓冲的输入输出流进行IO操作

26. 顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList

27. 不要让public方法中有太多的形参

28. 字符串变量和字符串常量equals的时候将字符串常量写在前面

29. 在java中if (i == 1)和if (1 == i)是没有区别的,但从阅读习惯上讲,建议使用前者

30. 不要对数组使用toString()方法

31. 不要对超出范围的基本数据类型做向下强制转型

32. 公用的集合类中不使用的数据一定要及时remove掉

33. 把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+”"最慢

34. 使用最有效率的方式去遍历Map

35. 对资源的close()建议分开操作

36. 对于ThreadLocal使用前或者使用后一定要先remove

37. 切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符串常量是否使用常量定义可以视情况而定

38. long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字1混淆,这个点非常细节,值得注意

39. 所有重写的方法必须保留@Override注解

40. 推荐使用JDK7中新引入的Objects工具类来进行对象的equals比较,直接a.equals(b),有空指针异常的风险

41. 循环体内不要使用”+”进行字符串拼接,而直接使用StringBuilder不断append

42. 不捕获Java类库中定义的继承自RuntimeException的运行时异常类

43. 避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed

导致的性能下降,JDK7之后,可以使用ThreadLocalRandom来获取随机数

44. 静态类、单例类、工厂类将它们的构造函数置为private

以上是常用的Java代码优化方法,在Java代码书写的时候要养成代码优化的习惯,就能够写出体积小、运行效率高、出错率低的代码!

java一般方法有哪些方法有哪些方法_Java代码优化有哪些方法?相关推荐

  1. java length 使用方法 例题_java.util.BitSet.length()方法实例

    java.util.BitSet.length()方法返回此BitSet的"逻辑大小":在BitSet中最高设置位加一的索引.如果BitSet中没有包含的位,返回0. 声明 以下是 ...

  2. java web配置dll文件_JavaWeb项目中dll文件动态加载方法解析(详细步骤)

    相信很多做Java的朋友都有过用Java调用JNI实现调用C或C++方法的经历,那么Java Web中又如何实现DLL/SO文件的动态加载方法呢.今天就给大家带来一篇JAVA Web项目中DLL/SO ...

  3. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式

    一.继承的概念及用法       继承背后的思想就是        基于已存在的类来构建新类         当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...

  4. java过滤4字节_乐字节Java8核心特性实战之四:方法引用

    Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法. 方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的 ...

  5. java支持接口吗_java – 支持专用接口方法

    此支持允许接口的非抽象方法在它们之间共享代码.私有方法可以是静态的或实例的. 接口的私有方法可以是抽象的还是默认的? 我可以问一个例子,"私有静态接口方法"在代码方面是否有用? 解 ...

  6. java中断线程_Java中断线程的方法

    使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回.这 ...

  7. java 数组排序论文_Java 7是否对方法Arrays.Sort使用Tim Sort?

    是! ...也没有 摘要 在当前的Open JDK 0实现中,Tim Sort通常用于对对象数组(即byte和好友)进行排序-但是对于基本数组(byte方法的其余部分)使用了多种其他方法. 对于基元, ...

  8. java程序设计_JAVA基础程序设计之方法

    1 基本概念 Java 方法是语句的集合,它们在一起执行一个功能. l 方法是解决一类问题的步骤的有序组合 l 方法包含于类或对象中 l 方法在程序中被创建,在其他地方被引用 1.1 方法的定义 一般 ...

  9. java基础深入_java编程基础之方法深入

    大纲 方法入门 概述 前讲解的循环操作,可以解决的是代码重复的问题,但是此时的重复的代码必须是有规律的.那循环操作,能解决所有的代码重复吗?答案肯定是不行的,比如针对于某一种功能的重复操作,循环就无法 ...

最新文章

  1. pandas使用nlargest函数返回特定数据列中前N个最大值(搜寻最大的n个元素)、pandas使用nlargest函数返回特定数据列中前N个最大值所对应的数据行
  2. tts和字符集的关系--要求源和目的端的数据库字符集必须一样,国家字符集必须一样。...
  3. java国际化——日期和时间+排序
  4. Maven 操作手册
  5. JS、javascript计算两个时间差
  6. Flink 1.9报错:No implicits found for parameter evidence$2: TypeInformation[(String, String, String)]
  7. 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(二)
  8. linux 共享内存管理,什么是物理/虚拟/共享内存——Linux内存管理小结一
  9. WinRAR无广告版下载方式
  10. 不正确的c语言字符常量是,哪个是不正确的字符常量?
  11. MATLAB符号运算
  12. 新浪微博发布文章html,JS实现仿新浪微博发布内容为空时提示功能代码
  13. oracle bam教程,Oracle BAM原理简介
  14. iOS:苹果企业证书通过网页分发下载安装app
  15. 关于更改Python的默认工作路径
  16. 90% 都会的 ES6 简化代码技巧,你用过哪些?
  17. android连路由器 mtu,解决app无网络问题,将宽带路由器MTU从1500修改成1480
  18. 加入windows7 正版大家庭
  19. Java 基础笔记代码 流
  20. 使用Matlab+Simulink开发Cortex-M系列嵌入式处理器应用程序

热门文章

  1. 初探奥尔良(Orleans)
  2. .Net 内存对象分析
  3. C#和NewSQL更配 —— CockroachDB入门
  4. .NET Core开源组件:后台任务利器之Hangfire
  5. 使用VS Code从零开始开发调试.NET Core 1.1
  6. Git常用命令与基本操作
  7. 利用Python随机或暴力生成密码
  8. [转]阿里编程规范(精简版)
  9. 【CC精品教程】任务三:CC刺像控点,提交空三,新建重建项目(三维格网、三维点云、DOM和DSM)
  10. C#趣味程序----分数之和