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

本文介绍了Java编程中的一些常见问题及优化方案,包括代码优化、SQL查询改进、字符串拼接、日期格式化、流处理等方面的内容,并探讨了Spring事务管理的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于比较

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值