经过一段时间的编码(咦,我已经经历了将近8年的编程生涯,快乐的日子总是过得很快),我们开始感谢那些好习惯。因为,你知道这样有利于减少BUG的概率!如:空指针的问题!
1:java.lang.NullPointerException的处理
如定义性别枚举类 SexEnum.java
public enum SexEnum {
MAN(1,"男"),
WOMAN(2,"女");
private Integer value;
private String test;
SexEnum(int value,String test){
this.test = test;
this.value = value;
}
public static SexEnum getEnumByValue(Integer value){
for(SexEnum sexEnum:SexEnum.values()){
if(sexEnum.getValue().equals(value)){
return sexEnum;
}
}
return null;
}
public Integer getValue() {
return value;
}
public String getTest() {
return test;
}
}
测试类
public static void main(String[] args) {
SexEnum sexEnum = SexEnum.getEnumByValue(3) ;
System.out.println(sexEnum.getValue());
}
运行时报:Exception in thread "main" java.lang.NullPointerException
所以建议在每次获取对象的属性值时,判断对象是否为NULL。更正为:
public static void main(String[] args) {
SexEnum sexEnum = SexEnum.getEnumByValue(3) ;
if(null!=sexEnum){
System.out.println(sexEnum.getValue());
}else {
System.out.println("对象为空");
}
}
运行结果为:对象为空
2:把字符串常量放在前面
字符判断:
<pre name="code" class="html">String sex = "aa";
if("aa".equals(sex)){}
这样可以防止sex为空,报NullPointerException异常。如下述错误的代码:<pre name="code" class="html">String sex = null;
if(sex.equals("aa")){ }
对象为空判断:
避免写错sex=null (如果是javascript、则会被认为将sex设置为null值,判断条件则为true)if(null == sex){}
3:判断两个对象是否相等时,尽量用equals、不要用==
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
Integer c = 1000;
Integer d = 1000;
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(c.equals(d));
System.out.println(c == d);
}
这段代码的运行结果为:true true true false
经过分析,Integer类型在-128到127之间采用==,可以使用==进行判断。超过这个范围则需要用equals进行判断。
4:不同类型之间的判断用equals始终为false
public static void main(String[] args) {
Long l = 0L;
System.out.println(l.equals(0L));
System.out.println(l.equals(0));
}
运行结果为:true false
第2行代码是同一个类型(Long)的对象进行判断、返回true
第3行代码是Long和int之间的判断、返回false
5:检查null和长度
对数组或者集合进行判断
List list = new ArrayList();
if(null != list && list.size()>0){}
此时会报NullPointerException异常。public static void main(String[] args) { List<SexEnum> list = new ArrayList(); list.add(null); if(null != list && list.size() > 0) { for (SexEnum sexEnum : list) { System.out.println(sexEnum.getValue()); } } }
7:总是在switch语句里加上default
Switch…作为最滑稽的表达式之一,我不知道是该心存敬畏还是默默哭泣。不管怎样,我们既然无法摆脱 switch ,在必要的时候我们最好能够正确使用它,例如:
因为在当 value=3 被引入到软件中的时候,default 就能发挥作用,使其正常运行!别和我提 enum 类型,因为这对 enums 也一样适用。switch (value) { case 1: foo(); break; case 2: bar(); break; default: throw new ThreadDeath("That'll teach them"); }
8:用大括号隔开 switch 的每一个 case 块
事实上,switch是最坑爹的语句,任何喝醉了或是赌输了的人都可以在某种语言中使用它。看看下面这个例子:
switch (value) { case 1: { final int j = 1; break; } case 2: { final int j = 2; break; } // Remember: default: throw new ThreadDeath("That'll teach them"); }
9:使用三元表达式
使用三元表达式可以减少代码量。但使用三元表达式时需要注意以下事项:public static void main(String[] args) { System.out.println(true ? 1 : 0); if(true){ System.out.println(1); }else{ System.out.println(0); } }
三元运算符是必须要有返回值要求,其运算后一定会有一个结果返回供程序开发人员使用;
童鞋们,你们还遇到过哪些类似的问题呢?欢迎补充