個人讀書筆記美尸,部分沒讀懂的知識點可能會簡單概括或缺失冤议,以后反復閱讀后再完善。
第8章 通用程序設計
第45條:將局部變量的作用域最小化
最有力的方法就是在第一次使用它的地方聲明师坎∷∷幔或者使方法小而集中。
第46條:for-each循環(huán)優(yōu)先于傳統(tǒng)的for循環(huán)
for-each不會有性能上的損失胯陋。for-each對數(shù)組索引的邊界值只計算一次蕊温。
for-each在簡潔性和預防Bug有優(yōu)勢。
有三種情況無法使用for-each循環(huán):
1惶岭、過濾
如果需要遍歷集合寿弱,并刪除選定的元素,就需要顯式的迭代器按灶,以便可以調(diào)用remove方法症革。
2、轉(zhuǎn)換
如果需要遍歷列表或者數(shù)組鸯旁,并取代它部分或者全部的元素值噪矛,就要列表迭代器或者數(shù)組索引量蕊,以便設置元素值。
3艇挨、平行迭代
如果需要并行地遍歷多個集合残炮,就需要顯式地控制迭代器或者索引變量,以便所有迭代器或者索引變量都可以得到同步前移缩滨。
第47條:了解和使用類庫
使用幫助類庫可以充分利用別人的經(jīng)驗势就。不必浪費時間在底層的細節(jié)上。標準類庫的性能往往會隨時間的推移而不斷提高脉漏。
也可以使自己的代碼融入主流苞冯。
第48條:如果需要精確的答案,請避免使用float和double
float和double類型主要是為了科學計算和工程計算而設計的侧巨。它們執(zhí)行二進制浮點運算舅锄。
float和double類型尤其不適合用于貨幣計算。
如果需要有舍入行為司忱,推薦使用BigDecimal,如果涉及數(shù)額不大皇忿,不介意記錄十進制小數(shù)點,就可以使用int或long坦仍。
如果數(shù)值范圍不超過9位十進制數(shù)字鳍烁,就可以使用int;如果不超過18位繁扎,就使用long老翘,如果超過18位,就使用BigDecimal锻离。
第49條: 基本類型優(yōu)于裝箱基本類型
基本類型只有值,而裝箱基本類型具有與它們的值不同的同一性墓怀。
基本類型只有功能完備的值汽纠,而每個裝箱基本類型還有個非功能值:null。
基本類型比裝箱基本類型更節(jié)省時間和空間傀履。
第50條: 如果其他類型更適合虱朵,則盡量避免使用字符串
字符串不適合代替其他的值類型
字符串不適合代替枚舉類型
字符串不適合代替聚集類型
一個實體有多個組件,用字符串的話钓账,訪問單獨的域時還要解析字符串
字符串也不適合代替能力表(capabilities)
第51條: 當心字符串連接的性能
不要使用字符串連接操作符來合并多個字符串碴犬,除非性能無關(guān)緊要。
相反梆暮,應該使用StringBuilder的append方法服协。
第52條: 通過接口引用對象
如果有合適的接口類型存在,那么對于參數(shù)啦粹、返回值偿荷、變量和域來說窘游,就都應該使用接口類型進行聲明。
第53條: 接口優(yōu)先于反射機制
反射機制允許一個類使用另一個類跳纳,即使當前者被編譯時后者還根本不存在忍饰。
壞處:喪失了編譯時類型檢查的好處。執(zhí)行反射訪問所需要的代碼非常笨拙和冗長寺庄。
性能有所損失艾蓝。
第54條: 謹慎地使用本地方法
本地方法是指用本地程序設計語言(比如C或者C++) 來編寫的特殊方法。