trt{}catch{}嵌套时异常程序执行顺序

public class ExceptionTest {
	public static void main(String[] args) {
		try
        {
            //A  (A 出异常,执行顺序为AFG)
			System.out.println("我是A,我被执行了");
            try
            {
                //B(B出异常,B能捕捉,执行顺序为ABCDEG); 
            	//B(B出异常,B能捕捉,执行顺序为ABDFG);
            	System.out.println("我是B,我被执行了");
            	int j = 100/0;
            }
            catch(Exception e)
            {
                //C  (C出异常,执行顺序为ABCDFG)
            	System.out.println("我是C,我被执行了");
            	int a = 100/0;
            }
            finally
            {
                //D  
            	System.out.println("我是D,我被执行了");
            }
            //E  
            System.out.println("我是E,我被执行了");
        }
        catch(Exception e)
        {
            //F
        	System.out.println("我是F,我被执行了");
        }
        finally
        {
            //G
        	System.out.println("我是G,我被执行了");
        }
	}
}

java异常匹配有两个重要原则:

  • 异常控制系统会按当前catch控制器的编写顺序来搜索,一旦找到相符的catch控制器,就认为异常已被捕获,不再进行更多的搜索。
  • catch控制器可以捕获当前异常类以及从它衍生的子类。
  • 注意, 在catch控制器编写顺序中, 不要将父类异常位于子类异常之前,编译器会报错。因为永远无法执行到这个子类catch控制器。

你可能感兴趣的:(java基础,java,异常)