![java優秀通用設計,程序員基礎打牢叫22K以上,真的不心虛](http://p2.ttnews.xyz/loading.gif)
現在很多程序員不屑基礎知識,我覺得基礎非常重要
我的口號是:基礎打牢,開車不飄
環境
java1.8
幫助人群
java軟件工程師、java後端開發、準備面試的java軟件開發、
通用程序設計
下面分析幾個典型的代碼設計,很多程序員知道用,卻不清楚這些細節
for-each循環優先於傳統for循環
循環在jdk1.5前都是 傳統for+Iterator方式
for(Iterator i=c.iterator();i.hasNext();) { (Element)i.next()}
jdk1.5後 for-each循環方式
for(Element e:elements){
doSomething(e);
}
注意
很多程序員都知道用for-each循環方式,因為代碼簡潔,其實不僅僅簡潔這麼簡單
- 通過完全隱藏迭代器Iterator、索引變量,避免了混亂和出錯可能
- for-each循環方式不會有性能損失
- 把樣板代碼封裝起來了 ,使用者關心業務就可以
- 在多層嵌套for循環,for-each循環方式威力就顯現出來了。
總之,for-each循環在簡潔性和預防BUG方面非常優秀
下面3種情況無法使用for-each循環
- 過濾 要遍歷集合,刪除指定元素,就需要使用顯示的Iterator,以便可以調用它的remove方法 ,切記刪除元素用Iterator的remove
- 轉換 如果需要遍歷集合,並取代它部分或全部的元素值,就需要集合Iterator、索引,以便設定元素的值。
- 平行迭代 如果需要平行遍歷多個集合,就需要顯示控制Iterator或索引變量
一句話總結,當需要精確控制操作元素索引位置時,請選擇傳統的for+Iterator方式
瞭如果需要精確的答案,請避免使用float和double
float和double類型主要為了科學計算和工程計算而設計。
貨幣計算切記用BigDeclmal,BigDeclmal好處完全控制舍入。
基本類型優先包裝類型
其實我根據阿里開發手冊寫過一篇,
包裝類大家天天用,細節很多都沒注意,我也吃了不少苦頭。
注意
- 基本類型只有值==,包裝類型是引用類型 equals
- 包裝類型初始值是null,基本類型初始如int 是0
- 基本類型更節省時間、空間。
- Comparator比較注意用基本類型去計算 >、
- Interge賦值到int有NPE風險,包裝類型注意防空啊
如果其他類型更合適,儘量避免使用字符串
- 如DTO對象的時間屬性不要String createTime,應該用Date;
- DTO中數量屬性建議用Interge,不要用int;
- 字符串不適合代替聚集類型,聚集類型建議用一個類對象來描述;
- domain對象中的狀態屬性,建議用枚舉類型,不要用String;
枚舉的好處,傳送門
總結
- 如果有更合適的數據類型或者可以編寫更加適當的數據類型,就應該避免用字符串。
- 不恰當的使用字符串,讓代碼變的更加笨拙、不靈活、速度慢、容易出錯。
很多程序員創建的pojo類,清一色的String類型。
通過接口引用對象
java精華多態,能用接口就用接口來定義類型
如果有合適的接口類型存在,那麼對於參數、返回值、遍歷和域,就都應該使用接口類型進行聲明。
接口、抽象可以用文章單獨來細講。
通過接口、或抽象類引用對象,讓代碼更加靈活
【內容參考資料:Effective Java 作者 美國 Joshua Bloch】好書建議大家可以看看。
閱讀更多 程序汪汪 的文章