Java异常处理机制

Java异常处理机制

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:

作者:陈剑波

撰写时间:2020年05月18日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Java异常体系

Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。

Java异常处理机制_第1张图片

Java异常处理机制

Java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮。异常处理机制为:抛出异常,捕捉异常。当程序运行出 现意外情形时,系统会自动生成一个 Exception对象来通知程序,从而实现将“业务功 能实现代码”和“错误处理代码”分离,提供更好的可读性。

抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

 捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。

捕获异常:try、catch 和 finally

  1. try...catch捕获异常

try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
catch 块:用于处理try捕获到的异常。

异常通过try-catch语句捕获。其一般语法形式为:

try {

    // 可能会发生异常的程序代码

} catch (Type1 id1){

    // 捕获并处置try抛出的异常类型Type1

}

catch (Type2 id2){

     //捕获并处置try抛出的异常类型Type2

}

 

 

  1. try...catch...finally语句

finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。

当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。在以下4种特殊情况下,finally块不会被执行:

1)在finally语句块中发生了异常。

2)在前面的代码中用了System.exit()退出程序。

3)程序所在的线程死亡。

4)关闭CPU。

try-catch语句还可以包括第三部分,就是finally子句。它表示无论是否出现异常,都应当执行的内容。try-catch-finally语句的一般语法形式为:

try {

         // 可能会发生异常的程序代码

      } catch (Type1 id1) {

         // 捕获并处理try抛出的异常类型Type1

      } catch (Type2 id2) {

         // 捕获并处理try抛出的异常类型Type2

      } finally {

         // 无论是否发生异常,都将执行的语句块

      }

 

抛出异常

1. throws抛出异常

    throws语句用在方法定义时声明该方法要抛出的异常类型,如果抛出的是Exception异常类型,则该方法被声明为抛出所有的异常。多个异常可使用逗号分割。throws语句的语法格式为:

methodname throws Exception1,Exception2,..,ExceptionN

{

}

 

2. 使用throw抛出异常

Java也允许程序自行抛出异常,自行抛出异常使用throw语句来完成(注意此处的 throw没有后面的s)。如果需要在程序中自行抛出异常,则应使用throw语句,throw语句可以单独使用, throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。

异常是异常类的实例对象,可以创建异常类的实例对象通过throw语句抛出。该语句的语法格式为:

 throw new exceptionname;

 

自定义异常

用户自定义异常都应该继承Exception基类;如果希望自定义Runtime异常,则应该继 承RuntimeException基类。定义异常类时通常需要提供两个构造器:一个是无参数的 构造器;另一个是带个字符串参数的构造器,这个字符串将作为该异常对象的描述信 息(也就是异常对象的getMessage()方法的返回值)。

你可能感兴趣的:(Java异常处理机制)