effectivejava学习笔记之所有对象都通用的方法

author author     2022-07-31     258

关键词:

一、覆盖equals时请遵守通用约定

1、满足下列任何一个条件时,不需要覆盖equals方法

a、类的每个实例本质上都是唯一的。此时就是Object中equals方法所表达的含义。

b、不关心类是否提供了“逻辑相等”的测试功能

c、超类中覆盖的equals方法,使用于子类,不需要自己再覆盖了。

d、类是私有或者包级私有,并确定equals方法永远不会被调用,可以不覆盖。或者覆盖equals方法,内容为抛出异常。

2、高质量equals方法的诀窍:

a、使用==操作符检测“参数是否为这个对象的引用”。

b、使用instanceof操作符检查“参数是否为正确的类型”。

c、把参数转换成正确的类型。

d、对于该类中每个关键域,检测是否对应相等于参数中过的关键域。

  不是float和double的基本类型域:直接使用==

  引用域:递归调用equals方法

  float域:Float.compare方法

  double域:Double.compare方法

e、完成了equeal方法后,问自己三个问题:是否对称、传递和一致?

3、一些告诫

1、覆盖了equals方法后,一定要覆盖hashCode方法

2、不要企图让equals方法过于智能

3、不要将equals声明中的Object对象替换为其他类型

4、注意使用@Override注解来确保覆盖

二、覆盖equals方法时,总要覆盖hashCode方法

三、始终要覆盖toString方法

四、谨慎地覆盖clone方法

1、Cloneable接口并没有包含任何方法,它决定了Object中受保护的clone方法实现的行为:如果一个类实现了Cloneable,Object的clone方法就返回该对象的逐域拷贝,或者抛出CloneNotSupportedException异常。

2、所有实现了Cloneable接口的类都应该用一个公有的方法覆盖clone,此公有方法首先调用super.clone,然后修正任何需要修正的域。

3、提供对象拷贝的好办法是提供一个拷贝构造器或拷贝工厂。

五、考虑实现Comparable接口

 

effectivejava2读书笔记-对于所有对象都通用的方法

第12条:考虑实现Comparable接口这一条非常简单。就是说,如果类实现了Comparable接口,覆盖comparaTo方法。就可以使用Arrays.sort(a)对数组a进行排序。它与equals方法有点类似,但是,因为Comparable接口是参数化的,而且comparable方法时静... 查看详情

effectivejava2读书笔记-对于所有对象都通用的方法

第10条:始终要覆盖toString这一条没什么好讲的,就是说默认的toString方法打印出来的是类名[email protected]+十六进制哈希码的值。我们应该覆盖它,使它能够展示出一些更为详细清晰的信息,这个看实际情况吧。第11条:谨慎... 查看详情

effectivejava2读书笔记-对于所有对象都通用的方法

第8条:覆盖equals时请遵守通用约定①约定的内容自反性。对于任何非null的引用值x。x.equals(x)必须返回true。对称性。对于任何非null的引用值x和y。当且仅当y.equals(x)返回true时,x.equals(y)必须返回true。传递性。对于任何非null的引... 查看详情

effectivejava学习笔记之创建和销毁对象

一、考虑用静态工厂方法代替构造器1、此处的静态工厂方法是指返回指为类的对象的静态方法,而不是设计模式中的静态工厂方法。2、静态工厂方法的优势有:a、使用不同的方法名称可显著地表明两个静态工厂方法的不同,而... 查看详情

java:effectivejava学习笔记之覆盖equals时请遵守通用约定(代码片段)

Java覆盖equals时请遵守通用约定覆盖equals时请遵守通用约定1、为什么要覆盖equals2、需要覆盖equals方法的时机2.1、不需要覆盖equals方法的情况2.2、需要覆盖equals方法的情况2.2.1、自反性2.2.2、对称性2.2.3、传递性2.2.4、一致性2.2.5、... 查看详情

java:effectivejava学习笔记之考虑实现comparable接口(代码片段)

