更新時間:2019-04-12 10:35:10 來源:動力節點 瀏覽2384次
在寫代碼的過程中,我們很容易忽略一些問題,針對這些問題小編匯總了以下幾點,希望可以幫助到大家:
糾結的同名
現象
很多類的命名相同(例如:常見于異常、常量、日志等類),導致在import時,有時候張冠李戴,這種錯誤有時候很隱蔽。因為往往同名的類功能也類似,所以IDE不會提示warn。
解決
寫完代碼時,掃視下import部分,看看有沒有不熟悉的。替換成正確導入后,要注意下注釋是否也作相應修改。
啟示
命名盡量避開重復名,特別要避開與JDK中的類重名,否則容易導入錯,同時存在大量重名類,在查找時,也需要更多的辨別時間。
不要影響彼此
現象
在釋放多個IO資源時,都會拋出IOException,于是可能為了省事如此寫:
publicstaticvoidinputToOutput(InputStreamis,OutputStreamos,booleanisClose)throwsIOException{BufferedInputStreambis=newBufferedInputStream(is,1024);BufferedOutputStreambos=newBufferedOutputStream(os,1024);….if(isClose){bos.close;bis.close;}}
假設bos關閉失敗,bis還能關閉嗎?當然不能!
解決辦法
雖然拋出的是同一個異常,但是還是各自捕獲各的為好。否則第一個失敗,后一個面就沒有機會去釋放資源了。
啟示
代碼/模塊之間可能存在依賴,要充分識別對相互的依賴。
忘設初始容量
現象
在JAVA中,我們常用Collection中的Map做Cache,但是我們經常會遺忘設置初始容量。
cache=newLRULinkedHashMap<K,V(maxCapacity);
解決
初始容量的影響有多大?拿LinkedHashMap來說,初始容量如果不設置默認是16,超過16×LOAD_FACTOR,會resize(2*table.length),擴大2倍:采用EntrynewTable=newEntry[newCapacity];transfer(newTable),即整個數組Copy,那么對于一個需要做大容量CACHE來說,從16變成一個很大的數量,需要做多少次數組復制可想而知。如果初始容量就設置很大,自然會減少resize,不過可能會擔心,初始容量設置很大時,沒有Cache內容仍然會占用過大體積。其實可以參考以下表格簡單計算下,初始時還沒有cache內容,每個對象僅僅是4字節引用而已。
啟示
不僅是map,還有stringBuffer等,都有容量resize的過程,如果數據量很大,就不能忽視初始容量可以考慮設置下,否則不僅有頻繁的resize還容易浪費容量。
在Java編程中,除了上面枚舉的一些容易忽視的問題,日常實踐中還存在很多。相信在不斷的實踐中自己就可以發現并改正。
相關閱讀
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習