• EffectiveJava-1


    最近在看EffectiveJava,记录一下,分享一下自己的心得。

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

    1. 在第一次使用的地方进行声明,过早的声明局部变量,会延长局部变量的生命周期,若在代码块外声明变量,当程序结束代码块后,该变量还是存在的,这并不是我们想要的结果(应该代码块结束后变量销毁)
    2. 当具有足够的信息进行初始化时再进行声明(try-catch代码块除外),当变量的值必须在try块的外部用到,它就必须在try块之前被声明。
    3. 若在循环终止之后不再需要循环变量的内容,能使用for循环就使用for循环,尽量不用while循环。for循环结束后,其局部变量全部销毁,while循环结束后,其变量可能还会存在;for循环比while循环更简洁;for循环中出现错误,程序不会通过编译,while循环中出现错误会在运行时报错。

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

    1. for-each循环不用关心容器的类型。
    2. for-each循环完全隐藏了迭代器或者索引变量,避免了混乱和出错的可能。
    3. for-each循环不仅能遍历集合和数组,还可以遍历实现Iterable接口的任何对象。
    4. 三种情况下无法使用for-each循环
      1. 解构过滤,遍历集合过程中需要删除指定的元素。
      2. 转换,若需要遍历列表或数组,并取代它的部分或者全部元素值,需要列表迭代器或者数组索引,便于设定元素的值
      3. 平行迭代,如果需要并行地遍历多个集合,就要显式的控制迭代器或者索引变量。

    平行迭代的例子:

    enum Num{ONE,TWO,THREE,FOUR,FIVE,SIX}
    ...
    Cllection<Num> nums= EnumSet.allOf(Num.class);
    for (Iterator<Num> i = nums.iterator();i.hasNext();)
            for(Iterator<Num> j = nums.iterator();j.hasNext();)
                    System.out.println(i.next()+" "+j.next());
        

    输出结果为:

    ONE ONE
    TWO TWO
    THREE THREE
    FOUR FOUR
    FIVE FIVE
    SIX SIX

    此处需要注意:如此循环并不会输出6*6个结果,并且若外层遍历的容器中元素个数少于内层遍历的容器中元素个数,则会抛出NoSuchElementException异常。

    参考:《Effective java》P219~P224

  • 相关阅读:
    Linux I2C设备驱动编写(一)
    Device Tree常用方法解析
    Linux查看CPU型号及内存频率及其它信息的命令
    编译错误error: invalid storage class
    Mysql技术内幕——表&索引算法和锁
    mysql 锁
    MySQL 索引方式
    通过show status 来优化MySQL数据库
    linux shell 字符串操作(长度,查找,替换)详解
    bash中将字符串split成数组的方法
  • 原文地址:https://www.cnblogs.com/MrZhaoyx/p/11681830.html
Copyright © 2020-2023  润新知