EffectiveJava之15、17、24、29、32

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、  “最小化局部变量的作用域”-----方法小而集中


32-其他类型合适时,尽量避免使用字符串.

1、  字符串不适合代替其他的值类型

2、  字符串不适合代替其他枚举类型  (类型安全枚举类型和 int 比较适合表示枚举类型的常量 )

3、  字符串不适合代替聚集类型

StringcompoundKey = className + “#” +I . next( ) ;

如果想访问单独的域, 你必须解析该字符串 , 无法提供equals 、toString 等方法 , 我们可以用以个类来描述这个数据集,通常是一个私有的静态成员类




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值