import java.io.FileWriter;
import java.io.IOException;
public class CheckedExceptionApp {
public static void main(String[] args) {
FileWriter f = null;
try {
f = new FileWriter("data.txt");
f.write("Hello");
// close를 하기 전에 예외가 발생한다면 close가 실행되지 않음
// f.close();
} catch(IOException e) {
e.printStackTrace();
} finally {
if (f != null) {
try {
f.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
위,아래 코드는 놀랍게도 같다...!
import java.io.FileWriter;
import java.io.IOException;
public class TryWithResource {
public static void main(String[] args) {
try (FileWriter f = new FileWriter("data.txt")) {
f.write("Hello");
} catch (IOException e) {
e.printStackTrace();
}
}
}
객체를 여러 개 선언할 수도 있고, 세미콜론(;)으로 구별합니다.
객체의 정의 가장 마지막에는 세미콜론(;)을 넣지 않습니다.
전체 try 문(try, catch, finally 등)이 종료되면 생성된 인스턴스는 자동으로 종료되기 때문에 명시적으로 close를 이용해서 자원을 놓아주지 않습니다.
-출처: 생활코딩 쉽게 배우는 자바
Checked exception은 try catch 또는 throws를 이용하여 잡지 않는다면 컴파일이 되지 않음. ( Throwable로부터 상속된 모든 클래스에서 RuntimeException을 제외한 모든 에러와 예외들에 해당함.)
반면 unchecked exception 은 RuntimeException 클래스로부터 상속된 예외들이며, 컴파일 가능 및 실행 할 수 있다. 그러나 프로그램 실행 중 예외가 발생할 수 있다.
왜 굳이 나눴을까? (더 공부 필요)
간단하게는 Unchecked exception은 사용자의 실수로 발생할 수 있는 것들이기 때문에 실행이 가능하게 했다라고 생각하면 된다.