Java

Effective Java 3rd Edition — 第六章 枚举与注解

Item 34 : Use enums instead of int constants 使用枚举来代替整型常量 枚举类型添加以前使用常量的方式来满足使用需要,但是这种方式有很多缺点: 无法保证类型安全,并且没有没有表现力(不够优雅)。 常量是跟随调用者编译的,如果常量改变了但是调用者没有重新编译那 Continue reading Effective Java 3rd Edition — 第六章 枚举与注解

Java三目运算中隐藏的自动拆装箱

最近修改线上bug的时候排查了一个十分隐藏的bug,直接上代码: 乍一看是没什么毛病的,但是已运行就会发现报空指针,在idea里面也会警告可能有空指针,这是什么原因呢? 直接看字节码: 可以看到字节码中调用了Integer.valueOf()方法,因为我们代码中一个值使用的是0(基本数据类型int) Continue reading Java三目运算中隐藏的自动拆装箱

Effective Java 3rd Edition — 第五章 泛型

Item 26 : Don’t use raw types 不要使用原始类型(没有类型声明的泛型) 因为编译器无法知道你的一个集合装的是什么,比如下面的代码: 上面代码在编译期间是不会报错的,只有当你获取元素进行类型转换的时候会抛出类转换异常,所以最好的方式就是像下面一样写: 编译器就会知道集合中应 Continue reading Effective Java 3rd Edition — 第五章 泛型

Effective Java 3rd Edition — 第四章 类与接口(2)

Item 21 : Design interfaces for posterity 为后续维护、使用者设计好的接口 Java8之后允许interface提供默认方法,但是如果你要在一个已经发布的接口添加默认方法需要认证考虑带来的影响,所有实现类是否能够提供正确的结果, 虽然默认方法实现类都不需要提供 Continue reading Effective Java 3rd Edition — 第四章 类与接口(2)

Effective Java 3rd Edition — 第四章 类与接口(1)

Item 15 : Minimize the accessibility of classes and members 最小化类与成员的访问级别 隐藏实现信息或者成员信息有多个好处: 有助于组件之间解耦 提升开发效率,多组件之间可以并行开发 减少维护成本,因为组件调试或者替换不影响其他部分 增加重用 Continue reading Effective Java 3rd Edition — 第四章 类与接口(1)

Effective Java 3rd Edition — 第三章 对象基本方法

Item 10 : Obey the general contract when overriding equals 遵守重写 equals方法基本规则 以下几种情况最好不要重写 equals 方法: 对象的每个实例都肯定不一样,比如 Thread 没有必要(不关心)是否逻辑上是否相等,比如 Pat Continue reading Effective Java 3rd Edition — 第三章 对象基本方法

Effective Java 3rd Edition — 第二章 创建和销毁对象

Item 1 : using static factory method instead of constructor 多使用静态工厂方法而不是构造器 优势:  构造器容易造成参数顺序混乱,静态工厂方法名称有很好的表意性,对于类属性较多的情况有着非常明显的优势 静态工厂方法都不必每次调用都创建新的对 Continue reading Effective Java 3rd Edition — 第二章 创建和销毁对象