java mutilcatch_Java中的Multicatch,不同的catch块 - Break易站

在Java 7之前,处理多个特定异常需要多个catch块,但从Java 7开始,可以使用Multicatch语法用管道符(|)合并多个异常类型。这样可以在一个catch块中处理`ArithmeticException`和`NumberFormatException`等不同异常,减少了重复代码,并且在编译后的字节码中不产生多余的异常处理程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

所有的异常必须用竖线管分开| 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值