java 7多异常捕获介绍

KLQ 2020-09-01 15:13:28 java常见问答 7838

下面要给大家详细介绍的就是java 7多异常捕获方面的知识,下面就一起和小编来对这个方面进行一下详细的了解吧。

catch代码块大家都熟悉吗?虽然客观上提高了程序的健壮性,可是,也是导致了程序代码量大大增加,假如,有些异常种类不同,可是,捕获之后的处理是相同的,例如:

try
{
    // 可能会发生异常的语句
}
catch (FileNotFoundException e)
{
    // 调用方法methodA处理
}
catch (IOException e)
{
    // 调用方法methodA处理
}
catch (ParseException e)
{
    // 调用方法methodA处理
}

3个不同类型的异常,要求捕获之后的处理都是调用methodA方法。为了解决这样的问题,Java 7推出了多异常捕获技术,能够将这些异常合并处理。

上述代码修改:

try
{
    // 可能会发生异常的语句
}
catch (IOException | ParseException e)
{
    // 调用方法methodA处理
}

注意一下,FileNotFoundException属于IOException异常,IOException异常能够捕获它的所有子类异常。

所以不可以写成FileNotFoundException | IOException | ParseException。

使用一个catch块捕获多种类型的异常的时候要注意下面的两个地方:

注意

下面是Java 7提供的多异常捕获示例:

public class ExceptionTest
{
    public static void main(String[] args)
    {
        try
        {
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);
            int c = a / b;
            System.out.println("您输入的两个数相除的结果是:" + c);
        }
        catch (IndexOutOfBoundsException | NumberFormatException | ArithmeticException e)
        {
            System.out.println("程序发生了数组越界、数字格式异常、算术异常之一");
            // 捕获多异常时,异常变量默认有final修饰
            // 所以下面代码有错
            e = new ArithmeticException("test");
        }
        catch (Exception e)
        {
            System.out.println("未知异常");
            // 捕获一种类型的异常时,异常变量没有final修饰
            // 所以下面代码完全正确
            e = new RuntimeException("test");
        }
    }
}

在上面的代码当中,第一行粗体字代码使用IndexOutOfBoundsException|NumberFormatException|ArithmeticException来定义异常类型,这就表示,这个 catch块可以同时捕获这3种类型的异常。

捕获多种类型的异常的时候,异常变量使用隐式的final修饰,所以,上面代码的第12行代码将产生编译错误;

捕获一种类型的异常的时候,异常变量没有final修饰,所以,上面代码的第17行代码完全正确。

多异常捕获方面的知识就介绍到这里了,你都了解了吗?更多java常见问题及解决方法,可以继续通过关注奇Q工具网来进行了解哦。

推荐阅读:

java 9增强的自动资源管理详解

java throws声明异常详解

java throw拋出异常详解