Java多捕获块

在Java7之前,我们必须在每个catch块中只捕获一种异常类型。因此,每当我们需要处理多个特定异常,但对所有异常都采取一些操作时,我们必须有多个包含相同代码的catch块。

null

在下面的代码中,我们必须处理两个不同的异常,但对这两个异常采取相同的操作。因此,从Java6.0开始,我们需要有两个不同的catch块。

JAVA

// 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

产出1:

Exception encountered java.lang.NumberFormatException: For input string: "GeeksforGeeks"

输入2:

0

产出2:

Arithmetic Exception encountered java.lang.ArithmeticException: / by zero

Java中的多捕获块

从Java 7.0开始,单个catch块可以通过在catch块中用|(管道符号)分隔每个异常来捕获多个异常。

在单个catch块中捕获多个异常可以减少代码重复并提高效率。编译该程序时生成的字节码将小于具有多个catch块的程序,因为没有代码冗余。

注: 如果catch块处理多个异常,则catch参数是隐式final。这意味着我们不能为捕捉参数分配任何值。

语法:

try {      // code} catch (ExceptionType1 | Exceptiontype2 ex){       // catch block}

Java多捕获块的流程图

图片[1]-Java多捕获块-yiteyi-C++库

JAVA

// 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块不会在编译器生成的字节码中创建重复。也就是说,字节码没有异常处理程序的复制。

要点:

1. 如果所有异常都属于同一个类层次结构,那么我们应该捕获基本异常类型。然而,要捕获每个异常,需要在它们的catch块中分别完成。

2. 单个catch块可以处理多种类型的异常。但是,不能在一条语句中捕获基(或祖先)类和子类(或后代)异常。例如

// Not Valid as Exception is an ancestor of // NumberFormatExceptioncatch(NumberFormatException | Exception ex) 

3. 所有例外情况必须用竖条管隔开 | .

本文由 阿帕纳·瓦德拉马尼酒店 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以写一篇文章,然后将文章邮寄给评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享