Effective Java 读书笔记之七 通用程序设计

时间:2021-09-30 21:48:19

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

  1、在第一次使用变量的地方声明

  2、几乎每个变量的声明都应该包含一个初始化表达式:try-catch语句是一个例外

  3、使方法小而集中是一个好的策略

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

  1、for-each循环在简洁性和预防bug方面有着传统的for循环无法比拟的优势,而且没有性能损失。

  2、三种不能使用for-each循环的情况:

    a、过滤:需要显式的迭代器的remove方法

    b、转换:需要显式的迭代器或数组索引,以便设定值

    c、平行迭代:多个相关集合同步移动。

三、了解和使用类库

  1、使用类库就是站在了巨人的肩膀上

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

  1、float和double类型是为了快速计算而设计的,并不精确。尤其不能由于货币的计算,使用BigDecimal、int或者long代替。

  2、int可9位数字,long可18位数字,其他必须用BigDecimal类型。

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

  1、基本类型和装箱基本类型之间的三个主要区别:

    a、基本类型只有值

    b、基本类型只有功能完备的值,装箱类型还有非功能值:null。

    c、基本类型节省时间和空间。

  2、不能忽略基本类型和装箱类型的区别,特别是在面对各种运算符时。

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

  1、字符串不适合代替其他的值类型:读取输入后应尽快完成转换工作。

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

  3、字符串不适合代替能力表

七、当心字符串连接的性能

  1、由于String类的不可变性,连接操作符的效率不高。可使用StringBuilder类或字符数组。

八、通过接口引用对象

  1、优先使用接口而不是类来引用对象。

  2、没有接口可用的情况下,考虑抽象基类。

九、接口优先于反射机制

  1、反射机制的缺陷

    a、丧失了编译时类型检查的好处

    b、执行反射访问所需要的代码非常笨拙和冗长。

    c、性能损失

  2、一般只有类必须和编译时未知的类一起工作时才需要反射。只用来实例化对象,访问对象最好还是采用接口或者超类。

十、谨慎地使用本地方法

  1、本地方法的三个主要用途

    a、提供了“访问特定于平台的机制”的能力

    b、访问遗留代码库的能力

    c、提高系统性能

  2、随着Java平台的不断成熟,需要本地方法的地方越来越少了。

十一、谨慎地进行优化

  1、不要进行优化

  2、要努力编写结构好的程序而不是快的程序。

  3、依靠性能剖析工具来评估程序的性能,任何预测都是靠不住的。

十二、遵守普遍接受的命名惯例