15-要么专为继承设计,否则不允许继承
1、 为了编出更有效的子类,一个类必须通过某种形式提供适当的钩子,以便能够进入到它的内部工作流程中。
2、 为了允许继承,构造函数一定不能调用能被改写的方法。
17-接口只是被用于定义类型
1、 为了编出更有效的子类,一个类必须通过某种形式提供适当的钩子,以便能够进入到它的内部工作流程中。
2、 为了允许继承,构造函数一定不能调用能被改写的方法。
24-保护性拷贝
1、 对于构造函数的每个可变参数进行保护性拷贝(defensive copy),并且使用拷贝后的对象而非原始对象
2、 保护性拷贝动作是在检查参数的有效性之前,而且有效性的检查是对于拷贝之后的对象而非原始对象---------可避免“脆弱性窗口”中另一个线程改变原始的参数对象
3、 对于 参数类型可以被不可信的子类化,请不要使用 clone 法方进行保护性拷贝
29-将局部变量的作用域最小化
1、 使一个局部变量的作用域最小化,最有力的方法是在第一次使用它的地方声明
2、 几乎每一个局部变量都应该有一个初始化表达式
for(int i =0 , n = expensiveComputation() ; i<n ; i++){
doSomething() ;
}
3、 “最小化局部变量的作用域”-----方法小而集中
1、 字符串不适合代替其他的值类型
2、 字符串不适合代替其他枚举类型 (类型安全枚举类型和 int 比较适合表示枚举类型的常量 )
3、 字符串不适合代替聚集类型
StringcompoundKey = className + “#” +I . next( ) ;
如果想访问单独的域, 你必须解析该字符串 , 无法提供equals 、toString 等方法 , 我们可以用以个类来描述这个数据集,通常是一个私有的静态成员类