• 《Effective Java 2nd》第8章 通用程序设计


    目录

    第45条 将局部变量的作用域最小化

    for循环优先于while循环

    第46条 for-each循环优先于传统的for循环

    for-each循环会隐藏迭代器或者索引变量,可避免出错。

    无法使用for-each的情况:

    1)过滤。遍历集合时,需要删除指定的元素。需要Iterator的remove方法。

    2)转换。遍历集合时,替代部分值。

    3)平行迭代。同时遍历多个集合。比如同时遍历集合A、B,依次比较各个元素。

    第47条 了解和使用类库

    每个程序员都应该熟悉java.lang、java.tuil,某些java.io包中的内容。

    同时,CollectionFramework和java.util.concurrent包也应该熟悉。

    第48条 如果需要精确的答案,避免使用float和double

    使用BigDecimal。

    第49条 基本类型优先于装箱基本类型

    基本类型优先于装箱基本类型,如果使用装箱基本类型时,要特别小心。

    基本类型和装箱基本类型之间的区别:

    1)基本类型只有值,而装箱基本类型具有与值不同的同一性(指引用)

    基本类型==比较是比较值。

    装箱基本类型==比较的是引用,equals才是比较的值。

    (对装箱基本类型使用==基本都是错误的,这点非常重要,因为比较的是引用!)

    2)基本类型只有功能值,而装备基本类型有非功能值:null

    3)基本类型通常比装箱基本类型更省时间。

    当操作中混合使用基本类型和装箱基本类型时,装箱基本类型会进行自动拆箱。

    如果为null,拆箱时将抛出NullPointerException。

    什么使用应该使用装箱基本类型

    1)作为集合中的元素、键值等

    2)反射方法调用

    第50条 如果其他类型更适合,尽量避免使用字符串

    第51条 当心字符串连接的性能

    不要使用“+”进行多个字符串的拼接。

    1)使用“+”

    为连接n个字符串而重复地使用字符串连接操作符,需要n的平方级(n^2)的时间。

    由于String的不可变,当两个字符串拼接时,它们的内容都要被拷贝。

    2)使用StringBuilder

    为连接n个字符串而重复地使用字符串连接操作符,时间复杂度为O(n)

    第52条 通过接口引用对象

    如何有合适的接口,应该使用接口声明。

    好处是:程序会更加灵活。

    举例:List<XXX> list = new ArrayList<XXX>();如果list频繁增加删除数据,直接将ArrayList改为LinkedList就可以。

    不存在合适的接口时,可以用类来引用对象。

    1)值类,因值类很少用多个实现编写,通常是final的。如String、BigInteger。

    2)对象属于某个框架,框架的基本类型是类,而不是接口。这种情况,应该用基类来引用对象,而不是实现类。如java.util.TimerTask

    3)类实现了接口,但是提供了接口中不存在的额外方法。如LinkedhashMap。且程序依赖于这些额外方法,则只能使用这个类来引用。

    第53条 接口优先于反射机制

    本条标题并不能正确反映所将的内容。

    接口优先于反射机制:如果程序必须与编译时未知的类一起工作,如有可能,仅仅用反射进行实例化,访问对象则使用编译时已知的某接口或超类。

    内容讲了使用反射的代价

    1)丧失了编译时类型检查的好处,包括异常检查。

    2)反射代码冗长

    3)反射比普通方法慢。

    第54条 谨慎地使用本地方法

    第55条 谨慎地进行优化

    1)不要因性能牺牲合理的程序结构。首先要努力编写好的程序而不是快的程序。

    2)在设计系统时,特别是设计API、协议、永久数据格式的时候,考虑性能因素。

    3)如果不够快,找出问题根源,进行优化。

    第56条 遵守普遍接受的命名惯例

    命名惯例:字面惯例和语法惯例

    字面惯例

    1)包:com.google.inject

    2) 方法或域:HttpServlet

    3)常量:字面大写,用下划线分隔

    4)类型参数。

    T表示任意类型。E表示集合元素类型。K、V表示键值类型。X表示异常。

    语法惯例

    1)接口:able结尾表能力

    2)特有的方法命名。

    转换对象类型,toType。比如toString,toArray

    返回试图,asType。比如asList

    返回与调用对象同值的基本类型,typeValue。比如intValue

    静态工厂常用名称:valueOf、of、getInstance、newInstance、getType、newType

  • 相关阅读:
    Oracle 数据库 用脚本建表空间
    C++ 类中封装Win32API的回调函数
    在MVC 4 中使用自定义Membership
    机试题目
    sscanf()
    字符串转化为整数
    有序数组中一对数的和为特定数
    把一个数组划分成左边奇数右边偶数
    cocos2dx将背景色改为白色
    字符串单词翻转
  • 原文地址:https://www.cnblogs.com/yeyang/p/10500086.html
Copyright © 2020-2023  润新知