try-catch 구문 중첩시 동작되는 순서

try catch 구문이 중첩되 있을 때 동작되는 순서가 매번 헷갈려 작성해보려고 합니다.

try가 중첩되있을 경우 첫번째 try문 안에서 오류가 난 경우, try안에 구현되있는 코드 진행을 멈추고, catch문으로 바로 이동합니다.

그 다음 바깥에 있는 try구문은 정상적으로 실행이 되고, 오류가 없는 경우 바깥에 있는 catch문은 타지 않고 코드가 종료됩니다.

 

예제

public static void main(String[] args)
{
	int[] array = {1, 2, 3};

	try
	{
		Console.WriteLine("aaa");
		
		try
		{
			for(int i=0 ; i<5; i++)
			{
				Console.WriteLine(array[i]);
			}
			Console.WriteLine("bbb");
		}
		catch(Exception ex)
		{
			Console.WriteLine($"예외가 발생하였습니다. {e.Message}");
		}
		Console.WriteLine("ccc");
	}
	catch(Exception ex)
	{
			Console.WriteLine($"예외가 발생하였습니다. {e.Message}");
	}
	Console.WriteLine("ddd");
}

실행결과

aaa
1
2
3
예외가 발생했습니다. 인덱스가 배열 범위를 벗어났습니다
ccc
ddd