异常。

作者: 朱芳芳 | 来源:发表于2017-03-19 20:59 被阅读0次

    1、什么是异常?

    异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。

    2、为什么学习异常?

    学习异常的原因很简单,就是可以让有问题的程序继续正常的运行下去。

    一句话总结什么是异常:

    异常就是:程序在运行当中,所发生的不正常事件,会导致程序中断。

    3、异常发生的原因有很多,通常包含以下几大类:

    用户输入了非法数据。

    要打开的文件不存在。

    网络通信时连接中断。

    4、异常的分类

    (1)运行时异常

     运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

    (2)编译时异常(必须解决,否则无法执行)

    最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

    5、Exception类的层次。

    所有的异常类是从java.lang.Exception类继承的子类。

    Exception类是Throwable类的子类。除了Exception类外,Throwable还有一个子类Error 。

    Java程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。

    Error用来指示运行时环境发生的错误。

    例如,JVM内存溢出。一般地,程序不会从错误中恢复。

    6、Java 内置异常类。

    Java 语言定义了一些异常类在java.lang标准包中。

    标准运行时异常类的子类是最常见的异常类。由于java.lang包是默认加载到所有的Java程序的,所以大部分从运行时异常类继承而来的异常都可以直接使用。

    Java根据各个类库也定义了一些其他的异常,下面的表中列出了Java的非检查性异常。

    运行时异常:


    编译时异常:


    7、捕获异常

    使用try和catch关键字可以捕获异常。try/catch代码块放在异常可能发生的地方。

    try/catch代码块中的代码称为保护代码,使用 try/catch的语法如下:

    Catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try后面的catch块就会被检查。

    如果发生的异常包含在catch块中,异常会被传递到该catch块,这和传递一个参数到方法是一样。

    8、多重捕获块


    上面的代码段包含了3个catch块。

    可以在try语句后面添加任意数量的catch块。

    如果保护代码中发生异常,异常被抛给第一个catch块。

    如果抛出异常的数据类型与ExceptionType1匹配,它在这里就

    会被捕获。

    如果不匹配,它会被传递给第二个catch块。

    如此,直到异常被捕获或者通过所有的catch块。

    9、throws/throw关键字。

    1)如果一个方法没有捕获一个检查性异常,那么该方法必须使用throws 关键字来声明。throws关键字放在方法签名的尾部。

    2)也可以使用throw关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

    3)一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

    10、finally关键字。


    finally关键字用来创建在try代码块后面执行的代码块。

    无论是否发生异常,finally代码块中的代码总会被执行。

    在finally代码块中,可以运行清理类型等收尾善后性质的语句。

    finally代码块出现在catch代码块最后。

    注:catch不能独立于try存在。

            在try/catch后面添加finally块并非强制性要求的。

            try代码后不能既没catch块也没finally块。

            try, catch, finally块之间不能添加任何代码。

    11、声明自定义异常。

    在Java中你可以自定义异常。编写自己的异常类时需要记住下面的几点。

    所有异常都必须是Throwable的子类。

    如果希望写一个检查性异常类,则需要继承Exception类。

    如果你想写一个运行时异常类,那么需要继承RuntimeException 类。

    相关文章

      网友评论

          本文标题:异常。

          本文链接:https://www.haomeiwen.com/subject/yxevnttx.html