다음을 통해 공유


Finally 블록을 사용하는 방법

예외가 발생하면 실행이 중단되고 해당 예외 처리기에 제어가 제공됩니다. 이 경우 대체로 실행될 것으로 예상한 코드 줄을 건너뜁니다. 파일 닫기와 같은 일부 리소스 정리 작업은 예외가 throw된 경우에도 수행해야 합니다. 이 작업을 위해 finally 블록을 사용할 수 있습니다. finally 블록은 예외가 throw되었는지 여부에 관계없이 항상 실행됩니다.

다음 코드 예제에서는 try/catch 블록을 사용하여 ArgumentOutOfRangeException을 catch합니다. Main 메서드는 두 개의 배열을 만들고 한 배열을 다른 배열에 복사하려고 합니다. length가 -1로 지정되고 오류가 콘솔에 기록되므로 작업은 ArgumentOutOfRangeException을 생성합니다. finally 블록은 복사 작업의 결과에 관계없이 실행됩니다.

using namespace System;

ref class ArgumentOutOfRangeExample
{
public:
    static void Main()
    {
        array<int>^ array1 = {0, 0};
        array<int>^ array2 = {0, 0};

        try
        {
            Array::Copy(array1, array2, -1);
        }
        catch (ArgumentOutOfRangeException^ e)
        {
            Console::WriteLine("Error: {0}", e);
            throw;
        }
        finally
        {
            Console::WriteLine("This statement is always executed.");
        }
    }
};

int main()
{
    ArgumentOutOfRangeExample::Main();
}
class ArgumentOutOfRangeExample
{
    public static void Main()
    {
        int[] array1 = {0, 0};
        int[] array2 = {0, 0};

        try
        {
            Array.Copy(array1, array2, -1);
        }
        catch (ArgumentOutOfRangeException e)
        {
            Console.WriteLine("Error: {0}", e);
            throw;
        }
        finally
        {
            Console.WriteLine("This statement is always executed.");
        }
    }
}
Class ArgumentOutOfRangeExample
    Public Shared Sub Main()
        Dim array1() As Integer = {0, 0}
        Dim array2() As Integer = {0, 0}

        Try
            Array.Copy(array1, array2, -1)
        Catch e As ArgumentOutOfRangeException
            Console.WriteLine("Error: {0}", e)
            Throw
        Finally
            Console.WriteLine("This statement is always executed.")
        End Try
    End Sub
End Class

참고 항목