java异常

来源:互联网 发布:知鱼之乐什么意思 编辑:程序博客网 时间:2024/06/08 09:15

一.异常结构图



二.异常描述

    Throwable:是所有异常的根,java.lang.Throwable。

     Error:当程序发生不可控的错误时,通常是通知用户并终止程序的执行。与异常不同的是Error及其子类的对象不应被抛

                   出,代表编译时间和系统错误,用于指示合理的应用程序不应被捕获的严重问题。Error由java虚拟机生成并抛

                  出,包括动态链接失败,虚拟机错误等,程序对其不做处理。

     Exception:程序本身可以处理的异常。

     CheckedException:如果程序没有处理Checked异常,该程序在编译时就会发生异常无法编译。

     RuntimeException:由系统自动检测并将它们交给缺省的异常处理程序,也可显示捕获它们。

三.处理异常

     在 Java 应用程序中,异常处理机制为抛出异常,捕捉异常。

   1.抛出异常

       (1)语法1:

          throw new  异常类( );//抛出一个异常,出现在函数体

         (2)语法2:

  1. methodName throws Exception1,Exception2,..,ExceptionN //声明一个异常,出现在函数头
  2. {  
    2.捕获异常

           (1)语法:       

                try{

                      正常程序段,可能抛出异常;

                }

                catch (异常类1  异常变量) {

                         捕捉异常类1有关的处理程序段;

                 }

               catch (异常类2  异常变量) {

                         捕捉异常类2有关的处理程序段;

              }

              ……

             finally{

                      一定会运行的程序代码;

             }

注意:

(1)一个try、catch、finally块之间不能插入任何其它代码。

(2)catch可以有多个,try和finally只能有一个。

(3)try后面必须要跟catch、finally其中的一个,即但一个try、catch、finally语句只能省略catch、finally中的一个。

(4)无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。

     在以下4种特殊情况下,finally块不会被执行:
        a.在finally语句块中发生了异常。
        b.在前面的代码中用了System.exit()退出程序。
        c.程序所在的线程死亡。
        d.关闭CPU。

(5)一个 try 块可能有多个 catch 块。根据捕获的异常进入相应的catch块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异     常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块。
(6) 可嵌套 try-catch-finally 结构。
(7) 在 try-catch-finally 结构中,可重新抛出异常。