Java 7 – 异常处理增强

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

1. Java 7 中改进的catch

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

要指定期望的异常列表,请使用竖线(|)。

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

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参数exfinal,因此您无法在catch块内为其分配任何值。

2. Java 7 中的冗余throws子句

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

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 开发人员而言,首先的改进绝对是一个不错的选择。 但是,我真的没有看到第二个补充如此重要。 再次,这是我的看法。