前言: 读这本书第1条规则的时候就感觉到这是一本非常好的书.可以把我们的Java功底提升一个档次,我还是比較推荐的.这里我主要就关于覆盖equals.hashCode和toString方法来做一个笔记总结.希望可以与君共勉. 概述: 这一章主要是说明一些对于全部对象都通用的方法.我们知道Java的多态是其特色之中的一个,而多态的体现方式中就有一种方式叫做"重写".这些概念性的东西我想在大学我们学习Java的初期.老师就会如数家珍一样地灌输给我们.只是.在那个时候有多少人真的了解了什么是…
第八条:覆盖equals时请遵守通用约定 什么时候需要覆盖equals方法?类具有自己的逻辑相等概念,并且父类的equals方法不能满足需要.重写equals时需要遵循一下约定: 自反性:非null x,x.equals(x)必须是true 对称性:非null x和y,y.equals(x)和x.equals(y)的结果必须一致 传递性:非null x.y.z,如果x.equals(y)和x.equals(z)的结果为true,那么y.equals(z)也必须为true 一致性:非null x.…
45.将局部变量的作用域最小化 将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. Java允许在任何可以出现语句的地方声明变量(C语言中局部变量要在代码块开头声明),要使局部变量的作用域最小化,最好的方法是在第一次使用它的地方声明.局部变量的作用域从它被声明的点开始扩展,一直到外围块的结束处. 如果在循环终止之后不再需要循环变量的内容,for循环就优于while循环.for循环中变量的作用域范围更小,可以避免一些复制.粘贴错误,并且for循环更简短.可读性更强.如:…
本节主要涉及Object中通用的一些方法,比如equals,hashCode,toString,clone,finalize等等 覆盖equals时请遵守通用约定 equals方法实现的等价关系: 自反性:对于所有的非null,a=a 对称性:a=b,则b=a 传递性:a=b,b=c,则a=c 一致性:对于没有被修改的ab,如果a=b,则一直a=b 非空性:对于任何非Null,a!=null 高质量equals方法的诀窍: 使用==操作符检查--"参数是否为这个对象的引用" 使用ins…
/** * static关键字:修饰属性(实质就是全局变量).方法(无需本类的对象即可调用此方法).类. * 1.static方法只能调用static方法 * 2.static方法只能访问static数据 * 3.static方法不能以任何方式引用this或super */ public class Main { public static void main(String[] args) { A a = new A(); a.val = 2; A a1 = new A(); a1.val =…
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 通过私有构造器强化不可实例化的能力 第5条 避免创建不必要的对象 第6条 消除过期的对象引用 第7条 避免使用终结方法 第1条 考虑用静态工厂方法代替构造器 对于类而言, 最常用的获取实例的方法就是提供一个公有的构造器, 还有一种方法, 就是提供一个公有的静态工厂方法(static factory…
[Effective Java] 创建和销毁对象篇 1. 优先考虑用静态工厂方法代替构造器 优点: - 静态工厂方法相比于构造器,它们有名称 - 不需要每次在使用的时候创建一个对象 - 可以返回原返回类型的任何子类型的对象 - 在创建参数化是来的时候,代码更加简洁 缺点: - 不能被子类化(因为鼓励程序使用复合,而不是继承) - 与其他的静态方法实际上没有任何区别(想要查明如何实例化一个类比较困难) 常用静态工厂方法名称: - valueOf(类型转换方法) - of - getInstance…
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类(HashMap,HashSet等)将不能正常工作. 8.覆盖equals时请遵守通用约定 无需覆盖equals的情形: 类的每个实例本质上是唯一的.类代表的是活动实体而不是值的概念.(例如,类Thread) 不关心类"逻辑相等"的功能,从Object继承的equals实现已经足够.(例如,…
1.考虑用静态工厂方法代替构造器 类的一个实例,通常使用类的公有的构造方法获取.也可以为类提供一个公有的静态工厂方法(不是设计模式中的工厂模式)来返回类的一个实例.例如: //将boolean类型转换为Boolean类型 public static valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 使用静态工厂方法代替构造器的优势: 静态工厂方法有名称,更易读.静态工厂方法能够使用方法名称进行自注释,来描述被返回的对象…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 10. 重写equals方法时遵守通用约定 虽然Object是一个具体的类,但它主要是为继承而设计的.它的所有非 final方法(equals.hashCode.toStr…