java  多个catch语句
在某些情况下,某个代码块可能抛出多个异常。处理这种情况,可以定义两个或更多的catch子句,每个子句捕获一种类型的异常。
当抛出异常时,每一个catch子句被依次检查,第一个匹配异常类型的catch子句将被执行,而其他的catch子句不被执行。当该catch语句执行以后,接着执行try…catch语句块后面的语句。其语法结构如下:
try
{
    逻辑代码块
}
catch(异常类名1  参数名1)
{
    处理代码块1
}
catch(异常类名2  参数名2)
{
    处理代码块2
}
catch(异常类名n  参数名n)
{
    处理代码块n
}
例如,以下代码演示如何在try语句后带有多个catch语句的异常:
public class moreCatch
{
    public static void main(String[] args)
    {
        try
        {
            char[] x=new char[8];
            x[-6]=13;
            int s=args.length;
            int a=65;
            int b=0;
            int zhi=a/b;
            System.out.println(zhi);
            System.out.println("try语句块中");
        }
        catch(NullPointerException e)
        {
            System.out.println("空指针异常"+e);
        }
        catch(NegativeArraySizeException e)
        {
            System.out.println("数组维数为负值异常"+e);
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
            System.out.println("数组下标越界异常"+e);
        }try catch的使用方法
        catch(ArithmeticException e)
        {
            System.out.println("除数为0异常"+e);
        }
        System.out.println("try语句块外");
    }
}
执行上述代码,结果如图8-4所示。
图8-4  执行结果
以上代码在执行时,按照catch语句块的顺序从上向下进行匹配,如果匹配到合适的,就执行该catch语句块。
当用多catch语句时,catch语句块在次序上有先后之分。这是因为从最前面的catch语句块依次先后进行异常类型匹配。这样,如果父异常类在子异常类之前,那么首先匹配的将是父异常类,子异常类将不会获得进行匹配的机会,即子异常类型所在的catch语句将是不可到达的语句。Java中不可到达的代码是一个错误。例如下面实例所示。
public class ErrCatch
{
    public static void main(String[] args)
    {
        try{
            int x = 0;
            int y=25;
            int b = y / x;
        }
        catch(Exception e){
            System.out.println("父类异常捕获.");
        }
        catch(ArithmeticException e){
            System.out.println("子类异常捕获.");
        }
    }
}
执行上述代码,系统将出现错误提示,如图8-5所示。
图8-5  错误提示
该错误提示信息说明第二个catch语句不会到达,因为该异常已经被捕获。ArithmeticException是Exception的子类,第一个catch语句将处理所有Exception类型的错误,包括ArithmeticException。这意味着第二个catch语句永远不会执行。把这两个catch语句的次序互换后就可以解决此问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。