1. 程式人生 > >《Effective Java 2nd》第8章 通用程序設計

《Effective Java 2nd》第8章 通用程序設計

lin 名稱 基類 http 第8章 遍歷集合 except hashmap value

目錄 第45條 將局部變量的作用域最小化 第46條 for-each循環優先於傳統的for循環 第47條 了解和使用類庫 第48條 如果需要精確的答案,避免使用float和double 第49條 基本類型優先於裝箱基本類型 第50條 如果其他類型更適合,盡量避免使用字符串 第51條 當心字符串連接的性能 第52條 通過接口引用對象 第53條 接口優先於反射機制 第54條 謹慎地使用本地方法 第55條 謹慎地進行優化 第56條 遵守普遍接受的命名慣例

第45條 將局部變量的作用域最小化

for循環優先於while循環

第46條 for-each循環優先於傳統的for循環

for-each循環會隱藏叠代器或者索引變量,可避免出錯。

無法使用for-each的情況:

1)過濾。遍歷集合時,需要刪除指定的元素。需要Iterator的remove方法。

2)轉換。遍歷集合時,替代部分值。

3)平行叠代。同時遍歷多個集合。比如同時遍歷集合A、B,依次比較各個元素。

第47條 了解和使用類庫

每個程序員都應該熟悉java.lang、java.tuil,某些java.io包中的內容。

同時,CollectionFramework和java.util.concurrent包也應該熟悉。

第48條 如果需要精確的答案,避免使用float和double

使用BigDecimal。

第49條 基本類型優先於裝箱基本類型

基本類型優先於裝箱基本類型,如果使用裝箱基本類型時,要特別小心。

基本類型和裝箱基本類型之間的區別:

1)基本類型只有值,而裝箱基本類型具有與值不同的同一性(指引用)

基本類型==比較是比較值。

裝箱基本類型==比較的是引用,equals才是比較的值。

(對裝箱基本類型使用==基本都是錯誤的,這點非常重要,因為比較的是引用!)

2)基本類型只有功能值,而裝備基本類型有非功能值:null

3)基本類型通常比裝箱基本類型更省時間。

當操作中混合使用基本類型和裝箱基本類型時,裝箱基本類型會進行自動拆箱。

如果為null,拆箱時將拋出NullPointerException。

什麽使用應該使用裝箱基本類型

1)作為集合中的元素、鍵值等

2)反射方法調用

第50條 如果其他類型更適合,盡量避免使用字符串

第51條 當心字符串連接的性能

不要使用“+”進行多個字符串的拼接。

1)使用“+”

為連接n個字符串而重復地使用字符串連接操作符,需要n的平方級(n^2)的時間。

由於String的不可變,當兩個字符串拼接時,它們的內容都要被拷貝。

2)使用StringBuilder

為連接n個字符串而重復地使用字符串連接操作符,時間復雜度為O(n)

第52條 通過接口引用對象

如何有合適的接口,應該使用接口聲明。

好處是:程序會更加靈活。

舉例:List<XXX> list = new ArrayList<XXX>();如果list頻繁增加刪除數據,直接將ArrayList改為LinkedList就可以。

不存在合適的接口時,可以用類來引用對象。

1)值類,因值類很少用多個實現編寫,通常是final的。如String、BigInteger。

2)對象屬於某個框架,框架的基本類型是類,而不是接口。這種情況,應該用基類來引用對象,而不是實現類。如java.util.TimerTask

3)類實現了接口,但是提供了接口中不存在的額外方法。如LinkedhashMap。且程序依賴於這些額外方法,則只能使用這個類來引用。

第53條 接口優先於反射機制

本條標題並不能正確反映所將的內容。

接口優先於反射機制:如果程序必須與編譯時未知的類一起工作,如有可能,僅僅用反射進行實例化,訪問對象則使用編譯時已知的某接口或超類。

內容講了使用反射的代價

1)喪失了編譯時類型檢查的好處,包括異常檢查。

2)反射代碼冗長

3)反射比普通方法慢。

第54條 謹慎地使用本地方法

第55條 謹慎地進行優化

1)不要因性能犧牲合理的程序結構。首先要努力編寫好的程序而不是快的程序。

2)在設計系統時,特別是設計API、協議、永久數據格式的時候,考慮性能因素。

3)如果不夠快,找出問題根源,進行優化。

第56條 遵守普遍接受的命名慣例

命名慣例:字面慣例和語法慣例

字面慣例

1)包:com.google.inject

2) 方法或域:HttpServlet

3)常量:字面大寫,用下劃線分隔

4)類型參數。

T表示任意類型。E表示集合元素類型。K、V表示鍵值類型。X表示異常。

語法慣例

1)接口:able結尾表能力

2)特有的方法命名。

轉換對象類型,toType。比如toString,toArray

返回試圖,asType。比如asList

返回與調用對象同值的基本類型,typeValue。比如intValue

靜態工廠常用名稱:valueOf、of、getInstance、newInstance、getType、newType

《Effective Java 2nd》第8章 通用程序設計