天道不一定酬所有勤
但是,天道只酬勤
Hollis出品的全套Java面试宝典不来了解一下吗?

[读书笔记]Effective Java (持续更新)

Hollis出品的全套Java面试宝典不来了解一下吗?

枚举

擅用枚举代替int和String

可以在枚举中定义一个抽象方法,要求每个主体中实现(必须实现),如:

 public enum Operation{
    PLUS{double apply(double x,double y){return x+y;}},
    MINUS{double apply(double x,double y){return x-y;}};
    abstract double apply(double x,double y);
}

Operation.valueOf("PLUS") = PLUS

Operation.valueOf("PLUS").ordinal() = 0

避免使用序数 序数就是ordinal返回的数,应该用下面这种实例域代替序数:

public enum Color{
    RED(1),
    GREEN(2);
    private int i;
    Color(int i){
        this.i = i;
    }
    int getI(){
        return this.i;
    }
}

代码中的1,2就是实例域。


注解

针对只有在抛出异常时才成功的测试的注解:@ExceptionTest(Exception.class)

@ExceptionTest{NullPointerException.class,IndexOutOfBoundsException.class}

为避免方法被重载,保留Override注解


方法

先检查参数的有效性

在公有方法的JavaDoc中写明哪些情况可能抛出哪些异常

在检查参数时,该抛出的异常就throw出去

非公有方法通常使用断言(assert)检查参数:

assert a!=null;

针对一个JavaBean中的某一个成员变量,要注意他本身是不是可变的,如果是,要考虑进行保护性拷贝:

见:P159

通常使用Date.getTime()返回的long基本类型作为内部的时间表示法。

尽量不要提供两个参数数目相同的重载方法

返回零长度的数组或者集合,而不是null

Collections.emptyList()方法可以返回一个预定义不可变空列表

异常

只针对异常情况才使用异常
不要使用异常来控制流。

对于可以恢复的异常使用受检异常(非运行时异常),对于编程错误使用运行时异常

过分使用受检异常会是程序变得难于使用

赞(1)
如未加特殊说明,此网站文章均为原创,转载必须注明出处。HollisChuang's Blog » [读书笔记]Effective Java (持续更新)
Hollis出品的全套Java面试宝典不来了解一下吗?

评论 抢沙发

HollisChuang's Blog

联系我关于我