編寫高質量代碼:改善Java程式的151個建議

編寫高質量代碼:改善Java程式的151個建議

《編寫高質量代碼:改善Java程式的151個建議》是2012年機械工業出版社出版的書籍,作者秦小波。該書主要介紹了語法、程式設計和架構、工具和框架、編碼風格和編程思想等五大方面的知識。

內容簡介

在通往“java技術殿堂”的路上,本書將為你指點迷津!內容全部由java編碼的最佳實踐組成,對java程式設計師遇到的各種棘手的疑難問題給出了經驗性的解決方案,為java程式設計師如何編寫高質量的java代碼提出了151條極為寶貴的建議。對於每一個問題,不僅以建議的方式從正反兩面給出了被實踐證明為十分優秀的解決方案和非常糟糕的解決方案,而且還分析了問題產生的根源,猶如醍醐灌頂,讓人豁然開朗。

《編寫高質量代碼:改善java程式的151個建議》一共12章,第1~3章針對java語法本身提出了51條建議,例如覆寫變長方法時應該注意哪些事項、final修飾的常量不要在運行期修改、匿名類的構造函式特殊在什麼地方等;第4~9章重點針對jdk api的使用提出了80條建議,例如字元串的拼接方法該如何選擇、枚舉使用時有哪些注意事項、出現nullpointerexception該如何處理、泛型的多重界限該如何使用、多執行緒編程如何預防死鎖,等等;第10~12章針對程式性能、開源的工具和框架、編碼風格和編程思想等方面提出了20條建議。

《編寫高質量代碼:改善java程式的151個建議》針對每個問題所設計的套用場景都非常典型,給出的建議也都與實踐緊密結合。書中的每一條建議都可能在你的下一行代碼、下一個套用或下一個項目中嶄露頭角,建議你將此書擱置在手邊,隨時查閱,一定能使你的學習和開發工作事半功倍。

目錄

《編寫高質量代碼:改善java程式的151個建議》

前 言

第1章 java開發中通用的方法和準則/1

建議1: 不要在常量和變數中出現易混淆的字母/2

建議2: 莫讓常量蛻變成變數/2

建議3: 三元操作符的類型務必一致/3

建議4: 避免帶有變長參數的方法重載/4

建議5: 別讓null值和空值威脅到變長方法/6

建議6: 覆寫變長方法也循規蹈矩/7

建議7: 警惕自增的陷阱/8

建議8: 不要讓舊語法困擾你/10

建議9: 少用靜態導入/11

建議10: 不要在本類中覆蓋靜態導入的變數和方法/13

建議11: 養成良好習慣,顯式聲明uid/14

建議12: 避免用序列化類在構造函式中為不變數賦值/17

建議13: 避免為final變數複雜賦值/19

建議14: 使用序列化類的私有方法巧妙解決部分屬性持久化問題/20

建議15: break萬萬不可忘/23

建議16: 易變業務使用腳本語言編寫/25

建議17: 慎用動態編譯/27

.建議18: 避免instanceof非預期結果/29

建議19: 斷言絕對不是雞肋/31

建議20: 不要只替換一個類/33

第2章 基本類型/35

建議21: 用偶判斷,不用奇判斷/36

建議22: 用整數類型處理貨幣/37

建議23: 不要讓類型默默轉換/38

建議24: 邊界,邊界,還是邊界/39

建議25: 不要讓四捨五入虧了一方/41

建議26: 提防包裝類型的null值/43

建議27: 謹慎包裝類型的大小比較/45

建議28: 優先使用整型池/46

建議29: 優先選擇基本類型/48

建議30: 不要隨便設定隨機種子/49

第3章 類、對象及方法/52

建議31: 在接口中不要存在實現代碼/53

建議32: 靜態變數一定要先聲明後賦值/54

建議33: 不要覆寫靜態方法/55

建議34: 構造函式儘量簡化/57

建議35: 避免在構造函式中初始化其他類/58

建議36: 使用構造代碼塊精煉程式/60

建議37: 構造代碼塊會想你所想/61

建議38: 使用靜態內部類提高封裝性/63

建議39: 使用匿名類的構造函式/65

建議40: 匿名類的構造函式很特殊/66

建議41: 讓多重繼承成為現實/68

建議42: 讓工具類不可實例化/70

建議43: 避免對象的淺拷貝/71

建議44: 推薦使用序列化實現對象的拷貝/73

建議45: 覆寫equals方法時不要識別不出自己/74

建議46: equals應該考慮null值情景/76

建議47: 在equals中使用getclass進行類型判斷/77

建議48: 覆寫equals方法必須覆寫hashcode方法/78

建議49: 推薦覆寫tostring方法/80

建議50: 使用package-info類為包服務/81

建議51: 不要主動進行垃圾回收/82

第4章 字元串/83

建議52: 推薦使用string直接量賦值/84

建議53: 注意方法中傳遞的參數要求/85

建議54: 正確使用string、stringbuffer、stringbuilder/86

建議55: 注意字元串的位置/87

建議56: 自由選擇字元串拼接方法/88

建議57: 推薦在複雜字元串操作中使用正則表達式/90

建議58: 強烈建議使用utf編碼/92

建議59: 對字元串排序持一種寬容的心態/94

第5章 數組和集合/97

