目录
第45条 将局部变量的作用域最小化
第46条 for-each循环优先于传统的for循环
第47条 了解和使用类库
第48条 如果需要精确的答案,避免使用float和double
第49条 基本类型优先于装箱基本类型
第50条 如果其他类型更适合,尽量避免使用字符串
第51条 当心字符串连接的性能
第52条 通过接口引用对象
第53条 接口优先于反射机制
第54条 谨慎地使用本地方法
第55条 谨慎地进行优化
第56条 遵守普遍接受的命名惯例

第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

《Effective Java 2nd》第8章 通用程序设计的更多相关文章

  1. 《Effective Java》学习笔记 —— 通用程序设计

    本章主要讨论局部变量.控制结构.类库.反射.本地方法的用法及代码优化和命名惯例. 第45条 将局部变量的作用域最小化 * 在第一次使用的它的地方声明局部变量(就近原则). * 几乎每个局部变量的声明都 ...

  2. Effective Java 读书笔记之七 通用程序设计

    一.将局部变量的作用域最小化 1.在第一次使用变量的地方声明 2.几乎每个变量的声明都应该包含一个初始化表达式:try-catch语句是一个例外 3.使方法小而集中是一个好的策略 二.for-each ...

  3. Effective Java 学习笔记----第7章 通用程序设计

    第7章 通用程序设计 第29条 将局部变量的作用域最小化     使一个局部变量的作用域最小化,最有力的技术室在第一次使用它的地方声明.   第30条 了解和使用库      效率提高.如果你不知道库 ...

  4. EFFECTIVE JAVA 第十一章 系列化

    EFFECTIVE  JAVA  第十一章  系列化(将一个对象编码成一个字节流) 74.谨慎地实现Serializable接口 *实现Serializable接口付出的代价就是大大降低了“改变这个类 ...

  5. effective java 第2章-创建和销毁对象 读书笔记

    背景 去年就把这本javaer必读书--effective java中文版第二版 读完了,第一遍感觉比较肤浅,今年打算开始第二遍,顺便做一下笔记,后续会持续更新. 1.考虑用静态工厂方法替代构造器 优 ...

  6. 《Effective Java》第8章 通用程序设计

    第47条:了解和使用类库 Top 100 Java Libraries on Github 2016 Library Number of Projects Type % of projects jun ...

  7. [Effective Java 读书笔记] 第8章 通用程序设计

    本章主要讲了以下几条基本的JAVA编程原则: 1.将局部变量的作用域控制在最小,在使用时才定义 2.for-each优于for循环 有三个例外(1,2点主旨就是,for each只能用于读取,不能用于 ...

  8. [Effective Java]第三章 对所有对象都通用的方法

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. 对于所有对象都通用方法的解读(Effective Java 第三章)

    这篇博文主要介绍覆盖Object中的方法要注意的事项以及Comparable.compareTo()方法. 一.谨慎覆盖equals()方法 其实平时很少要用到覆盖equals方法的情况,没有什么特殊 ...

随机推荐

  1. sql数据库中如何根据身份证号判断性别

    身份证号有15位和18位的..在sql中该如何判断? I_sex ,) ,) then '男' else '女' END

  2. hdu5411 CRB and Puzzle[矩阵优化dp]

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  3. Rsync匿名访问漏洞

    前言 前两天总结了互联网或者说IT公司内网常见的漏洞,然后决定针对还没学习过不了解的漏洞进行学习了解,所以准备一一针对来研习,今天是第一篇,立一个Flag,争取今年搞定,为啥说的这么艰难,因为平时工作 ...

  4. js offset

    1.offsetParent offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素. 如果 ...

  5. 【BZOJ4003】[JLOI2015]城池攻占 可并堆

    [BZOJ4003][JLOI2015]城池攻占 Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池. 这 n 个城池用 1 到 n 的整数表示.除 1 号 ...

  6. 【SharePoint 2010】将Sharepoint Server 2010部署到WINDOWS 7

    1.部署-安装环境: 在这里先说明一下:2007的版本中我们只能装在WINDOWS 2003 SERVER 上,这种限制在2010被彻底打破了.我们可以将它安装在VISTA/WINDOWS 7/SER ...

  7. 微信小程序 --- 设置页面的标题

    第一种方式:修改 page.json文件 { "navigationBarTitleText": "豆瓣 - 电影" } 第二种方式:使用 JS 修改: wx. ...

  8. MySQL 数据库的主从配置

    mysql主从配置.鄙人是在如下环境测试的: 主数据库所在的操作系统:win7 主数据库的版本:5.0 主数据库的ip地址:192.168.1.111 从数据库所在的操作系统:linux 从数据的版本 ...

  9. Python开发【笔记】:接口

    接口 什么是接口 ? 接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由 类B去实现其中的某个功能或全部 ...

  10. Python开发【项目】:生产环境下实时统计网站访问日志信息

    日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...