美文网首页Android开发AndroidAndroid技术知识
Android基础进阶之EffectJava翻译系列(第七章:通

Android基础进阶之EffectJava翻译系列(第七章:通

作者: 青楼爱小生 | 来源:发表于2019-01-29 19:19 被阅读5次

    本章主要讨论语言的具体内容。它讨论了局部变量的处理、控制结构、库的使用、各种数据类型的使用,以及使用反射和本地方法。最后,讨论了优化和命名约定

    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());
    }
    

    这就是最小化作用域的好处

    Item 46: Prefer for-each loops to traditional for loops
    Item 47: Know and use the libraries
    Item 48: Avoid float and double if exact answers are required
    Item 49: Prefer primitive types to boxed primitives
    Item 50: Avoid strings where other types are more appropriate
    Item 51: Beware the performance of string concatenation
    Item 52: Refer to objects by their interfaces
    Item 53: Prefer interfaces to reflection
    Item 54: Use native methods judiciously
    Item 55: Optimize judiciously
    Item 56: Adhere to generally accepted naming conventions

    相关文章

      网友评论

        本文标题:Android基础进阶之EffectJava翻译系列(第七章:通

        本文链接:https://www.haomeiwen.com/subject/ijffsqtx.html