这一段很多比较简单,简单罗列一下,部分重要的做了解释
三十一、如果要求精确的答案,尽量避免使用float 和double,
这个可以参照我的一片文章
货币尤其不合适。可以使用BigDecimal代替
三十二、如果其它类型更适合,尽量避免使用字符串
1,字符串不能替代其它的值类型
2,字符串不适合代替枚举类型
3,字符串不适合代替聚集类型
4,字符串也不是和代替能力表
因为有些时候,使用字符串会大大降低性能
三十三、了解字符串连接的性能
说明:使用StringBuffer代替 +来连接字符串
三十四、通过接口来引用对象,这能让你的程序更加灵活
三十五、接口优先于反射。
使用反射会带来很多问题,例如:
1,不能编译期发现错误
2,代码混乱
3,调试困难
4,性能损失。
除非必须,否则不使用反射
三十六、谨慎的使用本地方法JNI
三十七、谨慎的进行优化,有三条优化格言:
1,很多计算上的过失都被归咎于效率原因(没有获得必要的效率),而不是其它的原因--甚至包括盲目的作傻事. ---William A.Wulf [Wulf72]
2,不要去计较一些小的效率上的得失,在97%的情况下,不成熟的优化是一切问题的根源。
------Donald E.Knuth[Knuth74]
3,在优化方面要遵守两个原则:
规则一:不要做优化
规则二:还是不要做优化--也就是说,在你还没有绝对清晰的未优化方案前,请不要优化。
-----M.A.Jackson[Jackson75]
每次试图做优化之前和之后请对性能进行测试
三十八:遵守普遍接受的命名规则
三十九:值针对不正常的条件才使用异常,也就是说不要在正常的情况下使用异常来控制流程,活着解决某些已知的问题。因为会大量的损失性能
四十、对于可恢复的条件使用被检查的异常,对于程序错误使用运行时异常
详细:Java提供了三种可抛出结构,checked Exception, run-time exception , error
什么时候使用什么很容易让人混淆,下边是一个简单的区分原则
1,如果期望调用者能够恢复,那么对于这样的条件应该使用被检查异常
2,你所实现的所有未检查的抛出结构都是run time exception ,而不是Error
四十一:避免不必要的使用被检查异常
四十二:尽可能的使用标准异常,例如IllegalArgumentException ,NullPointerException ,IndexOutOfBoundsException等等
四十三:抛出异常要适合于相应的抽象。
高层实现应该捕获异常,同时抛出一个可以按照高层抽象解释的异常(业务逻辑上符合高层逻辑),这种做法叫做异常转译
四十四:每个方法抛出的异常都应改有文档
四十五:在细节消息中包含失败-捕获信息
详细:在异常字符串中应包含有用的信息,例如IndexOutOfBoundsException异常的细节消息应该包括下界、上界以及没有落在其中的实际下标