各個地方引用過來的前人的經驗,持續不斷更新中。。。
常量類定義(《Effective Java》)
定義私有的構造方法,使其不可被實例化
注:常量接口模式是對接口的不良使用
public class Util {
private Util() {
}
/**
* 登陸時 手機號未注冊
*/
public static final String MOBILE_NOT_REGISTER = "手機號未注冊!";
/**
* 手機號碼錯誤
*/
public static final String MOBILE_IS_ERROR = "請填寫正確的手機號碼!";
/**
* 驗證碼錯誤
*/
public static final String AUTHCODE_IS_ERROR = "驗證碼錯誤!";
/**
* 手機號碼已經被注冊
*/
public static final String MOBILE_IS_REGISTER = "該手機號碼已被注冊!";
/**
* ...........................
*/
}
獲取整數類型的隨機數
不推薦使用
Math.random();//然后乘以N倍獲取整數
使用
new Random().nextInt(101);//輸出0~100之間的隨機數,包含0和100
所有相同類型的包裝類對象比較值統一使用equals();
使用
"test" .equals(object);
替換
object.equals("test");
Object的equals方法容易拋空指針異常,應使用常量或確定有值得對象來調用equals
推薦使用java.util.Objects#equals (JDK7引入的工具類)
獲取系統時間
使用:
System.currentTimeMillis();
替換:
new Date().getTime();
以提高性能
for循環設值
避免每次循環都會取值跟賦值,以提高性能。
List<String> list = new ArrayList<Stirng>();
for (int i = 0; i < list.size(); i++) {
// 循環操作
}
建議改為:
List<String> list = new ArrayList<Stirng>();
for (int i = 0, n = list.size(); i < n; i++) {
// 循環操作
}
或者:
List<String> list = new ArrayList<Stirng>();
int n = list.size();
for (int i = 0; i < n; i++) {
// 循環操作
}
乘法和除法使用移位操作
用移位操作可以極大地提高性能,因為在計算機底層,對位的操作是最方便、最快的.
例如:
for (itn i = 0,n = 10; i < n ; i++){
a = a * 8;
b = b / 2;
}
建議改為:
for (itn i = 0,n = 10; i < n ; i++){
a = a << 3;
b = b >> 1;
}
- 左移運算符( << ),num << 1,相當于num乘以2
- 右移運算符( >> ),num >> 1,相當于num除以2
判斷兩個對象是否equal
使用Objects.equals()方法,可以避免空指針異常
String str1 = null,str2 = "test";
str1.equals(str2);// 空指針異常
Objects.equals(str1,str2);// OK
Objects.equals的實現為
public static boolean equals(Objecta,Objectb){
return (a == b) || (a != null && a.equals(b));
}
避免創建不必要的對象(《Effective Java》)
一個極端的例子:
String s = new String("string"); // Don't do this
該語句每次執行的時候都會創建一個新的String實例,但是這寫創建對象的動作全都是不必要的,傳遞個String構造器的參數(“string”)本身就是一個實例,功能方面等同于構造器創建的所有對象。
改進:
String s = "string"; // Do this