2015070503 - EffactiveJava笔记 - 第63条 细节消息中捕获失败的信息

   20150704 星期六 北京

   程序为捕获的异常而失败,系统会自动打印该异常的堆栈轨迹,在堆栈中包含该异常的字符串表示法(它的toString方法结果,包含类名,消息细节)

   因此对于程序开发者或者运维人员,异常类型的toString方法应该尽可能返回有关联失败原因的信息,即异常的细节消息应该捕获住失败,便于以后分析.

   为了捕获失败,异常的细节信息应该包括所有”对该异常有贡献”的参数和属性值.例如数组下标越界异常的细节应该包括下界,上界,以及没有落在界内的下标值.那么开发人员可以很快查找错误,加速诊断过程.

   异常的细节信息,给软件使用者的消息必须是可理解的;给开发和维护人员的信息是用来分析失败原因的,因此信息内容比可读性更重要.

   如何在确保确保异常信息中包含足够捕获失败的信息呢?

   在异常的构造器而不是字符串细节中引入异常信息,然后进行消息描述.

   (很遗憾jdk1.6-1.8的源码和作者的举例已经完全不同!)

   参考作者举例

   IndexOutOfBoundsException中并不是有String的构造器,而是有这样的构造器.(构造器==构造方法)

  
public IndexOutOfBoundsException (int lowerBound, int upperBound, int index) {
    super("lowerBound: " + lowerBound + "upperBound:  " + upperBound + "index:  " + index);
    this. lowerBound = lowerBound;
    this. upperBound = upperBound;
    this. index = index;
}

   Java平台没有广泛使用这种做法,这种做法值得推荐,使开发人员容易捕获失败(为啥呢,从jdk1.6构造方法就和此构造器不同,是不是在1.6之前采用此方法呢?).

   这种做法可以有效把代码集中在异常类中,产生高质量的细节,而不是要求每个客户多余地产生类的细节消息.

   为异常的”失败捕获”信息提供访问方式是合适的, 对检查时异常提供访问方法非常重要;对运行时异常,作为一般原则提供这些访问方法同样是明智的.

   {你如何使用上面的知识呢?

   1.异常细节包含对该异常有用的参数和属性的值

   2.新构建的异常类中包含导致此异常原因的属性,抛出(检查or运行)异常时对各个属性赋值足够有价值的数据

   3.异常给客户的信息和给开发维护人员的信息不同,给客户信息要求可理解的,给开发人员的信息内容高于可理解}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值