try-catch문을 해서 굳이 예외처리를 하지 않아도 되는 경우도 있습니다. 그러나 재수없게(?) 실행시 에러가 나는경우에는 좀 곤란하겠죠..?

어떤경우에는 반드시 예외처리를 해야하는 경우가 있습니다.

try-catch문은 직접 내가 예외처리를 해결하는 로직을 작성하는 것입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class FinallyTest {
    public static void main(String[] args) {
        try{
               System.out.println(3/0);
               System.out.println("2");
        }catch(Exception e){
            System.out.println("3/0은 할 수 없습니다.");
        }finally{
            System.out.println("finallu{} 블록은 예외와 상관없이 실행되어야할 부분입니다.");
        }
    }
}
cs

여기서 4번라인에서 발생한 예외를 7번라인에서 catch한겁니다.

catch 즉, 잡았다는거죠?

7번라인에서 예외를 던졌다고(throw) 표현하고 이 예외를 catch해서 catch블록에서 처리하는 겁니다.


예외가 던져졌을때 직접 처리하는게 아니라 자신을 호출한 쪽으로 예외를 던지어 처리하게 하려고 할떄 throws를 사용합니다.

1
2
3
4
5
6
7
8
9
public class ThrowsDemo {
    public static void main(String[] args) {            
            ThrowsDemo td = new ThrowsDemo();
            td.test();
    }
    public void test(){
        System.out.println(3/0);
    }
}
cs

위의 소스를 실행하면 0으로 나눌수 없다는 에러가 콘솔창에 표시될 것입니다.

우리가 아는 방법대로라면 test()안에서 try-catch문을 사용하면 해결 할 수 있습니다.

하지만 그렇게 하지않고 throws라는 키워드를 이용해서 test()를 호출한 main메소드에서 처리하도록 하려고 합니다. (throws 와 throw는 다릅니다!)

throws를 사용하는 방법은 예외처리르 해야할 메소드명 옆에 throws 예외이름 을 적어줍니다.



이렇게 예외를 던집니다.

그러면 test()를 호출한 메인메소드가 이 예외를 처리하여야합니다.


위와 같이 예외를 던져도 최종적으로는 try-catch문으로 예외처리를 해줍니다.


만약 main메소드에서 throws구문을 사용하면 어떻게 될까요?

바로 main메소드를 호출하는 JVM이 Exception을 잡아서(catch) 처리를 하게 됩니다.

'프로그래밍 > Java' 카테고리의 다른 글

[java] 34. 제네릭(Generics)  (1) 2015.07.15
[java] 33. 내부클래스(Inner class)  (0) 2015.07.02
[java] 31. finally블록  (0) 2015.07.02
[java] 30. Math클래스  (0) 2015.06.30
[java] 29. String클래스 알아보기 Ⅱ  (0) 2015.06.17