Java開發小技巧

來源:互聯網
上載者:User

1.在連接字串的時候盡量避免使用String= "str"+"str2"; 而使用StringBuffer str = newStringBuffer("str");str.append("str2")代替

2. 多使用PreparedStatement代替Statement 這樣可以避免在拼接字串的時候出現"select* fromtablename where col = '"+col+"'"單引號過多的情況,3在拚接查詢語句的時候加上"where1=1 "道理:當你有很多查詢條件的時候,你不知道那些個會有,哪些個沒有,如果一個沒有的話,是不是就不用where 子句了呢

3.如果只有一個條件的話,是不是只要一個where 子句就搞定了呢?又如果有2 個以上,就需要用and 來串連了。。基於上訴的情況,勤勞的程式員們想出了一個好用的辦法,加個where 1=1後面不管有多少個條件有則加and,沒有的話就什麼都不用做,相比較之前的3 中情況的判斷來說,比較方便。這種sql 開關代碼,可是編程中的大忌啊!首先這麼寫的目的是預留開關,給今後參數的改變帶來方便,但這樣同時會造成資料庫對該條語句的explainplan 不能做到完全穩定不變,而且也會造成代碼不能被sgaping
在記憶體裡,如果是頻繁被調用的代碼會造成很嚴重的效能問題,深入的原理大家可以從dba 方面的書籍中找到。這種開關代碼在10 來年前大行其道,但現在隨著各公司水平的提高基本都能根據自身需要實現個人化的orm 層了,所以早已經被證明是不好的設計。

 

4.多使用MessageFormat類

5.代碼中盡量少出現"123".equals(str)這樣的危險字元,而要public static final StringSTR = "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; 可以最佳化為returnreturn result.size()>0

(3) 使用"const".eqauls(variable)代替variable.eqauls("const")避免nullpoint 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(inti= 100;i>0;i--;)去代替for(inti = 0;i <100;i++) 這樣可以提高程式的運行速度

(14) 寫注釋有助於寫出邏輯清晰的代碼

(15) 用字元分隔多字串時,為了防止字串中有設定的分隔字元,我採用如下字元進行分隔(c#的,JAVA 也差不多)char char2 = '\x0012';string strreg = ""; strreg += char2;

16) 一個資料有很多屬性時,可以用反射取出所有屬性,在製作HTML 表單時,這個方法非常爽

(17) 在表單取值的時候,多使用StringA = B.trim();來去空格

(18) 可以用for(inti= 100;i>0;i--;)去代替for(inti = 0;i <100;i++) 這樣可以提高程式的運行速度

(19) 把某非String 類型轉換成String 類型的,大多用.toString(); 但可以用String.valueof(...);

(20) 內部類愛好者+ 匿名內部類狂熱分子

(21) 類名首字母應該大寫。欄位、方法以及對象(控制代碼)的首字母應小寫。對於所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。例如:ThisIsAClassNamethisIsMethodOrFieldName若在定義中出現了常數初始化字元,則大寫static final 基本類型標識符中的所有字母。這樣便可標誌出它們屬於編譯期的常數。Java 包(Package)屬於一種特殊情況:它們全都是小寫字母,即便中間的單詞亦是如此。對於網域名稱副檔名稱,如com,org,net
或者edu 等,全部都應小寫(這也是Java 1.1 和Java 1.2 的區別之一)

(22) 為了常規用途而建立一個類時,請採取"經典形式",並包含對下述元素的定義:equals(),hashCode(),toString(),clone(),(implementCloneable)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 塊,開始清除工作。

1、 去掉一個字串數組中的重複項:原來採用的方法:

String[] rid =request.getParameterValues("noattRid");

//需要用一個臨時的變數把過濾後的結果這個存起來

String[] ridFiltered = new String[rid.length];

int index= 0;

for (int i = 0; i < rid.length; i++){

if (!this.isExistString(ridFiltered,rid[i])&&!rid[i].equals("")) {

ridFiltered[index++] = rid[i];

}

}

 

 //還需要用一個方法來判斷在結果中是否存在此項,如下

 /**

 * 用於尋找某個字串是否在一個字串數組中

 * @param dest String[]

 * @param str String

 * return boolean

 */

 

publicboolean isExistString(String[]dest, String str) {

boolean flag =false;

for (int i = 0; i < dest.length;i++) {

 if (str.equals(dest[i])) {

 flag = true;

 }

 }

 return flag;

 }

看看,要多麻煩有多麻煩,來看看新方法:

String[] s = request.getParameterValues("noattRid");

List list = Arrays.asList(s);

Set set = new HashSet(list);

//rid=(String [])set.toArray();

String[] temp = new String[set.size()];

Iterator ite = set.iterator();

for (int i = 0; ite.hasNext(); i++) {

temp[i] = (String) ite.next();

}

簡簡單單的幾行代碼即可搞定,無論是從程式的可讀性、優雅性還是效率方面都有很好的提升。

擴充:你同時還可以運用上面的方法還判斷三個字串是否相等(可進一步擴充至多個,但是似乎不太有實際意義),常式如下:

 String[] s ={"one", "two", "two"};

 List list =Arrays.asList(s);

 Set set = new HashSet(list);

 System.out.println(list.size() ==set.size()); // false

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.