【重拾Effective Java】二

  • 将局部变量的作用域最小化
    要使得局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明,这样可以避免代码混乱。
    过早的声明局部变量不仅使得它的作用域过早的扩展,而且也造成结束过于晚了。局部变量的作用域从它被声明的点开始扩展,一直到外围块(block)的结束处。
    几乎每个局部变量的声明都应该包含一个初始化表达式。
  • for-each循环优先于传统的for循环
    for-each循环通过完全隐藏迭代器或者索引变量,避免了混乱,而且这样的做法也更加高效。for-each循环在简洁性和预防bug方面有着传统for循环无法比拟的优势,并且性能更好,应尽可能少使用传统的for循环。
    不过也有几种情况下无法使用for-each,如下三种:
  • 过滤,如果需要遍历集合,并删除选定的元素,就需要显示的迭代器了,以便做删除操作。
  • 转换,如果需要遍历列表或者数组,并取代它部分或者全部元素值,就需要迭代器或者数组索引,以便设定元素的值。
  • 平行迭代,如果需要并行的遍历多个集合,就需要显式的控制迭代器或者索引变量。
  • 如果需要精确的答案,少使用float和double
    这两种类型数据主要用于科学计算,它们执行的是二进制浮点运算。
    如下:
    1.03-0.42=0.6100000000000001

  • 基本类型优于装箱基本类型
    基本类型只有值,而装箱基本类型则具有与它们的值不同的同一性。也就是说,两个装箱基本类型可以具有相同的值和不同的同一性。
    基本类型只有功能完备的值,而每个装箱基本类型除了它对基本类型的所有功能之外,还有个非功能值:null.
    基本类型通常比装箱基本类型更节省时间和空间。

  • 尽可能少使用字符串
    字符串不适合代替枚举类型
    字符串不适合代替聚集类型
    字符串不适合代替能力表
    在字符串连接方面,常用“+”,但在数据过大时,尽量避免使用,应当推荐使用:
    StringBuilder b;
    b.append(所连接的内容);

  • 在接口能代替类的时候,尽量选择使用接口
    如果有合适的接口存在,那么对于参数,返回值,常量和域来说,就都应该使用接口类型进行声明。创建一个对象往往是极其消耗内存和时间的。

你可能感兴趣的:(java)