Java异常机制

异常类(Exception)和错误类(Error)都继承自Throwable类。

 

一、格式:

五个重要关键词try,catch,finally,throw,throws

try {  
    // 可能发生异常的代码   
} catch (异常类型1 异常对象1){  
    // 异常处理代码
}  
catch (异常类型2 异常对象2){  
     //异常处理代码
} 

 

try:试试某段代码里是否含有异常。

catch:捕获异常。后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。

finally:总会被执行的代码。主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。

throw:用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。

throws:用在方法签名中,用于声明该方法可能抛出的异常。

二、抛出异常:

1.throws抛出异常:

如果我们定义的一个方法可能会出现异常,但没有能力去处理这个异常,这时我们可以用throws抛出异常,交给这个方法的调用者去处理(当然如果调用者也不想处理,也可以继续抛出,最终JVM会处理)。比如:汽车在运行时可能出现异常,但汽车没有自己处理的能力,它就会把异常抛给开车的人处理(方法调用者)。

public class TestException {  
    static void pop() throws NegativeArraySizeException {  
        // 定义方法并抛出NegativeArraySizeException异常   
        int[] arr = new int[-3]; // 创建数组   
    }  
  
    public static void main(String[] args) { // 主方法   
        try { // try语句处理异常信息   
            pop(); // 调用pop()方法   
        } catch (NegativeArraySizeException e) {  
            System.out.println("pop()方法抛出的异常");// 输出异常信息   
        }  
    }  
  
}  

定义方法pop()时预测到可能会出现NegativeArraySizeException类型的异常,但它假如无力处理异常,所以就把异常抛出,谁调用它谁就处理这个异常。

2.throw抛出异常对象:

throw抛出的是一个具体的异常对象,程序在执行了throw之后会立即跳出语句所在的方法,因此throw后面不允许有别的语句,否则程序会在编译时出错。

 

三、常见异常:
 1. runtimeException子类:

    1、 java.lang.ArrayIndexOutOfBoundsException
    数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
    2、java.lang.ArithmeticException
    算术条件异常。譬如:整数除零等。
    3、java.lang.NullPointerException
    空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等
    4、java.lang.ClassNotFoundException
    找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

   5、java.lang.NegativeArraySizeException  数组长度为负异常

   6、java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常

   7、java.lang.SecurityException 安全性异常

   8、java.lang.IllegalArgumentException 非法参数异常

2.IOException

IOException:操作输入流和输出流时可能出现的异常。

EOFException   文件已结束异常

FileNotFoundException   文件未找到异常

3. 其他

ClassCastException    类型转换异常类

ArrayStoreException  数组中包含不兼容的值抛出的异常

SQLException   操作数据库异常类

NoSuchFieldException   字段未找到异常

NoSuchMethodException   方法未找到抛出的异常

NumberFormatException    字符串转换为数字抛出的异常

StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

IllegalAccessException  不允许访问某类异常

InstantiationException  当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常


 

四、异常对象包含的常用方法:

1.       getMessage();返回该异常的详细描述字符

2.       printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。

3.       printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定的输出流

4.       getStackTrace():返回该异常的跟踪栈信息。

 五、自定义异常:

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-04-22 17:21  &王先生  阅读(164)  评论(0编辑  收藏  举报