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 等方法 , 我們可以用以個類來描述這個數據集,通常是一個私有的靜態成員類