各个地方引用过来的前人的经验,持续不断更新中。。。
常量类定义(《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