java mutilcatch_Java中的Multicatch,不同的catch块 - Break易站
Java 异常
Java中的Multicatch,不同的catch块
在Java 7之前,我们必须在每个catch块中只捕获一个异常类型。因此,无论何时我们需要处理多个特定的异常,但对所有异常都采取相同的操作,那么我们必须有多个包含相同代码的catch块。在下面的代码中,我们必须处理两个不同的例外情况,但对两者都采取相同的操作。所以我们需要从Java 6.0开始有两个不同的catch块。
// A Java program to demonstrate that we needed
// multiple catch blocks for multiple exceptions
// prior to Java 7
import java.util.Scanner;
public class Test
{
public static void main(String args[])
{
Scanner scn = new Scanner(System.in);
try
{
int n = Integer.parseInt(scn.nextLine());
if (99%n == 0)
System.out.println(n + " is a factor of 99");
}
catch (ArithmeticException ex)
{
System.out.println("Arithmetic " + ex);
}
catch (NumberFormatException ex)
{
System.out.println("Number Format Exception " + ex);
}
}
}
输入1:
GeeksforGeeks
输出2:
Exception encountered java.lang.NumberFormatException:
For input string: "GeeksforGeeks"
输入2:
0
输出2:
Arithmetic Exception encountered java.lang.ArithmeticException: / by zero
Multicatch
从Java 7.0开始,单个catch块可以通过用|分隔每个catch块来捕获多个异常 (管道符号)在catch块。
// A Java program to demonstrate multicatch
// feature
import java.util.Scanner;
public class Test
{
public static void main(String args[])
{
Scanner scn = new Scanner(System.in);
try
{
int n = Integer.parseInt(scn.nextLine());
if (99%n == 0)
System.out.println(n + " is a factor of 99");
}
catch (NumberFormatException | ArithmeticException ex)
{
System.out.println("Exception encountered " + ex);
}
}
}
输入1:
GeeksforGeeks
输出1:
Exception encountered java.lang.NumberFormatException:
For input string: "GeeksforGeeks"
输入2:
0
输出2:
Exception encountered
java.lang.ArithmeticException: / by zero
处理多种异常类型的catch块不会在编译器生成的字节码中产生重复,也就是说,字节码不会复制异常处理程序。
重点:
如果所有异常都属于同一个类层次结构,我们应该捕获基本异常类型。但是,要捕捉每个异常,需要在它们自己的catch块中分别完成。
单个catch块可以处理多种类型的异常。但是,基本(或祖先)类和子类(或后代)异常无法在一个语句中捕获。例如
//作为异常是无效的
// NumberFormatException
catch(NumberFormatException | Exception ex)
所有的异常必须用竖线管分开| 。