现在的位置: 首页 > 综合 > 正文

【异常的基本概念】_异常的基本概念笔记

2013年09月11日 ⁄ 综合 ⁄ 共 2318字 ⁄ 字号 评论关闭

【异常的基本概念】_异常的基本概念笔记

了解异常的基本概念
掌握异常的基本处理格式
掌握异常类的继承结构
掌握java的异常处理机制

异常:
异常是导致程序中断运行的一种指令流.如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失。

3.1为什么需要异常处理?

public class ExceptionDemo01{
    public static void main(String args[]){
        System.out.println("*****计算开始******");
        int i = 10;
        int j = 0;
        int temp = i/j;        //此处产生了异常
        System.out.println("两个数字相除的结果:"+temp);
        System.out.println("*****计算结束****");
    }
}

一旦产生异常之后,异常之后语句并不会执行,而是直接结束程序,并将错误报告给用户。
在计算机的发展史上有两大杀手:
    1.断电
    2.被除数为0
3.2处理异常

如果要想处理异常,则必须掌握异常的处理格式。

try{

}catch(){

}finally{

}
对之前的异常进行捕捉

public class ExceptionDemo02{
    public static void main(String args[]){
        System.out.println("*******计算开始********");
        int i = 10;
        int j = 0;
        try{
            int temp = i/j;    //此处产生异常
            System.out.println("两个数相除的结果:"+temp);
            System.out.println("------------------")
        }catch(ArithmeticException e){
            e.printlnStackTrace();
        }finally{
            System.out.println("不管是否出现异常,都执行此代码");
        }
        System.out.println("*****计算结束*******");
    }
}

此时的数据实际上是交给用户输入的,那么既然是用户输入,就有可能输入不正确,实际上以上代码存在三个问题:
1.如果没有输入参数或者输入参数不够,则会出现问题:
java.lang.ArrayIndexOfBoundsException

2.如果现在输入参数不是数字而字母。
java.lang.NumberFormatException:For input string:"a"

3.算数异常,如果被除数为零。

所以上程序实际产生了三个异常:
数组超出绑定:ArrayIndexOutOfBoundsException
数字格式化异常:NumberFormatException
算术异常:ArithmeticException

如果要想保证程序的执行正确,则必须同时对三个异常进行处理,所以此时就需要三个catch语句

public class ExceptionDemo05{
    public static void main(String[] args){
        System.out.println("*****计算开始******");
        int i = 0;
        int j = 0;
        try{
            String str1 = args[0];
            String str2 = args[1];
            i = Integer.parseInt(str1);
            j = Integer.parseInt(str2);
            int temp = i/j;    //此处产生异常
            System.out.println("两个数字相除的结果:"+temp);
            System.out.println("-----------------------");
        }catch(ArithmeticException e){
            e.printStackTrace();
        }catch(NumberFormatException e){
            e.printStackTrace();
        }catch(ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }
        System.out.println("*****计算结束******");
    }
}

以上一个小小程序都要处理三个异常,当然,此程序还有可能有其他异常,那么这样一来,异常的处理就很麻烦。

3.3异常的继承结构

在整个java的异常结构中,实际上有以下两个最常用的类,Exception、Error,这两个类都是Throwable的子类
1.Exception:一般表示的是程序中出现的问题,可以直接使用try....catch处理
2.Error:一般指的是JVM错误,程序中无法处理。

一般情况下开发者都比较习惯于将Error和Exception统一称为异常,而之前处理的若干异常,都是Exception的子类。
注意:
    一般在输出异常信息的时候,可以直接使用System.out.println()打印异常对象
    也可以通过Exception提供的一个方法:public void printStackTrace()

3.4异常的处理机制:

try{

}catch(ArithmeticException e){

}finally{

}

当所有的异常处理的方式是一样的时候就可以直接使用Exception进行捕获,当然,在一个比较细致的开发中是不建议这样使用的,所有的异常最好分别捕获。

问题:
既然捕获Exception是最方便的,那么直接捕获Throwable可以不可以?
首先这样的做法是可以的,但是正常的开发人员是不会这样去做的,因为程序的try中永远只会抛出Exception的子类,而Throwable中不光有Exception还有Error。

抱歉!评论已关闭.