728x90
try-with-resources
예외 발생 여부와 관계없이 사용했던 리소스 객체(각종 입출력스트림, 서버소켓, 소켓, 각종채널)의 close() 메소드를 호춯해서 안전하게 리소스를 닫아준다.
리소스 : 데이터를 읽고 쓰는 객체
예제)
package sec05_try_with_resourcse;
public class FileInputStream implements AutoCloseable
{
private String file;
public FileInputStream(String file)
{
this.file = file;
}
public void read()
{
System.out.println(file+"을 읽습니다.");
}
@Override
public void close() throws Exception
{
System.out.println(file + "을 닫습니다.");
}
}
package sec05_try_with_resourcse;
public class TryWithResourcesExample
{
public static void main(String[] args)
{
try(FileInputStream fis = new FileInputStream("file.txt"))
{
fis.read(); // try블록이 끝나면 자동적으로 fis의 close()가 실행됨
throw new Exception(); //예외 발생코드
}
catch(Exception e)
{
System.out.println("예외 처리 코드가 실행되었습니다."); //예외발생코드때문에 실행됨
}
}
}
throws
메소드 선언부 끝에 작성
리턴타입 메소드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ...
{
}
메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할
public void method1() throws ClassNotFoundException
{
method2();
}
클래스 생성자와 메소드 선언부에 throws 키워드가 붙어있으면 try-catch 블록으로 예외처리를 해야한다. 아니면 throws를 다시 사용해서 예외를 호출한 곳으로 떠넘겨야 한다. 그렇지 않으면 컴파일 오류가 발생한다.
예제)
package sec06_throws;
public class ThrowsExample
{
public static void main(String[] args)
{
try
{
findClass(); //반드시 호출하는곳에서는 예외처리를 해주어야함.
}
catch(ClassNotFoundException e)
{
System.out.println("클래스가 존재하지 않습니다.");
}
}
//메소드를 호출한 곳으로 예외를 떠넘길것임
public static void findClass() throws ClassNotFoundException
{
Class clazz = Class.forName("java.lang.String2"); //존재하지 않는 클래스를 제공 (오류가 발생 / 예외처리 해줘야함)
}
}
728x90
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 예외 종류에 따른 처리 코드 (0) | 2021.07.27 |
---|---|
[JAVA] 예외 처리 코드(try-catch-finally) (0) | 2021.07.23 |
[JAVA] 예외와 예외 클래스 (0) | 2021.07.22 |
[JAVA] 익명 객체 (0) | 2021.07.21 |
[JAVA] 중첩 클래스와 중첩 인터페이스 - 중첩 인터페이스 (0) | 2021.07.21 |