`

[#0x001D] first catch

    博客分类:
  • Java
 
阅读更多

  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*/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics