zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    一键登录功能实现
    weblogic.xml中的虚拟目录的配置
    oracle定时器在项目中的应用
    redis主从架构的搭建
    oracle数据库中的trim不起作用
    datetimepicker日期框选择后,无法触发bootstrapValidator
    付出总有收获
    失落
    开启产品之路
    Nodejs入门级
  • 原文地址:https://www.cnblogs.com/MrZhaoyx/p/11681830.html
Copyright © 2011-2022 走看看