创建和销毁对象

》考虑用静态工厂方法替代构造器。

优点:

●优势在于有名称。

●不必再每次调用他们的时候都创建一个新的对象。

●可以返回原返回类型的任何子类型的对象。

●在创建参数化类型实例的时候,他们使代码更加简洁。

缺点:

●类如果不含公有的或者受保护的构造器。就不能被子类化。

●他们与其他的静态方法没有任何区别。

》遇到多个构造器参数的时候考虑用构建器。

》用私有的构造器或者枚举类型强化Singleton属性。

》通过私有构造器强化不可实例化的能力。

》避免创建不必要的对象

反面的例子

String s = new String("s");// do not this

●每次执行的时候都会创建一个新的实例。

改版

String s= "s";

●只有一个String实例。

》消除过期的对象引用。

●一旦对象引用已经过期,只需要清空这些引用即可。

●清空对象引用应该是一种例外,而不是一种规范的行为。

●只要是类自己管理内存,就应该警惕内存泄漏问题。

》避免使用终结方法

●终结方法(finalizer)是不可预测的,也是很危险的。一般的情况下是不必要的。

对所有对象都通用的方法

》覆盖equals时请遵守通用约定。

●类的每个实例本质上都是唯一的。

●不关心类是否提供了逻辑相等的测试功能。

●超类已经覆盖了Equals,从超类继承过来的行为对于子类也是合适的。

●类是私有的或是包私有的,可以确定他的equals方法永远不会被调用,这时,要覆盖,防止被意外的调用。

●自反性。

●对称性。

●传递性。

●一致性。

       类和接口

》使类与成员的可访问性最小化。

》在公有类中使用访问方法而非公有域。

》复合优先于继承。

》接口优于抽象类。

●现有的类可以很容易被更新,以实现新的接口。

》接口只用于定义类型。

●常量接口模式是对接口的不良使用。

》要尽可能的消除非受检警告。

》列表优先于数组。

●数组使具体化的,只有在运行的时候才知道并检查谈们的元素约束类型。

》优先考虑泛型

》38:检查参数的有效性

》39:必要时进行保护性拷贝。

》40:谨慎设计方法签名。

● 谨慎的选择方法的名字。

● 不要过于追求过于简便的方法。

● 避免过长的参数列表(4个或更少)

减少参数的方法:

分解成多个方法

创建辅助类

采用builder模式。

● 对于参数类型,要优先使用接口而不是类。

》41:慎用重载

》42:慎用可变参数

》43:返回0长度的数组或者集合,而不是返回null。

》44:为所有导出的API元素编写文档注释。

   第八章 通用程序设计

》将局部变量的作用域最小化。

● 最有利的方法就是在第一次使用它的地方声明。

》for-each优先于for循环

》了解和使用类库

》如果需要精确的答案,避免使用double与float。

Effective Java 读书笔记的更多相关文章

  1. Effective Java读书笔记完结啦

    Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...

  2. Effective java读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...

  3. Effective Java 读书笔记(一):使用静态工厂方法代替构造器

    这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...

  4. Effective Java 读书笔记之九 并发

    一.访问共享的可变数据时要同步 1.synchronized关键字既然保证访问的可见性也能保证原子性.而volatile修饰符只能保证变量的线程可见性. 2.增量操作符等不是原子性,多线程操作时可能导 ...

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

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

  6. Effective Java 读书笔记之一 创建和销毁对象

    一.考虑用静态工厂方法代替构造器 这里的静态工厂方法是指类中使用public static 修饰的方法,和设计模式的工厂方法模式没有任何关系.相对于使用共有的构造器来创建对象,静态工厂方法有几大优势: ...

  7. [Effective Java读书笔记] 第二章 创建和销毁对象(1~7)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537576.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  8. Effective Java读书笔记——第三章 对于全部对象都通用的方法

    第8条:覆盖equals时请遵守通用的约定 设计Object类的目的就是用来覆盖的,它全部的非final方法都是用来被覆盖的(equals.hashcode.clone.finalize)都有通用约定 ...

  9. Effective Java 读书笔记(五):Lambda和Stream

    1 Lamdba优于匿名内部类 (1)DEMO1 匿名内部类:过时 Collections.sort(words, new Comparator<String>() { public in ...

  10. Effective Java 读书笔记(四):泛型

    1 不要使用原始类型 (1)术语 术语 例子 参数化类型(Parameterized type) List<String> 实际类型参数(Actual type parameter) St ...

随机推荐

  1. Kickoff - 创造可扩展的,响应式的网站

    Kickoff 是一个轻量级的前端框架,用于创建可扩展的,响应式的网站.作为前端开发人员,我们工作的类型越来越多样化.Kickoff 旨在帮助您在所有项目保持一致的结构和风格,无需添加其他框架. 在线 ...

  2. js 将json对象转成字符串

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Hadoop 2.5.1编译

    1.环境安装 gcc.gcc-c++.make.cmake.svn yum install lzo-devel zlib-devel gcc gcc-c++ make cmake autoconf a ...

  4. iis7.5安装配置php环境

    前言 iis7.5是安装在win7.win8里的web服务器,win2003.win2000的web服务器使用的是iis6.0,由于win7.win8系统相比win2003.win2000有了改新革面 ...

  5. OC单例快速实现

    首先新建一个头文件,定义如下宏: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...

  6. 对抽屉效果几大github第三方库的调研

    在公司项目新版本方案选择中,对主导航中要使用的抽屉效果进行了调研.主要原因是旧的项目中所用的库ECS评价不是很好.现对当下比较火的几大热门抽屉效果的第三方库进行了调研.代码全部选自github 如果你 ...

  7. sqlite 增删改查

    PersonDao1.java package mm.shandong.com.testsqlsqllite.dao; import android.content.Context; import a ...

  8. NSString方法与NSMutableString方法

    NSString方法+(id) stringWithContentsOfFile:path encoding:enc error:err创建一个新字符串并将其设置为path指定的文件的内容,使用字符编 ...

  9. 【原】ios的hitTest方法以及不规则区域内触摸事件处理方法

    概述 在正常的使用场景中,我们处理了比较多的矩形区域内触摸事件,比如UIButton.UIControl.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不 ...

  10. 让UILabel的文字顶部对齐

    参考资料 http://stackoverflow.com/questions/1054558/how-do-i-vertically-align-text-within-a-uilabel 方法一 ...