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小时内删除。
发表评论