博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java代码优化-2(你真的会用这些吗)
阅读量:6278 次
发布时间:2019-06-22

本文共 1396 字,大约阅读时间需要 4 分钟。

hot3.png

关于比较

你是否代码里面还存在这样的代码

if( a!=null && a.equals(b) ){.............}

优化后

if(Objects.equals(a,b)){.......}

所实现的效果一样但是后者更优雅,它存在于java,util包下

关于Integer.parseInt();

如果传入参数的是'abc'会怎样,会抛出一个NumberFormatException

优化后

NumberUtils.toInt('abc',0)//表示如果不能转换则默认为0;
包位于org.apache.commons.lang3.math.NumberUtils;

关于sql函数

如果要查询指定日期的数据你是否会这样写sql

WHERE DATE(create_datetime) ='2017-12-04'

该条件最大的问题是等号的左边用了函数,所以导致该条sql不能用索引

优化后

WHERE create_datetime >= '2017-12-20' and create_datetime<'2017-12-21'

其中‘2017-12-20’ 等价于‘2017-12-20 00:00:00’

你真的会用StringBuild吗

大家都知道StringBuild拼接sql的时候性能比较好,但是我发现在实际工作环境大家用得并不好。

java代码优化-2(你真的会用这些吗)

在java中当我们出现字符串拼接用'+'时,实际上编译器会对‘+’做优化

编译后用javap查看字节码文件指令

java代码优化-2(你真的会用这些吗)

这里,就必须要大体解释一下这个invokespecial是个什么东西。它的作用是调用实例初始化方法,私有方法,父类的方法。

实际编译后的代码为

java代码优化-2(你真的会用这些吗)

所以如果用了StringBuild就不要在append方法里面用‘+’

优化后:

java代码优化-2(你真的会用这些吗)

关于SimpleDateFormate

工作中我发现很多人对线程安全理解得不够深致使不能很好的使用他

java代码优化-2(你真的会用这些吗)

由于SimpleDateFormate是线程不安全的所以不能把它声明全局的变量或者常量。

推荐时间和日期的处理使用joda

java代码优化-2(你真的会用这些吗)

关于流的关闭

java代码优化-2(你真的会用这些吗)

这段代码能正确的关闭流吗?No

我们查看下ByteArratOutputStream的close方法发现它的实现为空

java代码优化-2(你真的会用这些吗)

所以上面直接ByteArratOutputStream的close方法是不能关闭流的,而ByteArratOutputStream是不需要关闭的。

所以正确的做法是

java代码优化-2(你真的会用这些吗)

或者java7以后

java代码优化-2(你真的会用这些吗)

关于执行本地系统程序

java代码优化-2(你真的会用这些吗)

这段代码很简单,调用系统的一个程序,将html转换为pdf

这段代码潜在的问题在于,在访问量多的时候会出现性能问题,甚至会成为整个操作系统的瓶颈,原因在于java执行本地程序是创建一个操作系统进程(不是线程),也就是说调用一次操作系统里面会创建一个进程,这对java或者操作系统来说是很耗资源的操作,所以在工作中应当避免调用本地的应用程序。

关于spring事务回滚

spring默认回滚异常未RuntimeException,如果再service中出现了非RuntimeException,例如

java代码优化-2(你真的会用这些吗)

那么当出现FileNotFundException时异常该事务不会回滚。

所以正确的做法是指定回滚的类型为Exception:

java代码优化-2(你真的会用这些吗)

转载于:https://my.oschina.net/chengzz/blog/1593800

你可能感兴趣的文章
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
Spring配置文件(2)配置方式
查看>>