[#0x001D] first catch

  try块里有异常抛出时,程序会进入第一个异常类型匹配的catch块执行,其他的catch块不执行。

  注意这里说的“第一个匹配的异常类型”。我们知道,所有的异常类型都是extends Exception,所以catch (Exception e)可以catch所有的异常;也就是说,这里说的“异常类型匹配”包括向上转型。

  同时,对基类异常的catch块会屏蔽其后的对其导出类异常的catch块,而且这个屏蔽只与catch块代码的位置有关系,如:

class MyException extends Exception 
{
}

public class ExceptionTest
{
	public static void main(String[] args)
	{
		try 
		{
			throw new MyException();
		}
		catch (Exception e)
		{
			System.out.println("Catch an Exception: " + e.getClass().toString());
		}
		catch (MyException me)
		{
			System.out.println("Catch a MyException: " + me.getClass().toString());
		}	
	}
}

//output: Compiling Error
/* 已捕捉到异常MyException*/

//when comment or delete the 'catch (MyException me)' block
//output:
/* Catch an Exception: class MyException*/

  这里,catch (Exception e)就屏蔽了catch (MyException me)。但是,如果我们把catch (MyException me)置于catch (Exception e)之上,就不会有屏蔽。如:

class MyException extends Exception 
{
}

public class ExceptionTest
{
	public static void main(String[] args)
	{
		try 
		{
			throw new MyException();
		}
		catch (MyException e)
		{
			System.out.println("Catch a MyException: " + e.getClass().toString());
		}
		catch (Exception e)
		{
			System.out.println("Catch an Exception: " + e.getClass().toString());
		}	
	}
}

//output:
/* Catch a MyException: class MyException*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值