네, 가능합니다. finally 블록을 활용하면 catch 블록 없이 try 블록만으로 예외 처리 구조를 작성할 수 있습니다.
자바에서 finally 블록은 try 블록 내에서 예외가 발생하더라도 반드시 실행됩니다. 유일한 예외는 System.exit()가 호출되는 경우로, 이때는 JVM이 종료되기 때문에 finally 블록이 실행되지 않습니다.
예제 1: 기본적인 try-finally 구조
public class TryBlockWithoutCatch {
public static void main(String[] args) {
try {
System.out.println("Try Block");
} finally {
System.out.println("Finally Block");
}
}
}실행 결과
Try Block Finally Block
위 예제에서 볼 수 있듯이, try 블록이 실행된 후 finally 블록이 정상적으로 실행됩니다.
return 문이 있어도 finally 블록은 실행됩니다
흥미로운 점은 메서드에 반환 타입이 존재하고 try 블록에서 이미 값을 반환(return)했더라도, finally 블록은 여전히 실행된다는 것입니다.
예제 2: return 문이 있는 try-finally
public class TryWithFinally {
public static int method() {
try {
System.out.println("Try Block with return type");
return 10;
} finally {
System.out.println("Finally Block always execute");
}
}
public static void main(String[] args) {
System.out.println(method());
}
}실행 결과
Try Block with return type Finally Block always execute 10
정리
- catch 블록 없이 try-finally 조합만으로 코드를 작성할 수 있습니다.
- finally 블록은 예외 발생 여부와 관계없이 항상 실행됩니다.
- try 블록에서 return 문을 만나도 finally 블록은 메서드 종료 전에 실행됩니다.
- 단,
System.exit()호출 시에는 finally 블록이 실행되지 않습니다.
이러한 특성 덕분에 finally 블록은 파일 스트림 닫기, 데이터베이스 연결 해제 등 리소스 정리 작업에 널리 활용됩니다.