JAVA編碼規範 效能與可靠性

2021-06-12 07:57:45 字數 2198 閱讀 9696

規則1陣列複製使用system.arraycopy(*)。(1.42+)

說明:更好的效能

規則2不要使用迴圈將集合轉為陣列,可以使用集合的toarray()方法。(1.42+)

說明:更好的效能,**更加簡潔

示例:arraylist list = new arraylist();

list.add....

string array = new string[list.size()];

list.toarray(array);

規則3大量字串的相加等於處理應該使用stringbuffer。(1.42+)

說明:大量的string相加等於處理效能消耗較多。「大量」一般指5次「+=」以上或者在迴圈中進行字串+=操作。

示例:不推薦:

string str = 「」;

str += 」a」;

str += 」b」;

推薦:

stringbuffer sb = new stringbuffer();

規則4對類中日誌工具物件logger應宣告為static. (1.42+)

說明:防止重複new出logger物件(logger指各種日誌工具類,可以是log4j,common log,jdk logger,內部api等,儘管一些logger對logfactory工廠有一些優化,但是我們也必須防止**沒有必要的執行)。

規則5類的靜態成員不允許使用

hashmap

,而應該使用

hashtable

或者同步的

hashmap. (1.42+)

說明:類的靜態成員有可能被多執行緒進行訪問,而使用的

jdk的

hashmap

存在乙個

bug,容易在多執行緒訪問是造成

jre的死迴圈。

規則6單例類的獲取例項方法要求同步處理。

說明:由於存在多執行緒訪問情況,所以要求單例的獲取例項方法加上同步標誌,如下:

/**

* 單例項

*@returnteboardonlineevent */

public

synchronized

staticteboardonlineevent getinstance()

returninstance;

} 建議1public

型別的底層函式需對輸入引數進行判斷,引數不合法應該主動丟擲runtimeexception。(1.42+)

說明:底層函式必須保證輸入引數正確性再進行其他處理(防止後面的**丟擲錯誤,減少沒有必要的後續**執行)。使用runtimeexception減少了try catch滿天飛,並有利於快速定於異常**。

示例:public void dodivide(int a,int b)

... }

建議2盡量使用jdk自帶的api函式,不要自己寫類似功能的函式. (1.42+)

說明:jdk自身的函式在可靠性,效能方面一般有更好的表現,大家必須熟練掌握,特別是演算法方面的。

建議3

io操作流使用有buffer功能的class. (1.42+)

說明:更好的效能,沒有buffer的輸出流頻繁io操作,效率反倒低。

示例:fileoutputstream file= new fileoutputstream("test.txt");

bufferedoutputstream out =  new bufferedoutputstream(file);

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

out.flush();

研發中版本管理的規範性

案例1 這階段公司內部在測試乙個即將上線的產品,好幾次都遇到執行良好的服務在某個時間段後不能提供正確服務的情況,由於產品涉及到多個端,協作人員眾多,而且各端軟體的更替也較頻繁,在從內部排查問題的同時也在從外部著手確定是否有人更改過某個程式,眾研發人員都說沒有更改過程式。但是隨著排查的深入往往會發現是...

研發中版本管理的規範性

案例1 這階段公司內部在測試乙個即將上線的產品,好幾次都遇到執行良好的服務在某個時間段後不能提供正確服務的情況,由於產品涉及到多個端,協作人員眾多,而且各端軟體的更替也較頻繁,在從內部排查問題的同時也在從外部著手確定是否有人更改過某個程式,眾研發人員都說沒有更改過程式。但是隨著排查的深入往往會發現是...

研發中版本管理的規範性

案例1 這階段公司內部在測試乙個即將上線的產品,好幾次都遇到執行良好的服務在某個時間段後不能提供正確服務的情況,由於產品涉及到多個端,協作人員眾多,而且各端軟體的更替也較頻繁,在從內部排查問題的同時也在從外部著手確定是否有人更改過某個程式,眾研發人員都說沒有更改過程式。但是隨著排查的深入往往會發現是...