建議60: 性能考慮,數組是首選/98

建議61: 若有必要,使用變長數組/99

建議62: 警惕數組的淺拷貝/100

建議63: 在明確的場景下,為集合指定初始容量/101

建議64: 多種最值算法,適時選擇/104

建議65: 避開基本類型數組轉換列表陷阱/105

建議66: aslist方法產生的list對象不可更改/107

建議67: 不同的列表選擇不同的遍歷方法/108

建議68: 頻繁插入和刪除時使用linkedlist/112

建議69: 列表相等只需關心元素數據/115

建議70:子列表只是原列表的一個視圖/117

建議71: 推薦使用sublist處理局部列表/119

建議72: 生成子列表後不要再操作原列表/120

建議73: 使用comparator進行排序/122

建議74: 不推薦使用binarysearch對列表進行檢索/125

建議75: 集合中的元素必須做到compareto和equals同步/127

建議76: 集合運算時使用更優雅的方式/129

建議77: 使用shuffle打亂列表/131

建議78: 減少hashmap中元素的數量/132

建議79: 集合中的哈希碼不要重複/135

建議80: 多執行緒使用vector或hashtable/139

建議81: 非穩定排序推薦使用list/141

建議82: 由點及面,一葉知秋—集合大家族/143

第6章 枚舉和註解/145

建議83: 推薦使用枚舉定義常量/146

建議84: 使用構造函式協助描述枚舉項/149

建議85: 小心switch帶來的空值異常/150

建議86: 在switch的default代碼塊中增加assertionerror錯誤/152

建議87: 使用valueof前必須進行校驗/152

建議88: 用枚舉實現工廠方法模式更簡潔/155

建議89: 枚舉項的數量限制在64個以內/157

建議90: 小心註解繼承/160

建議91: 枚舉和註解結合使用威力更大/162

建議92: 注意@override不同版本的區別/164

第7章 泛型和反射/166

建議93: java的泛型是類型擦除的/167

建議94: 不能初始化泛型參數和數組/169

建議95: 強制聲明泛型的實際類型/170

建議96: 不同的場景使用不同的泛型通配符/172

建議97: 警惕泛型是不能協變和逆變的/174

建議98: 建議採用的順序是list[t]、list[?]、list[object]/176

建議99: 嚴格限定泛型類型採用多重界限/177

建議100: 數組的真實類型必須是泛型類型的子類型/179

建議101: 注意class類的特殊性/181

建議102: 適時選擇getdeclared×××和get×××/181

建議103: 反射訪問屬性或方法時將accessible設定為true /182

建議104: 使用forname動態載入類檔案/184

建議105: 動態載入不適合數組/186

建議106: 動態代理可以使代理模式更加靈活/188

建議107: 使用反射增加裝飾模式的普適性/190

建議108: 反射讓模板方法模式更強大/192

建議109: 不需要太多關注反射效率/194

第8章 異常/197

建議110: 提倡異常封裝/198

建議111: 採用異常鏈傳遞異常/200

建議112: 受檢異常儘可能轉化為非受檢異常/202

建議113: 不要在finally塊中處理返回值/204

建議114: 不要在構造函式中拋出異常/207

建議115: 使用throwable獲得棧信息/210

建議116: 異常只為異常服務/212

建議117: 多使用異常,把性能問題放一邊/213

第9章 多執行緒和並發/215

建議118: 不推薦覆寫start方法/216

建議119: 啟動執行緒前stop方法是不可靠的/218

建議120: 不使用stop方法停止執行緒/220

建議121: 執行緒優先權只使用三個等級/224

建議122: 使用執行緒異常處理器提升系統可靠性/226

建議123: volatile不能保證數據同步/228

建議124: 異步運算考慮使用callable接口/232

建議125: 優先選擇執行緒池/233

建議126: 適時選擇不同的執行緒池來實現/237

建議127: lock與synchronized是不一樣的/240

建議128: 預防執行緒死鎖/245

建議129: 適當設定阻塞佇列長度/250

建議130: 使用countdownlatch協調子執行緒/252

建議131: cyclicbarrier讓多執行緒齊步走/254

第10章 性能和效率/256

建議132: 提升java性能的基本方法/257

建議133: 若非必要,不要克隆對象/259

建議134: 推薦使用“望聞問切”的方式診斷性能/261

建議135: 必須定義性能衡量標準/263

建議136: 槍打出頭鳥—解決首要系統性能問題/264

建議137: 調整jvm參數以提升性能/266

建議138: 性能是個大“咕咚”/268

第11章 開源世界/271

建議139: 大膽採用開源工具/272

建議140: 推薦使用guava擴展工具包/273

建議141: apache擴展包/276

建議142: 推薦使用joda日期時間擴展包/280

建議143: 可以選擇多種collections擴展/282

第12章 思想為源/285

建議144: 提倡良好的代碼風格/286

建議145: 不要完全依靠單元測試來發現問題/287

建議146: 讓注釋正確、清晰、簡潔/290

建議147: 讓接口的職責保持單一/294

建議148: 增強類的可替換性/295

建議149: 依賴抽象而不是實現/298

建議150: 拋棄7條不良的編碼習慣/299

建議151: 以技術員自律而不是工人/301

相關詞條

相關搜尋

熱門詞條

聯絡我們