• Effective java -- 8 异常


    第五十七条:只针对异常的情况才使用异常
    应该都有这个意识吧,就像什么抓索引越界什么的,没有必要。

    第五十八条:对可恢复情况使用受检查异常,对编程错误使用运行时异常
    三种可抛的异常:受检的异常(checked exception)、运行时异常(run-time exception)、错误(error)

    第五十九条:避免不必要地使用受检的异常

    第六十条:优先使用标准的异常
    IllegalArgumentException      非null的参数值不正确
    IllegalStateException        对于方法调用而言,对象状态不合适
    NullPointerException        空指针
    IndexOutOfBoundsException     索引越界
    ConcurrentModificationExcetion   在禁止并发的修改的情况下,检测到对象的并发修改
    UnsupportedOperationException    对象不支持用户请求的方法
    这个要说的就是记住一些常用的异常的用法,有必要子类化的时候可以子类化。

    第六十一条:抛出与抽象相对应的异常
    高层级的实现应该捕获第层的异常,同时抛出可以按照高层抽象进行解释的异常。
    说的有点难懂,看个例子就懂了

        ListIterator<E> iterator = listIterator(index);
        try {
          iterator.next();
        } catch (NoSuchElementException e) {
          throw new IndexOutOfBoundsException();
        }

    就是在低层抛出的NoSuchElementException对于next()方法根本不知道为什么会给返回一个这个东西,似乎和代码没什么关系,因此转换成IndexOutOfBoundsException告诉外层是因为索引月结才不能获取到next()。一般也要把原因传递给下一个异常。有个initCause()方法可以将抓到的异常设置在要抛出的异常上。但是不要乱用,能不用就不用,

    第六十二条:每个方法抛出的异常都要有文档

    第六十三条:在细节消息中包含能捕获失败的消息

    第六十四条:努力使失败保持原子性
    尽量使异常发生后,能让所有对象保持在未发生异常之前的状态。比如想获取下一个元素,需要让index加1,在取内容,但是取内容的时候索引越界了这时的index是加1之后的,作者的意思是应该让这个index在跳出异常之后使index恢复最开始的状态。不知道,不评价。

    第六十五条:不要忽略异常
    catch到异常后不要什么也不做。

  • 相关阅读:
    安卓长按应用图标弹出快捷方式(shortcut)
    网站主题变暗黑,快速解决
    android 11适配的其他注意点
    vue cli3.0构建多页面应用
    Alibaba Canal config 漏洞验证
    检测magiskhide
    Flutter垃圾回收器
    UIbutton 在动画过程中也能响应事件,主要利用layer的hitTest方法
    CocoaPods 私有化
    Android WorkManager使用入门
  • 原文地址:https://www.cnblogs.com/badboyf/p/6292782.html
Copyright © 2020-2023  润新知