# Java 7 – 异常处理增强

> 原文： [https://howtodoinjava.com/java7/improved-exception-handling/](https://howtodoinjava.com/java7/improved-exception-handling/)

在 Java 7 发行版中，oracle 在异常处理机制上也做了一些不错的更改。 主要是**改进的 catch 块**和**冗余`throws`子句**。 让我们看看他们是如何改变的。

## 1\. Java 7 中改进的`catch`块

在此特性中，现在您可以**在单个`catch`块**中捕获多个异常。 在 Java 7 之前，您只能在每个`catch`块中仅捕获一个异常。

要指定期望的异常列表，请使用竖线（`|`）。

Java 程序在单个 catch 块中捕获多个异常。

```java
try
{
    //Do some processing which throws NullPointerException;
    throw new NullPointerException();
}
//You can catch multiple exception added after 'pipe' character
catch( NullPointerException npe | IndexOutOfBoundsException iobe )
{
       throw ex;
}

```

> 如果`catch`块处理多个异常类型，则 **`catch`参数隐式为`final`** 。 在此示例中，`catch`参数`ex`为`final`，因此您无法在`catch`块内为其分配任何值。

## 2\. Java 7 中的冗余`throws`子句

此特性使您免于在方法声明中使用`throws`子句。 请参见下面的示例：

```java
public class MultipleExceptionsInCatchBlock {

	public static void main(String[] args)
	{
			sampleMethod();
	}

	public static void sampleMethod()
					//throws Throwable	//No need to do this
	{
		try
		{
			//Do some processing which throws NullPointerException; I am sending directly
			throw new NullPointerException();
		}
		//You can catch multiple exception added after 'pipe' character
		catch(NullPointerException | IndexOutOfBoundsException ex)
		{
			throw ex;
		}
		//Now method sampleMethod() do not need to have 'throws' clause
		catch(Throwable ex)
		{
			throw ex;
		}
	}
}

```

Java 运行时足够智能，可以在调用方方法中标识确切的异常类。

如果您使用 Java 6 或更早的版本编译上述代码，它将产生编译错误并要求您声明 throws 子句。

我认为，对于 Java 开发人员而言，首先的改进绝对是一个不错的选择。 但是，我真的没有看到第二个补充如此重要。 再次，这是我的看法。

学习愉快！