Android基礎進階之EffectJava翻譯系列(第七章:通用原則)
本章主要討論語言的具體內容。它討論了局部變數的處理、控制結構、庫的使用、各種資料型別的使用,以及使用反射和本地方法。最後,討論了優化和命名約定
Item 45:最小化區域性變數作用域
作用域:一個花括號{}包裹起來的區域
此條例同Item13相似:最小化類和成員變數的訪問許可權
Java允許你在任何地方宣告變數,但是最重要的是在首次使用的地方宣告變數,並初始化
迴圈提供了一種實現此種方式的機制,而且for迴圈比while迴圈好,如
for (Element e : c) { doSomething(e); } //before JDK1.5 for (Iterator i = c.iterator(); i.hasNext(); ) { doSomething((Element) i.next()); }
為什麼for比while好呢?
//bad Iterator<Element> i = c.iterator(); while (i.hasNext()) { doSomething(i.next()); } ... Iterator<Element> i2 = c2.iterator(); while (i.hasNext()) { // BUG! 應該是i2 doSomethingElse(i2.next()); }
當我們寫一個差不多的程式碼,從一個地方copy過來的時候,很有可能忘記修改某個變數值(如i2),它不會在編譯期報錯,我們很可能長時間遺留這個bug
使用for迴圈可以避免這個bug
for (Iterator<Element> i = c.iterator(); i.hasNext(); ) { doSomething(i.next()); } ... // Compile-time error - cannot find symbol i for (Iterator<Element> i2 = c2.iterator(); i.hasNext(); ) { doSomething(i2.next()); }
這就是最小化作用域的好處