代码优化:不要将数组声明为public static final
摘要:因为这毫无意义,这样只是定义了引用为static final,数组的内容还是可以随意改变的,将数组声明为public更是一个安全漏洞,这意味着这个数组可以被外部类所改变。 但是我们可以把数组声明为final类型。 在使用final修饰基本类型变量的时候,不可以对基本类型变量重新赋值,所以的话,基本类
阅读全文
posted @
2022-02-22 14:03
周文豪
阅读(530)
推荐(0) 编辑
代码优化:String替换尽量少用正则表达式(replace()和replaceAll()的区别)
摘要:正则表达式虽然功能强大,但是其效率较低,除非是有需要,否则尽可能少用。 一、replaceAll()和replace()的相同点: 都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串; 二、replaceAll()和replace()的不同点: replaceAll() 支持正
阅读全文
posted @
2022-02-11 11:43
周文豪
阅读(2904)
推荐(0) 编辑
代码优化:防止空指针异常 NPE ,是程序员的基本修养,注意 NPE 产生的场景:
摘要:NPE产生的场景: 1 )、返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。 反例: public int f() { return Integer 对象}, 如果为 null ,自动解箱抛 NPE 。 2 )、数据库的查询结果可能为 null 。 User
阅读全文
posted @
2022-02-10 11:49
周文豪
阅读(506)
推荐(0) 编辑
代码优化:避免对日志消息进行字符串拼接
摘要:有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能。 性能浪费的日志案例(字符串拼接) 注:日志可以帮助我们快速的定位问题,记录程序运行过程中的情况,以便项目的监控和优化。 一种典型的场景就是对参数进行有条件使用,例如对日志
阅读全文
posted @
2022-02-09 12:13
周文豪
阅读(565)
推荐(0) 编辑
代码优化:尽量采用懒加载的策略,即在需要的时候才创建
摘要:只有在需要的时候才创建对象,如下的字符串对象。 String str = "aaa"; if (i == 1){ list.add(str); } //建议替换成 if (i == 1){ String str = "aaa"; list.add(str); }
阅读全文
posted @
2022-02-09 12:07
周文豪
阅读(44)
推荐(0) 编辑
代码优化:使用同步代码块替代同步方法
摘要:除非能确定一整个方法都是需要进行同步的,否则尽量使用同步代码块,避免对那些不需要进行同步的代码也进行了同步,影响了代码执行效率。 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间。这种情况下可以尝试使用syn
阅读全文
posted @
2022-02-06 22:24
周文豪
阅读(75)
推荐(0) 编辑
代码优化:当复制大量数据时,使用System.arraycopy()命令
摘要:注意:有两个前提,一个是数组赋值,一个是大量复制。 java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有: public static void arraycopy(Object src, int srcPos,
阅读全文
posted @
2022-01-24 15:44
周文豪
阅读(371)
推荐(0) 编辑
代码优化:使用Objects.equals(Object a,Object b)来进行对象的比较
摘要:一、建议 推荐使用JDK7中新引入的Objects工具类来进行对象的equals比较,直接a.equals(b),有空指针异常的风险 public final class Objects {/** * Returns {@code true} if the arguments are equal t
阅读全文
posted @
2022-01-20 09:28
周文豪
阅读(780)
推荐(0) 编辑
代码优化:尽量重用对象。StringBuilder/StringBuffer/+/StringJoiner
摘要:一、字符串拼接 重点注意:对象 特别是String对象的使用,出现字符串拼接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。 字符串的拼接
阅读全文
posted @
2022-01-17 22:06
周文豪
阅读(235)
推荐(0) 编辑
代码优化:使用Entry遍历Map
摘要:推荐,尤其是容量大时 Map<String,String> map = new HashMap<>(); for (Map.Entry<String,String> entry : map.entrySet()) { String key = entry.getKey(); String value
阅读全文
posted @
2022-01-16 21:23
周文豪
阅读(642)
推荐(0) 编辑
代码优化:日志的输出要注意级别
摘要:当前的日志级别是error LOGGER.info("保存出错!" + user); 应该改为: LOGGER.error("保存出错!" + user); 例1:日志级别为error public Result resetUserPwd(User user) { Result rs = new R
阅读全文
posted @
2022-01-16 11:20
周文豪
阅读(61)
推荐(0) 编辑
代码优化:对资源的close()建议分开操作和及时关闭流
摘要:一、对资源的close()建议分开操作 如下: try{ XXX.close(); YYY.close(); } catch (Exception e){ ... } 建议改为 try{ XXX.close(); } catch (Exception e){ ... } try{ YYY.close
阅读全文
posted @
2022-01-16 11:15
周文豪
阅读(98)
推荐(0) 编辑
代码优化:尽量减少对变量的重复计算
摘要:明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的。 所以例如下面的操作: for (int i = 0; i < list.size(); i++) {...} 建议替换为: int length = list.size(); for (int i = 0, i < length;
阅读全文
posted @
2022-01-12 17:44
周文豪
阅读(53)
推荐(0) 编辑
代码优化:尽可能使用局部变量
摘要:代码优化: 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快;其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。 另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 变量根据定义位置的不同,我们给变量起了不同的名字。如下图所示: 成员变量和局
阅读全文
posted @
2022-01-12 17:42
周文豪
阅读(141)
推荐(0) 编辑