Java(45):Java小结之异常篇

本文总结了《Effective Java》中关于异常处理的最佳实践,包括异常设计原则、异常类型、异常文档、失败原子性等关键概念,以及如何正确使用异常进行错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019年3月8日08:58:23

  • 《 effective java》总结:

一、异常用于异常情况使用而设计,不要用于普通控制流;

二、java目前有三种可抛出结构:受检异常(checked exception)、运行时异常(run-time exception)、错误(error);

三、“受检异常=》未受检异常”:将抛异常方法分成两个方法:一个是返回一个boolean,表明是否抛异常;

        if(obj.actionPermitted(args)){
             obj.action(args);
        }else{
            //Handle exception condition
        }

四、异常转译(exception translation):更高层的实现,应该捕获底层的异常,同时抛出可以按照高层抽象进行解释的异常;

 

五、异常文档:就是每个异常最好都辅以说明;

六、异常的细节信息,应该包含所有“对异常有帮助”的参数和域值;系统会自动打印该异常的堆栈轨迹(确切文件和行号,其他方法调用所在的文件和行数),异常的字符串表示法(string representation)主要是让开发者分析失败的原因;

一个方法是,在异常的构造器引入,而不是字符串细节信息引入这些消息;

七、异常失败,应该保持原子性:失败的方法调用应该使对象保持在被调用之前的状态。具有这种属性的方法被称为“具有失败原子性”:

   public synchronized E pop() {
        if(size == 0){
            throw new EmptyStackException();
        }
        int var2 = this.size();
        Object var1 = this.peek();
        this.removeElementAt(var2 - 1);
        return var1;
    }

第二种,写恢复代码(不常用);

第三种,在临时拷贝上操作,操作结束后替代对象内容;(常用,eg:Collections.sort,实际上排序是对ArrayList的数组进行拷贝后,进行操作后再return;可以详细看源码实现)

T[] aux = copyOfRange(a, fromIndex, toIndex);

八、try..catch..中的catch字句模块,要写点有用的信息;别忽略掉异常。

 

Java编程常用异常

异常使用场合
IllegalArgumentException非null的参数值不正确
IllegalStateException对于方法调用而言,对象状态不合适
NullPointerExceptionnull参数
IndexOutOfBoundsException下标参数值越界
ConcurrentModificationException并发修改
UnsupportedOperationException对象不支持用户 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值