• 关于异常的简单理解


      首先,异常是什么?异常是在程序运行期间,出现了一个非法的运行状态。

      打开API文档,输入Exception,得到关于Exception类的信息如下:Exception类的父类是Throwable类,同时,对于Exception的解释是:Exception类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。

      根据java的规则,我们可以得到这样的信息:

       Throwable是所有异常及错误的“父亲”,其下分成系统错误Error和可捕获的异常Exception两类。系统错误Error是程序本身解决不了的错误,一般交由JVM处理,通常遇到这种错误时JVM会直接终止程序。而异常Exception是可以由程序捕获的错误,也就是说,程序可以捕获并抛出这一类的错误。

       而Exception之下又可以分成两种,一种是IOException异常及其派生异常,一般出现在读写数据流时,也叫作非运行异常,这类异常大多是必须要处理的异常,否则程序一般不能通过编译。另一种是RuntimeException异常及其子类异常,也叫作运行时异常,是在程序运行中出现的,出现原因一般是逻辑错误,通过throw可随时抛出此类异常。

    1、try…catch…finally捕获并抛出异常

       具体程序语句如下:

    try{
     //可能发生运行错误的代码
    }
    catch(异常类型 异常对象引用){
    //用于处理异常的代码
    }
    finally{
    //用于善后的代码
    }

    该语句是发现异常并处理异常的基本句式,其作用为:当try语句块中的代码执行时发现异常,程序的正常运行便中断,并抛出异常对象,然后在try块后面的各个catch()中找到与异常对象相匹配的类。当异常对象符合下面三个条件之一时,就认为这个异常对象与对应的异常类相匹配。

    (1)异常对象所属的类与catch()中参数类相同。

    (2)异常对象所属的类是catch()中参数类的子类。

    (3)catch()中的参数类是一个接口时,发生的异常对象类实现了这一接口。

    最后,执行完catch中的代码后,程序恢复运行,但不会再回到异常发生处继续执行,而是会执行try-catch之后的语句,即finally语句块。

    2、throw和throws抛出异常

      throw可以直接人为抛出异常,有两种格式,如下:

        直接抛出异常类实例

    throw new ExceptionType(...);
    // ExceptionType是Throwable的子类

       先定义异常类对象并实例化,然后抛出

    ExceptionType e = new ExceptionType(...);
    throw e;

      而如果在方法中不人为抛出异常,则必须在定义该方法时使用throws子句抛出异常。

    例:

    public class TestThrows   {
            public static void main(String[] args)     {
                FileInputStream fis = new;                       
               FileInputStream("a.txt");
                }
        }

    上段代码是错误的,应当在定义主方法时使用throws IOException。

    所以,throws代码的格式如下:

    修饰符 返回类型 方法名(参数列表)throws 异常类名列表{

        …//方法体中的语句

    }

    总结:

      try系列语句需要在尽量靠近异常的地方使用,否则时间复杂度会大大增加;尽量用具体的异常类型捕获并抛出异常,不要在代码中用catch(Exception)“吃掉”所有异常。

  • 相关阅读:
    mysql practice
    image update to ubuntu18.04
    C++11 new feature
    bazel remote executor--- buildfarm( in docker)
    python3学习笔记13(数据结构)
    python3学习笔记12(变量作用域)
    python3学习笔记11(函数)
    jmeter 01 之beanshell preprocessor
    python3学习笔记10(迭代器和生成器)
    python3学习笔记十(循环语句)
  • 原文地址:https://www.cnblogs.com/YXSZ/p/9942296.html
Copyright © 2020-2023  润新知