예외 클래스 정리 : jang-sn.tistory.com/17
예외 처리: 프로그램 실행 중 예외가 발생할 때, 갑자스러운 종료를 막고, 정상 실행 상태를 유직하도록 처리하는 것. 또한 로그를 남기게 할 수 있다.
자바 컴파일러는 일반 예외가 발견되면 예외 처리 코드를 강제로 요구한다. 실행 예외는 개발자가 경험적으로 코드를 작성한다.
try-catch-finally 블록: 생성자 또는 메소드 내부에서 작성되는 예외 처리 코드다. finally 는 작성하지 않아도 된다.
finally 블록은 예외가 잡힙더라도 실행되기 때문에 catch 문에 return 문이 있다고 해도, fianlly 블록이 실행된 후에 return 문이 실행된다.
try{
명령 코드;
} catch(예외클래스1 e){
//try 코드 실행 중 예외클래스1이 발생했을 때 실행됨.
예외 처리 코드;
} finally {
//예외 발생과 상관 없이 항상 실행
// 리소스를 정리하는 코드를 주로 씀
}
다중 catch 블록: 발생되는 예외 별로 예외 처리 코드를 다르게 할 수 있다.
try{
명령 코드;
} catch(예외클래스1 e){
//예외클래스1이 발생했을 때 실행됨.
예외 처리 코드;
} catch(예외클래스2 e) {
//예외클래스1이 발생하지 않아야 한다.
//예외클래스2가 발생했을 때 실행됨.
예외 처리 코드;
} catch(Exception e) {
//예외 클래스1,2가 발생하지 않아야 한다.
//모든 예외는 Exception을 상속 받으므로 어떤 예외도 실행 가능하다.
//따라서 Exception catch 블록은 제일 밑에 작성한다.
예외 처리 코드;
}
throws: 메소드에서 처리하지 않은 예외를 호출한 곳으로 넘긴다. 호출한 곳에서 예외를 다양하게 처리할 수 있다.
main() 에서 throws 하는 경우 JVM에서 처리한다.
try{
method2();
} catch (예외클래스1 e){
예외 처리;
}
//따라서 호출하는 곳마다 예외 처리 코드를 작성해야 한다.
public void method2() throws 예외클래스1{ //예외클래스1이 발생하면 호출하는 곳에서 예외 처리하도록 한다
명령 코드;
}
예외클래스.printStackTrace() : 예외에 대한 정보를 출력한다. 어디서, 왜 발생했는 지 등등. 디버깅의 목적으로 사용한다.
- 직접 예외 클래스를 만들고 사용하려면
- Exception 클래스를 상속받는 클래스를 만든다.
- 상황에 따라 Exception의 메소드들을 오버라이딩하여 사용한다.
- 만든 예외 클래스를 사용하는 메소드를 작성할 때, throws 키워드와 같이 선언하고, 예외가 발생하는 부분에 throw new 예외클래스(); 를 작성한다.
if (num == 1)
System.out.println("OK");
else
throw new MyException("doException");
- 해당 메소도를 try-catch 구문과 함께 사용한다.
try-catch-resource(자바7부터 제공) : Resources를 가져와 사용하는 코드는 원하는 처리가 끝나면 리소스와의 연결을 끊어야 한다. 그래서 finally 블록을 사용해서 연결을 해제할 수 있지만, 리소스를 가져오는 클래스가 AutoCloseable 기능을 갖고 있다면(인터페이스 구현), try 옆에 괄호를 붙여 괄호 안에서 리소스를 열면 try-catch문이 끝나면 자동으로 연결을 끊어준다.
try (FileWriter f = new FileWriter("exam.txt")) {
f.write("hello");
} catch (IOException e){
e.printStackTrace():
}
// try()안에서 f를 열지 않았다면 finally 블록 안에 f.close()라는 코드를 작성해야 한다.
'study > java' 카테고리의 다른 글
자바/Java 컬렉션 강의 정리(1) (0) | 2021.01.21 |
---|---|
자바/JAVA 자바 API (0) | 2021.01.13 |
배열의 문자열화, ArrayList 섞기 (0) | 2021.01.11 |
자바/JAVA ArrayList (0) | 2021.01.11 |
자바/JAVA 예외 클래스 (0) | 2021.01.10 |