Effective Java-通用程序设计

将局部变量的作用域最小化

  • 要使局部变量最小化,最有力的方法就是在第一次使用它的地方声明

  • 几乎每个局部变量的声明都应该包含一个初始化表达式

  • for循环优先于while循环

for-each循环优先于传统的for循环

for-each 循环可以遍历集合,数组,实现Iterable接口的对象

了解和使用类库

  • 不要重新发明轮子

  • java.lang , java.util, java.io

如果需要精确的答案,请避免使用float和double

  • float和double尤其不适合用于货币计算

  • 使用BidDecimal、int或者long进行货币计算

基本类型优先于基本装箱类型

  • 对装箱基本类型运用==操作符几乎总是错误的

  • 混合使用基本类型和装箱基本类型,就会自动拆箱。如果null对象拆箱,就会得到一个NullPointerException异常。

  • 大的for循环中使用装箱基本类型,会导致大量的装箱拆箱,性能下降

  • 集合中的元素、键、值应该使用装箱类型

  • 在参数化类型中,必须使用装箱类型

  • 反射的方法调用,必须使用装箱类型

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

  • 字符串不适合代替其他的值类型

  • 字符串不适合代替枚举类型

  • 字符串也不适合代替能力表

当心字符串连接的性能

  • 不要使用字符串连接操作符(+)合并多个字符串(大数组或者for循环),除非性能无关紧要。

  • 为了获得可以接受的性能,请使用StringBuilder替代String

通过接口引用对象

  • 如果有合适的接口类型存在,那么对于参数、返回值、变量和域来说,就都应该使用接口类型进行声明。

  • 如果没有合适的接口存在,可以用类来引用对象

接口优先于反射机制

  • 核心反射机制,提供了通过程序访问关于已装载的类的信息。反射的代价:
  1. 丧失了编译时类型检查的好处。

  2. 执行反射所需要的代码非常笨拙和冗长。

  3. 性能损失。

  • 通常,普通应用程序在运行时不应该以反射方式访问对象

谨慎地使用本地方法

  • JNI允许Java应用程序可以调用本地方法。

  • 使用本地方法来提供性能的做法不值得提倡。

谨慎地进行优化

  • 优化的弊大于利,特别是不成熟的优化。

  • 不要因为性能而牺牲合理的结构。要努力编写好的程序而不是快的程序。

  • 努力避免那些限制性能的设计决策

  • 要考虑API设计决策的性能后果

  • 为获得好的性能而对API进行包装,这是一种非常不好的想法。

  • 在每次视图做优化之前和之后,要对性能进行测试。

  • 不要费力去编写快速的程序,应该努力编写好的程序,速度自然会随之而来。在设计系统的时候,特别是在设计API、线路层协议和永久数据格式的时候,一定要考虑性能的因素。

遵守普遍接受的命名惯例

  • 类型参数:T表示任意类型,E表示集合的元素类型,K和V表示映射的键和值类型,X表示异常。序列可以是T、U、V

猜你喜欢

转载自blog.csdn.net/weixin_33858485/article/details/86941008
今日推荐