09 2017 档案
摘要:背景 SortedMap的实现类TreeMap可以按自然顺序或自定义顺序遍历键(key),有时我们需要根据值(Value)进行排序,本文提供了一种简单实现思路。 实现 Comparator接口 使用Value排序时,仍然使用TreeMap实现类,只不过需要在TreeMap的构造函数中引入Compar
阅读全文
摘要:第47条:了解和使用类库 [Top 100 Java Libraries on Github 2016]( https://docs.google.com/spreadsheets/d/19hO0L9WOC0XWXPnYX 216_Qbz705ajIAsSQFhGmgp9A/edit gid=0)
阅读全文
摘要:第2条:遇到多个构造器参数时要考虑用构建器 与构造器相比,builder的微略优势在于,builder可以有多个可变(varargs)参数。构造器就像方法一样,只能有一个可变参数。因为builder利用单独的方法来设置每个参数,你想要多少个可变参数,它们就可以有多少个,直到每个setter方法都有一
阅读全文
摘要:“将一个对象编码成一个字节流”,称作将该对象序列化(serializing); 相反的处理过程被称作反序列化(deserializing),一旦对象被序列化后,它的编码就可以从一台正在运行的虚拟机被传递到另一台虚拟机上,或者被存储到磁盘上,供以后反序列化时用。序列化技术为远程通信提供了标准的线路级(wire-level)对象表示法,也为JavaBeans组件结构提供了标准的持久化数据格式。 第7...
阅读全文
摘要:第66条:同步访问共享的可变数据 Java语言规范保证读或者写一个变量是原子的(atomic ) ,除非这个变量的类型为long或者double. [java中long和double类型操作的非原子性探究]( http://blog.csdn.net/zhaifengmin/article/details/46315003) 你可能期待这个程序运行大约一秒钟左右,之后主线程将stapR...
阅读全文
摘要:第58条:对可恢复的情况使用受检异常,对编程错误使用运行时异常 Java程序设计语言提供了三种可抛出结构(throwable) ;受检的异常(checked exception)运行时异常(run-time exception)和错误(error)。 受检的异常是潜在指示 在决定使用受检的异常或是未受检的异常时,主要的原则是:如果期望调用者能够适当地恢复对于这种情况就应该使用受检的异常。...
阅读全文
摘要:第30条:用enum代替int常量 将加班工资计算移到一个私有的嵌套枚举中,将这个策略枚举(strategy enum)的实例传到PayrollDay枚举的构造器中。之后PayrollDay枚举将加班工资计算委托给策略枚举: 以上,方法overtimePay()在每个枚举类示例中实现,对外提供一致的pay()方法。 第31条:用实例域代替序数 永远不要根据枚举的序数导出与它关联的值、而...
阅读全文
摘要:第38条:检查参数的有效性 对于公有的方法,要用javadoc的@throws标签(tag)在文档中说明违反参数值限制时会抛出的异常。这样的异常通常为IllegalArgumentException, IndexOutOfBoundsException或NullPointerException. 非公有的方法通常应该使用断言(assertion)来检查它们的参数,具体做法如下所示: ...
阅读全文
摘要:第13条:使类和成员的可访问性最小化 第一规则很简单:尽可能地使每个类或者成员不被外界访问。换句话说。应该使用与你正在编写的软件的对应功能相一致的、尽可能最小的访问级别。 对于顶层的(非嵌套的)类和接口,只有两种可能的访问级别:包级私有的(package-private)和公有的(public)。如果你用public修饰符声明了顶层类或者接口,那它就是公有。否则,它将是包级私有的。如果类或者接...
阅读全文
摘要:第23条:请不要在新代码中使用原生态类型 声明中具有一个或者多个类型参数( type parameter)的类或者接口,就是泛型(generic)类或者接口。 每种泛型定义一组参数化的类型(parameterized type),构成格式为: 先是类或者接口的名称,接着用尖括号()把对应于泛型形式类型参数的实际类型参数列表括起来。例如,List(读作“字符串列表”)是一个参数化的类型,表示元素...
阅读全文
摘要:第8条:覆盖equals时请遵守通用约定 覆盖equals方法看起来似乎很简单,但是有许多覆盖方式会导致错误,并且后果非常严重。最容易避免这类问题的办法就是不覆盖equals方法,在这种情况下,类的每个实例都只与它自身相等。 那么,什么时候应该覆盖Object.equals呢?如果类具有自己特有的“逻辑相等”概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们...
阅读全文