0. 간단 설명
throw-> 강제로 예외(에러) 발생
throws -> 예외를 상위쪽으로 책임 넘김(상위로 Exception 발생), 예외 던지는 거
-사용 법(throws)-
- 코드 -
- 결과 -
-사용 법-
throw new 발생시킬 예외;
- 코드 -
- 결과 -
-사용 법-
(throw + throws) 함께 사용하는 거
- 코드 -
설명 - >
첫번째, Test 클래스의 test메소드에 try catch부분에서 발생 했으니깐, 일딴 해당 예외를 처리해줍니다.
두번째, 그리고, throw를 통해 한번더 NumberFormatException을 발생시켜 줍니다.
(다시 한번 발생된 NumberFormatException의 예외는 메인에서 처리 됨)
= (메인 코드에 해당 catch문의 NumberFormatException로 처리 됨)
셋번째, 그럼 결과에 출력된 것이 2번 출력된것을 확인 할 수 있을 것이다.
(결론,!! 예외 2번 실행 된거임!!)
이렇게 본다면 메소드에서 예외 처리하고 실행한 메인쪽에서도 예외를 추가적으로 처리할 수 있게 된다.
그럼 예외처리를 분산해서 처리 할 수 있게 할수도 있다!!
- 결과 -
1. 자동 리소스 닫기
자바 7부터 추가된 try-with-resources 를 사용하면 예외 발생 여부와 상관없이 사용했던 리소스 객체(각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널)의 close() 메소드를 호출해서 안전하게 닫아줍니다.
1) 다음은 이전 자바 6에서 사용했던 리소스 객체 닫기 코드입니다.
- 코드 -
이 코드 처럼
월래 finally 블록에서 다시 try-catch 블록으로 fis를 닫아줘야합니다. 다소 복잡한 면이 있습니다.
2) 다음으로는 자바 7에서 닫는 방법을 예제로 보겠습니다.
- 코드 -
* 아래코드처럼 수행하기 위해서 java.lang.AutoCloseable 인터페이스를 구현한 객체여야 합니다.
- 결과 -
* AutoCloseable 구현하면 기본적으로 사용 해야하는 코드( 밑에 )
2. -참고-
throw가 예외를 발생시키는 거
throws 예외를 던지는 거
throw는 메소드에서 상위 블럭으로 예외를 던지는 거
throws는 현재 메소드에서 상위 메소드로 예외를 던진다
throw는 억지로(강제로) 에러(예외)를 발생시킬 수 있고,
현재 메소드의 에러를 처리한 후에
상위 메소드에 에러 정보를 줌으로써 상위 메소드에서도 에러가 발생한 것을 감지 할 수 있다.
throws는 예외를 자신이 처리하지 않고, 자신을 호출하는 메소드에게 책임을 넘긴다.
throws -> 책임 넘김(상위 메서드로 Exception 발생), 예외 던지는 거
throw -> 강제로 예외(에러) 발생
- 코드 -
- 결과 -
- 설명 -
실행순서
- main의 try문에서 onAction() 메서드 호출
- onAction()의 for문 내에서 try-catch문으로 i==6일 경우 Check6Exception()을 발생(throw 사용)
- catch문을 통해 예외처리 및 exception 정보를 현재 메서드로 전달할 수 있다.
- throws 키워드를 통해 3. 에서 전달한 exception 정보를 main()으로 전달하여 main() 의catch()문 수행
- finally() 수행
3. 예외 떠넘기기
메소드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try-catch 블록으로 예외를 처리하는 것이 기본이지만,
경우에 따라서는 메서드를 호출한 곳으로 예외를 떠넘길 수 있습니다.
이때 사용하는 키워드는 throws 입니다.
throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 합니다.
throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열해주면 됩니다.
throws 키워드가 붙어있는 메서드는 반드시 try블록 내에서 호출되어야 합니다. 그리고 catch 블록에서 떠넘겨 받은 예외를 처리해야 합니다.
- 코드 -
- 결과 -
- 다른 예 -
'■ JAVA > Study' 카테고리의 다른 글
[JAVA] StringBuffer(스트링버퍼) (0) | 2020.04.22 |
---|---|
[JAVA] 예외 처리(Exception 처리) - 4.사용자 정의 예외 (0) | 2020.04.22 |
[JAVA] 예외 처리(Exception 처리) - 2.예외 처리 코드 (0) | 2020.04.20 |
[JAVA] 예외 처리(Exception 처리) - 1.예외 & 실행 예외 (0) | 2020.04.20 |
[JAVA] 예외 처리(Exception 처리) - 0.기본틀 + throw + throws ★★ (0) | 2020.04.20 |