异常机制

   异常概述:

     计算机系统对异常的处理通常有两种方法:1)计算机系统本身直接检验程序中的错误,遇到错误时给出错误信息,并终止程序的运行;2)由程序员在程序中加入异常处理功能。

    Java语言的异常处理机制的最大优势之一:可以将异常情况在方法调用中进行传递,通过传递可以将异常情况传递到合适的位置再进行处理。

  异常分类:java.lang.Throwable的两个子类   

       Error类:该类代表错误,指程序无法恢复的异常,对于所有错误类型及其子类,都不要求程序进行处理。常见的Error类型:如内存溢出 StacOverflowError等

       Exception该类代表异常,指程序有可能恢复的异常,该类是整个Java语言异常类体系中的父类,使用该类就可以代表所有的异常清理。

         在这些异常类中,根据是否程序自身导致的异常,将所有的异常类分为两种:

    RuntimeException及其子类

该类属于程序运行时异常,即程序自身的问题所导致的异常。如数组下标越界异常

      ArrayIndexOutofBoundsException等,该类异常在语法上不强制程序员必须处理,即使不处理这样的异常也不会出现错误。

    其他Exception子类

   该类异常属于程序外部问题引起的异常,即程序运行时某些外部问题导致产生异常,例如文件不存在异常 FileNotFoundException,该类异常在语法上要求强制出来,如不处理则会出现语法错误。

Java.lang.NullPointerException:空指针异常,调用null对象中的非static成员变量或成员方法时产生的异常

Java.lang.ArithmeticException:数学运算异常,例如除0运算时产生该异常

Java.lang.ArrayIndexOutofBoundsException:数组下标越界异常,数组下标值小于0或大于等于数组长度时产生异常

Java.lang.IllegalArgumentException:非法参数异常,当参数不合法时产生的异常

Java.lang.IllegalAccessException:没有访问权限异常,当应用程序要调用一个类,但当前的方法没有对该类的访问权限时抛出的异常

  异常的处理

   java的异常处理方式有两种:

  •    try…..cathc…finally结构对异常进行捕获和处理

try {

   //可能抛出的异常代码

}

catch(ExceptionType1 e2){

   //抛出异常ExceptionType1时的异常处理代码

}

catch(ExceptionType2 e2){

   //抛出ExceptionType2时的异常代码

}

finally {

   //无论是否抛出异常,都会执行的代码

}

 

try语句块中是可能抛出的代码,如果该块内的代码没有出现异常,后面的各个catch块都不起任何作用。但如果该块中的一条语句抛出了异常,则其后续语句不在执行,而是转到catch进行异常类型匹配

catch语句块负责捕获指定类型的异常并进行处理。一个try块可以对应多个catch块,用于对多个异常类进行捕获,如果要捕获的各个异常类之间没有继承关系,各个catch块的顺序无关紧要,但如果它们之间有继承关系,则应将子类的catch块放在父类的catch块之前。因此Exception这个异常类的根类一定要放在最后一个catch里面。在catch块中可以用getMessage()方法返回一个对发生的异常进行描述的字符串,用printStackTrace()方法打印方法的调用序列。catch语句捕捉的范围要由小到达

finally语句块是可选的,无论是否发生异常,finally语句块总会执行,一般用于释放资源,关闭文件等。

  •  throw 或throws抛出异常

一般情况下,异常是由系统自动捕获的,但如果程序员不想再当前方法内处理异常,可以用throw语句将异常抛出到调用方法中。调用方法也可以将异常再抛给其他调用方法,如果所有的方法都选择了抛出此异常,最后JVM将捕获它,输出相关错误信息,终止程序运行。格式: throw new ExceptonTye(异常信息)

如果一个方法没有捕获可能抛出的异常,调用该方法的其他方法应该捕获并处理异常。为了明确指出一个方法不捕获异常,而让调用该方法的其他方法捕获该异常,可以在声明方法的时候,使用throws抛出该类异常,如果抛出的是多个不同异常,中间用逗号隔开。格式:public static void main(String[] args)thows 异常类型名 { }

你可能感兴趣的