Java考虑实现Comparable接口考虑实现Comparable接口1、Comparable接口2、为什么要考虑实现Comparable接口3、compareTo方法的通用约定4、何时以及如何实现Comparable接口4.1、多重比较5、实现Comparable接口所需满足的需求6、总结参考考虑实现Compa... 查看详情

effectivejava笔记

使用Build模式不是直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器,得到一个builder对象然后客户端在builder对象上调用类似于setter的方法,来设置每个相关的可选参数最后,客户端调用无参的build方法来生成不... 查看详情

javase学习笔记之object对象

Object:所有类的直接或者间接父类,Java认为所有的对象都具备一些基本的共性内容,这些内容可以不断的向上抽取,最终就抽取到了一个最顶层的类中的,该类中定义的就是所有对象都具备的功能。 具体方法:1,boolean ... 查看详情

java:effectivejava学习笔记之消除过期对象引用(代码片段)

Java消除过期对象引用消除过期对象引用1、Java的垃圾回收机制2、Java中的内存泄露3、常见的内存泄露参考消除过期对象引用很多人可能在想这么一个问题:Java有垃圾回收机制,那么还存在内存泄露吗?答案是肯定的&#... 查看详情

java:effectivejava学习笔记之静态工厂方法的简单理解和使用(代码片段)

Java静态工厂方法静态工厂方法一、什么是静态工厂方法?二、静态工厂方法的优势1、静态工厂方法与构造器不同的第一优势在于,它们有名字2、静态工厂方法不用在每次调用的时候都创建一个新的对象3、静态工厂方法... 查看详情

effectivejava学习笔记之不可实例化的类

在没有显式声明一个类的构造方法时,编译器会生成默认的无参构造方法,在设计工具类时,我们通常将方法设置成静态方法,以类名.方法名的形式调用,此时这个类就没有必要创建实例,我们知道抽象类不可以被实例化,但... 查看详情

effectivejava目录

创建和销毁对象考虑用静态工厂方法代替构造器遇到多个构造器参数时要考虑用构建器用私有构造器或者枚举类型强化Singleton属性通过私有构造器强化不可实例化能力避免创建不必要的对象消除过期的对象引用避免使用终结方法... 查看详情

java:effectivejava学习笔记之避免创建不必要的对象(代码片段)

Java避免创建不必要的对象避免创建不必要的对象1、采用更合适的API或工具类减少对象的创建2、重用相同功能的对象3、小心自动装箱(autoboxing)4、用静态工厂方法而不是构造器5、正则表达式6、补参考避免创建不必要的... 查看详情

java:effectivejava学习笔记之请不要在新代码中使用原生态类型(代码片段)

Java请不要在新代码中使用原生态类型1、请不要在新代码中使用原生态类型参考1、请不要在新代码中使用原生态类型1、在没有泛型之前,从集合中读取到每一个对象都必须进行转换。如果有人不小心插入了类型错误的对象&#x... 查看详情

java:effectivejava学习笔记之避免使用终结方法(代码片段)

Java避免使用终结方法避免使用终结方法1、finalize()基本概念2、finalize()的执行过程3、为什么要避免覆盖并使用finalize方法?4、如果类中的资源确实需要被释放,我们应该怎么做?5、终结方法的利弊5.1、终结方法的好... 查看详情

java:effectivejava学习笔记之优先考虑泛型和泛型方法(代码片段)

Java优先考虑泛型和泛型方法1、优先考虑泛型2、优先考虑泛型方法参考1、优先考虑泛型下面我们举个例子,将他作为泛型化的主要备选对象,换句话说,可以适当的强化这个类来利用泛型。publicclassStackprivateObject[]elem... 查看详情

javascript学习笔记——javascript语法之对象

JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。在JavaScript中,对象是拥有属性和方法的数据。属性是与对象相关的值。方法是能够在对象上执行的动作。 提示:在面向对象的语言中,属性和方法常被称... 查看详情

javascript学习笔记7之dom文档对象模型

一、什么是DOMDocumentObjectModel文档-------对象----模型-------缩写DOMDOM是针对HTML和XML文档的一个API(应用程序编程接口)。DOM描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。DOM树中的所有节点均可通过J... 查看详情