effective java--通用程序设计

在effective java中,有一章是讨论Java语言的具体细节,局部变量处理、控制结构、类库的用法、各种数据类型的用法、反射机制、本地方法、优化和命名惯例。

这里简单的描述归纳一下:

1、局部变量的作用域最小化    可以减低出错率,,增强代码可读性和维护性    方法就是在第一次使用它的地方声明(初始化的时候才申明),但是try-catch有可能特殊点,有时候需要到try里面初始化,但是申明在外面(因为后面可能会用到)。for循环就是可以把局部遍历最小化了。

2、for-each循环代替传统for循环    for-each循环把迭代器和索引变量隐藏起来,避免混乱和出错的可能性。for-each循环对数组索引的边界值只计算一次,性能比起普通循环可能有些优势  ,而且简洁 ps:ide还可能帮你一键生成    

        但是有三种情况无法使用for-each循环  1、过滤--需要遍历集合,过滤特殊元素时候用不了   2、转化--遍历集合或数组,取出元素的值转化的时候用不了  3、需要并行地遍历多个集合,必须用显示迭代器或索引变量

3、了解类和使用类库,特别是Collections Framework(集合框架) 、java.util.concurrent(处理并发)    ps:现在都出到java9了,还没去看有什么新的工具类

4、需要精确答案时候避免使用float和double     可以考虑bigDecimal,它允许你完全控制舍入,缺点是不方便且慢。或者你可以考虑用int或者long,根据值大小选取,自己处理小数位(就是扩大到多少位计算)

5、基本类型优于集装箱基本类型基本类型和集装箱类型有三个主要区别:a、基本类型只有值,装箱类型值是引用类型,值相同都可以不一样 b、基本类型不能为null,而装箱类型可以   c、装箱类型操作起来比基本类型慢   

      装箱类型进行>、<比较的时候,而进行 ==比较时候是站在对象引用的角度,这样想用==来判断装箱类型大小是否相同的话基本是false,解决方法是用基本类型来记录装箱类型的大小,再来进行==的比较。还有个比较注意的是:没有初始化的装箱类型跟基本类型进行操作的时候,装箱基本类型会自动拆箱(null进行拆箱)就会爆出空异常

需要用到装箱基本类型时候有三点:a、作为集合中的元素、键和值的时候  b、在参数化类型中必须使用装箱基本类型为类型参数,如ThreadLocal<Integer>  c、在进行反射的方法调用时候

6、如果其他类型更适合,尽量避免使用字符串

7、当心字符串连接的性能 由于String类的容量是用final修饰的,所有对String进行拼接操作的时候,每次其实是new新对象,而StringBuilder和StringBuffer则不是。在进行大量的拼接操作的时候就应该考虑使用StringBuilder或StringBuffer,而StringBuilder是线程非安全,StringBuffer是线程安全的,但是StringBuilder速度又比StringBuffer快,看情况选择。参考:http://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html

8、通过接口引用对象这样需要转换实现的时候灵活一些

9、接口优先于反射机制编写的程序必须要与编译时为止的类一起工作,应该仅使用反射机制来实例化对象,而访问对象时则使用编译时已知的某个接口或者超类

这个还行学习中,网上看了些反射的知识:https://www.zhihu.com/question/24304289 还有http://blog.csdn.net/liujiahan629629/article/details/18013523

10、谨慎地使用本地方法

11、谨慎地进行优化 不应费力去编写快速的程序,而应该编写好的程序,速度自然会有。在设计系统(特别是设计API、线路层协议和永久数据格式)的时候,要考虑性能因数。系统构建完成之后,再测量性能,如果性能不达标,则用性能剖析器找出问题的根源,然后设法优化系统中相关部分。第一个步骤是检查所选择的算法:底层再多优化也无法弥补算法的选择不当。必要时重复这个过程,在每次改变之后都测量性能直到满意为止。

12、遵守普通接受的命名惯例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值