欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异常的实际应用__何时使用异常与如何使用异常

程序员文章站 2022-04-21 21:10:17
...

异常的实际应用__何时使用异常与如何使用异常

一.异常的介绍

刚刚学习了如何捕获及处理异常,所以有了这篇什么时候使用异常和如何使用异常。
异常情况的出现可能阻止程序直接发生崩溃,所以不可避免地异常需要避免。

异常的诞生是为了替换过去所使用的错误码及状态检查技术——即为了增加程序鲁棒性所用,
最后检查出异常后一定要对代码及时进行处理。

二.何时使用异常

异常处理的一个重要规则是:不能忽视异常,每个异常都应该被记录,只有极少数异常在不影响安全的情况下可以被忽略。
异常在实践中:每个public方法在执行实际逻辑之前都必须验证所有必须的先决条件并将验证不通过的情况捕获,作为异常抛出。

Unchecked Exception(非受检异常)与Checked Exception(受检异常)

Unchecked Exception:检测程序逻辑和一些与正在进行的假设相关的错误,

eg:
NullPointerException(空指针异常);
IllegalArgumentException(非法参数异常);
IllegalStateException(非法或不适当的时间调用方法产生的信号);
IndexStateException(越界异常);
NumberFormatException(格式转换异常);
ClassCastException(类投掷异常,试图将对象转换为不是实例的子类时)ArrayIndexOutOfBoundsException(非法索引访问数组异常)

一般来说 UncheckedException 不必被调用者捕获或被列为方法签名一部分(throws)。

但实际呢,在程序调试运行崩溃时,IDE会显示出具体是出现了什么异常,这时就需要码农们将这些异常处理掉,以增加程序的鲁棒性。

CheckedException :代表程序能够直接控制之外的非法情况,CheckedException必须被调用者捕获,或者列为方法签名的一部分(throws).

eg:
IOException(输入输出异常)ClassNotFoundException(类没找到异常)

实际上呢,IDE早就会自动检测出CheckedException,这种异常你不处理是不会让你编译通过的,所以你也不会看到IDE报错这些异常。

三.如何使用异常

1.使用 try —catch—finally
2.使用Throws
3.使用Throw

try-catch-finally

这种用来捕获异常并处理的方法很常见,但是强大的IDE已经自动集成了CheckedException 捕获功能,所以使用这种方法多少有些鸡肋了,当然作为立志成为一个优秀码农的憨憨来说,它的实现机制还是要懂的
举一个经典的例子:

public void readFile(final File file) {
    InputStream in = null;
    try {
        in = new FileInputStream(file);
    } catch(IOException ex) {
    } finally {
        if(in != null) {
            try {
                in.close();
            } catch(final IOException ex) {
            }
        }
    }
}

IOException是一个典型的CheckedException, IDE会自动标红报错,那么我们要想让程序通过编译,有两种方法:

  1. 用throws将异常抛出去,将异常抛到上层调用方法或虚拟机中,如果不处理异常,就必须保证异常一定不会发生才能进行throws操作。
  2. 通过上述代码,进行try—catch操作,将异常捕获,当输入文件为空时可以进行文件关闭操作,此时就必须要用到try—catch来进行CheckedException 的处理了。