Java异常

异常分类

所有的异常都继承自Throwable类。

Error类描述了Java运行时系统的内部错误和资源耗尽错误。此种异常不应该由程序抛出,若出现这种异常,应通告给用户并尽力使程序安全地终止。

Exception类是应用程序抛出的错误。Exception类包括IO异常类和运行时异常类。

RuntimeException类包括错误的类型转换、数组访问越界和访问null指针。在程序中应该杜绝此类异常的发生。

IOException类包括试图在文件尾部后面读取数据、试图打开一个不存在的文件和试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。此类异常需要在程序中手动抛出。

Error类或RuntimeException类的所有异常称为不可查异常,所有其他异常称为可查异常。一个方法必须声明所有可能抛出的可查异常,而非可查异常要么不可控制,要么就应该避免发生。

使用异常机制的技巧

  • 异常处理不能代替简单的测试。

    如果要对一个栈进行退栈操作,可能存在的异常是这个栈是一个空栈。那么我们最好使用!s.empty()来检查该栈是否为空,若不为空再进行退栈,而不应该使用抛出异常的方式。

    1
    2
    3
    4
    // right,运行时间646ms
    if (!s.empty()) {
    s.pop();
    }
    1
    2
    3
    4
    5
    6
    // error,运行时间21739ms
    try {
    s.pop();
    } catch (EmptyStackException e) {
    ...
    }
  • 不要过分地细化异常

    对一个栈进行退栈操作,然后把这个值放在一个文件里。这两步操作都有可能出现异常,如果分别进行捕获,当第一步出现异常时,程序会继续去执行第二个操作,这样就不没有什么意义了,我们希望下一步操作也终止。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // error,代码臃肿
    PrintStream out;
    Stack s;
    for (i = 0;i < 100; i++) {
    try {
    n = s.popO;
    } catch (EmptyStackException e) {
    ...
    }

    try {
    out.writelnt(n);
    } catch (IOException e) {
    ...
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // right,任何一个操作出现问题,整个任务可以取消
    try {
    for (i = 0; i < 100; i++) {
    n = s.popO ;
    out.writelnt(n);
    }
    } catch (IOException e) {
    ...
    } catch (EmptyStackException e) {
    ...
    }
  • 利用异常层次结构

    不要只抛出RuntimeException异常,应该寻找更加适合的子类或创建自己异常类;不要只捕获Thowable异常,否则会使程序代码更难读和维护;不要为错误逻辑抛出异常;可将一种异常转化为另一种更合适的异常,例如,在解析某个文件中的一个整数时,捕获NumberFormatException异常,然后将它转换成IOException或MySubsystemException的子类。

  • 不要压制异常

    若一个方法抛出一个异常,另一个方法在调用它的时候,就必须对这个异常进行处理,否则编译不会通过。但是这个异常可能

  • 在检测错误时要苛刻一点

    假如要从栈中拿出一个值,然后进行操作。若栈是一个空栈,就会出现异常。我们会在代码中进行检查,是返回一个null值呢,还是抛出一个异常呢,此时不抛异常,后面也要抛一个空指针异常,所以最好是在前面就抛异常,这样抛出来的异常更清晰明了,后续也不会再执行一些无用的操作。

  • 不要羞于传递异常

    有时候传递这个异常比捕获这个异常更为合适,传递下去可以让更高层次的方法通知用户发生了错误。

-------------本文结束感谢您的阅读-------------

本文标题:Java异常

文章作者:huihui

发布时间:2018年10月24日 - 00:10

最后更新:2019年02月14日 - 19:02

原始链接:http://101.200.47.120:8011/2018/10/24/Java异常/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。