JAVA编码习惯

经过一段时间的编码(咦,我已经经历了将近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")){ }
 

对象为空判断:

if(null == sex){}
避免写错sex=null (如果是javascript、则会被认为将sex设置为null值,判断条件则为true)
 
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){}


6:不要将空值添加到数组或者集合中

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());
            }
        }
}
此时会报NullPointerException异常。
 
7:总是在switch语句里加上default
Switch…作为最滑稽的表达式之一,我不知道是该心存敬畏还是默默哭泣。不管怎样,我们既然无法摆脱 switch ,在必要的时候我们最好能够正确使用它,例如:
switch (value) {
    case 1: foo(); break;
    case 2: bar(); break;
    default:
        throw new ThreadDeath("That'll teach them");
}
因为在当 value=3 被引入到软件中的时候,default 就能发挥作用,使其正常运行!别和我提 enum 类型,因为这对 enums 也一样适用。
 
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);
        }
}
使用三元表达式可以减少代码量。但使用三元表达式时需要注意以下事项:
三元运算符是必须要有返回值要求,其运算后一定会有一个结果返回供程序开发人员使用;
 
 

童鞋们,你们还遇到过哪些类似的问题呢?欢迎补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值