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 |