EffectiveJava-1

最近在看EffectiveJava,記錄一下,分享一下本身的心得。java

1、將局部變量的做用於最小化數組

  1. 在第一次使用的地方進行聲明,過早的聲明局部變量,會延長局部變量的生命週期,若在代碼塊外聲明變量,當程序結束代碼塊後,該變量仍是存在的,這並非咱們想要的結果(應該代碼塊結束後變量銷燬)
  2. 當具備足夠的信息進行初始化時再進行聲明(try-catch代碼塊除外),當變量的值必須在try塊的外部用到,它就必須在try塊以前被聲明。
  3. 若在循環終止以後再也不須要循環變量的內容,能使用for循環就使用for循環,儘可能不用while循環。for循環結束後,其局部變量所有銷燬,while循環結束後,其變量可能還會存在;for循環比while循環更簡潔;for循環中出現錯誤,程序不會經過編譯,while循環中出現錯誤會在運行時報錯。

2、for-each循環優於傳統的for循環spa

  1. for-each循環不用關心容器的類型。
  2. for-each循環徹底隱藏了迭代器或者索引變量,避免了混亂和出錯的可能。
  3. for-each循環不只能遍歷集合和數組,還能夠遍歷實現Iterable接口的任何對象。
  4. 三種狀況下沒法使用for-each循環
    1. 解構過濾,遍歷集合過程當中須要刪除指定的元素。
    2. 轉換,若須要遍歷列表或數組,並取代它的部分或者所有元素值,須要列表迭代器或者數組索引,便於設定元素的值
    3. 平行迭代,若是須要並行地遍歷多個集合,就要顯式的控制迭代器或者索引變量。

平行迭代的例子:code

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異常。blog

參考:《Effective java》P219~P224索引

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息