Java開發小技巧總結
"const".eqauls(variable)代替 variable.eqauls("const")
"".equals(str)代替str.equals("")
還有用null==物件
代替
物件==null
避免null point exception
1.在連線字串的時候儘量避免使用String = "str"+"str2";
而使用StringBuffer str = new StringBuffer("str");str.append("str2")代替
2. 多使用PreparedStatement代替Statement這樣可以避免在拼接字串的時候出現
"select * from tablename where col = '"+col+"'"單引號過多的情況
3.在拚接查詢語句的時候加上"where 1=1 "道理:
當你有很多查詢條件的時候,你不知道那些個會有,哪些個沒有,如果一個沒有的話,是不是就不用where子句了呢
?如果只有一個條件的話,是不是隻要一個where子句就搞定了呢?又如果有2個以上,就需要用and來連線了。。基
於上訴的情況,勤勞的程式設計師們想出了一個好用的辦法,加個where 1=1 後面不管有多少個條件
有則加and,沒有的話就什麼都不用做,相比較之前的3中情況的判斷來說,比較方便。
這種sql開關程式碼,可是程式設計中的大忌啊!首先這麼寫的目的是預留開關,給今後引數的改變帶來方便,但這樣同時會造成資料庫對該條語句的explain plan不能做到完全穩定不變,而且也會造成程式碼不能被sga ping在記憶體裡,如果是頻繁被呼叫的程式碼會造成很嚴重的效能問題,深入的原理大家可以從dba方面的書籍中找到。這種開關程式碼在10來年前大行其道,但現在隨著各公司水平的提高基本都能根據自身需要實現個性化的orm層了,所以早已經被證明是不好的設計。
4.多使用MessageFormat類
5.程式碼中儘量少出現"123".equals(str)這樣的危險字元(我們公司是這樣定義的)而要
public static final String STR = "123"; STR.equals(str)去代替.
6.方法的命名要能夠表達出方法的功能
在for迴圈裡要注意
for(int i = 0; i < 呼叫某個方法返回值;i++)
這種寫法要改成
int y = 呼叫某個方法返回值;
for(int i = 0;i < y;i++)
(1) 使用Integer.valueOf()代替new Integer();
(2) if (result.size() > 0) return true;
return false;
可以優化為return return result.size()>0
(3) 使用"const".eqauls(variable)代替 variable.eqauls("const") 避免null point exception
(4) 在使用字串的拼接的時候,建議使用StringBuffer代替String
(5) 在進行資料庫操作的時候用PreparedStatement代替Statement,可以避免因為引號過多而引起的錯誤
(6) 在進行復雜查詢語句的拼接的時候,建議加上"where 1=1",當然在不考慮資料庫的效能.
(7)try{}catch(Exception e){} finally{if(conn!=null){conn.colse();conn==null}}在使用資料庫操作的
時候儘量多用finally語句,進行資源的釋放。
(8) 在進行多異常捕獲的時候,最後建議加上Exception異常做沒有考慮到的異常捕獲,比如
try{}catch(OtherException e){}catch(Exception e){} finally{if(conn!=null){conn.colse();conn==null}}
(9) 給每個if(condition){}都加上大括號,即使裡面只有一句話,加強程式的可讀性
(10)能用常量的東西都要用常量來完成,避免使用硬編碼,增加可維護性質。比如少用 String str = "123"
使用private static final CONST = "123" ; String str = CONST;
(11) 定義的靜態的常量用全大寫,方法名開頭用小寫,類名用大寫。在bean中定義的變數名用小寫,並且所有的名字
命名要體現出業務的特性。呵呵,這裡說到了規範。。。
(12) 多看看Apache下的一些Utils包吧!方便實用,必備工具!
(13) 可以用for(int i= 100;i>0;i--;)去代替for(int i = 0;i <100;i++) 這樣可以提高程式的執行速度
(14) 寫註釋有助於寫出邏輯清晰的程式碼
(15) 用字元分隔多字串時,為了防止字串中有設定的分隔符,我採用如下字元進行分隔 (c#的,JAVA也差不多)
char char2 = '/x0012'; string strreg = ""; strreg += char2;
16) 一個數據有很多屬性時,可以用反射取出所有屬性,在製作HTML表單時,這個方法非常爽
(17) 在表單取值的時候,多使用String A = B.trim();來去空格
(18) 可以用for(int i= 100;i>0;i--;)去代替for(int i = 0;i <100;i++) 這樣可以提高程式的執行速度
(19) 把某非String型別轉換成String型別的,大多用.toString(); 但可以用String.valueof(...);
(20) 內部類愛好者 + 匿名內部類狂熱分子
(21) 類名首字母應該大寫。欄位、方法以及物件(控制代碼)的首字母應小寫。對於所有識別符號,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定義中出現了常數初始化字元,則大寫static final基本型別識別符號中的所有字母。這樣便可標誌出它們屬於編譯期的常數。
Java包(Package)屬於一種特殊情況:它們全都是小寫字母,即便中間的單詞亦是如此。對於域名副檔名稱,如com,org,net或者edu等,全部都應小寫(這也是Java 1.1和Java 1.2的區別之一)。
(22) 為了常規用途而建立一個類時,請採取"經典形式",幷包含對下述元素的定義:
equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable
(23) 對於自己建立的每一個類,都考慮置入一個main(),其中包含了用於測試那個類的程式碼。為使用一個專案中的類,我們沒必要刪除測試程式碼。若進行了任何形式的改動,可方便地返回測試。這些程式碼也可作為如何使用類的一個示例使用。
(24) 應將方法設計成簡要的、功能性單元,用它描述和實現一個不連續的類介面部分。理想情況下,方法應簡明扼要。若長度很大,可考慮通過某種方式將其分割成較短的幾個方法。這樣做也便於類內程式碼的重複使用(有些時候,方法必須非常大,但它們仍應只做同樣的一件事情)。
25) 設計一個類時,請設身處地為客戶程式設計師考慮一下(類的使用方法應該是非常明確的)。然後,再設身處地為管理程式碼的人考慮一下(預計有可能進行哪些形式的修改,想想用什麼方法可把它們變得更簡單)。
(26) 使類儘可能短小精悍,而且只解決一個特定的問題。下面是對類設計的一些建議:
■一個複雜的開關語句:考慮採用"多形"機制
■數量眾多的方法涉及到型別差別極大的操作:考慮用幾個類來分別實現
■許多成員變數在特徵上有很大的差別:考慮使用幾個類
(27) 讓一切東西都儘可能地"私有"--private。可使庫的某一部分"公共化"(一個方法、類或者一個欄位等等),就永遠不能把它拿出。若強行拿出,就可能破壞其他人現有的程式碼,使他們不得不重新編寫和設計。若只公佈自己必須公佈的,就可放心大膽地改變其他任何東西。在多執行緒環境中,隱私是特別重要的一個因素--只有private欄位才能在非同步使用的情況下受到保護。
(28) 謹惕"巨大物件綜合症"。對一些習慣於順序程式設計思維、且初涉OOP領域的新手,往往喜歡先寫一個順序執行的程式,再把它嵌入一個或兩個巨大的物件裡。根據程式設計原理,物件表達的應該是應用程式的概念,而非應用程式本身。
(29) 若不得已進行一些不太雅觀的程式設計,至少應該把那些程式碼置於一個類的內部。
(30) 任何時候只要發現類與類之間結合得非常緊密,就需要考慮是否採用內部類,從而改善編碼及維護工作
31) 儘可能細緻地加上註釋,並用javadoc註釋文件語法生成自己的程式文件。
(32) 避免使用"魔術數字",這些數字很難與程式碼很好地配合。如以後需要修改它,無疑會成為一場噩夢,因為根本不知道"100"到底是指"陣列大小"還是"其他全然不同的東西"。所以,我們應建立一個常數,併為其使用具有說服力的描述性名稱,並在整個程式中都採用常數識別符號。這樣可使程式更易理解以及更易維護。
(33) 涉及構建器和異常的時候,通常希望重新丟棄在構建器中捕獲的任何異常--如果它造成了那個物件的建立失敗。這樣一來,呼叫者就不會以為那個物件已正確地建立,從而盲目地繼續。
(34) 當客戶程式設計師用完物件以後,若你的類要求進行任何清除工作,可考慮將清除程式碼置於一個良好定義的方法裡,採用類似於cleanup()這樣的名字,明確表明自己的用途。除此以外,可在類內放置一個boolean(布林)標記,指出物件是否已被清除。在類的finalize()方法裡,請確定物件已被清除,並已丟棄了從RuntimeException繼承的一個類(如果還沒有的話),從而指出一個程式設計錯誤。在採取象這樣的方案之前,請確定finalize()能夠在自己的系統中工作(可能需要呼叫System.runFinalizersOnExit(true),從而確保這一行為)。
(35) 在一個特定的作用域內,若一個物件必須清除(非由垃圾收集機制處理),請採用下述方法:初始化物件;若成功,則立即進入一個含有finally從句的try塊,開始清除工作。