Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 try, catch, finally 블록 사이에 코드를 작성할 수 있을까?

결론부터 말하자면, try, catch, finally 블록 사이에는 어떠한 문장도 작성할 수 없습니다. 이 세 블록은 하나의 단위로 취급되기 때문입니다.

try, catch, finally의 역할

각 블록은 다음과 같은 고유한 기능을 수행합니다.

  • try 블록: 예외 객체를 식별하고, 해당 예외 객체를 포착한 후 try 블록의 실행을 일시 중단하면서 식별된 예외 객체와 함께 제어 흐름을 catch 블록으로 전달합니다.
  • catch 블록: try 블록에서 전달받은 예외 클래스 객체를 수신하고, catch 블록 내에 정의된 해당 예외 클래스의 참조 변수에 그 객체를 할당합니다.
  • finally 블록: 예외 발생 여부와 관계없이 반드시 실행되는 블록입니다.

가능한 조합과 컴파일 오류

Java에서는 다음과 같은 조합으로 예외 처리 코드를 작성할 수 있습니다.

  • try + catch 블록
  • try + 다중 catch 블록
  • try + finally 블록
  • try + catch + finally 블록

하지만 이러한 블록들 사이에는 어떤 코드나 문장도 넣을 수 없습니다. 만약 블록 사이에 문장을 삽입하려고 하면 컴파일 타임 오류(compile-time error)가 발생합니다.

문법(Syntax)

try
{
    // 예외 발생 여부를 감시할 문장들
}
// 이 위치에는 어떤 문장도 작성할 수 없음
catch(Exception ex){
    // 여기서 예외를 포착하여 처리
}
// 이 위치에는 어떤 문장도 작성할 수 없음
finally{
    // finally 블록은 선택 사항이며, try 또는 try-catch 블록이 존재할 때만 사용 가능
    // try 블록에서 예외가 발생했는지, 그리고 발생한 예외가 catch 블록에서
    // 처리되었는지와 무관하게 항상 실행됨
    // 단, System.exit() 호출 시나 Error가 발생한 경우에는 실행되지 않음
}

예제 코드

public class ExceptionHandlingTest {
    public static void main(String[] args) {
        System.out.println("여기에는 원하는 만큼의 문장을 자유롭게 작성할 수 있습니다");
        try {
            int i = 10/0; // 이 문장은 ArithmeticException을 발생시킴
            System.out.println("이 문장은 실행되지 않습니다");
        }
        // 여기에는 문장을 작성할 수 없음
        catch(ArithmeticException ex){
            System.out.println("예외가 발생하면 이 블록이 즉시 실행됩니다");
        }
        // 여기에는 문장을 작성할 수 없음
        finally {
            System.out.println("이 블록은 항상 실행됩니다");
        }
        System.out.println("여기에는 원하는 만큼의 문장을 자유롭게 작성할 수 있습니다");
    }
}

실행 결과

여기에는 원하는 만큼의 문장을 자유롭게 작성할 수 있습니다
예외가 발생하면 이 블록이 즉시 실행됩니다
이 블록은 항상 실행됩니다
여기에는 원하는 만큼의 문장을 자유롭게 작성할 수 있습니다

정리

try, catch, finally는 하나의 예외 처리 단위로 묶여 있으므로 블록 사이에 별도의 문장을 삽입할 수 없습니다. 다만 try 블록 앞이나 전체 블록이 끝난 후에는 자유롭게 코드를 작성할 수 있다는 점을 기억해 두면 좋습니다.