일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래밍
- OOP
- 소수판정
- 자동 형변환
- 공개키 암호
- try&catch
- 예외처리
- 자료구조
- LANG
- 재귀호출기본
- 백준
- 백준 알고리즘
- 2884
- class
- 알고리즘
- lang package
- 객체
- 현대암호
- jvm
- 연결된 예외
- 객체지향
- bubble-sort
- JSP
- 디렉티브
- BufferedWrite
- HTML
- 암호론
- java
- 클래스 패스
- 형변환 연산자
- Today
- Total
코드일기장
[Java] 메서드에 예외 선언, finally 블럭 (예외처리 1-4) 본문
🎈 메서드에 예외 선언
예외를 처리하는 방법은 try&catch 말고 예외 메서드를 선언하는 방법이 있다.
try&catch문은 예외에 대한 직접처리를 한다. 반대로 예외 메서드는 예외를 떠넘기고 처리는 안 한다.
메서드에 예외를 선언하려면 메서드 선언부에 throws 키워드를 사용 메서드 내에서 발생할 수 있는 예외를 적으면 된다.
static void method()throws Exception,ArrayIndexOutOfBoundsException{
//메서드 내용
}
이런 식으로 method 메서드 선언부에 throws 키워드 작성 후 예외들을 적는다. 예외들은 한 개 이상 적을 수 있다. 2개 이상부터 예외들을 쉼표(,)로 구분한다.
public class Hello {
public static void main(String[] args) throws Exception {
method();
}
static void method()throws Exception{
method2();
}
static void method2()throws Exception{
Exception e=new Exception();
throw e;
}
}
위 코드는 비정상 종료가 된다. 처음 main()에서 method()를 호출한다. method()는 다시 method2()를 호출한다. 현재 호출 스택에는 제일 밑으로 main->method->method2가 있는 상태이다.
여기서 method2는 예외를 강제적으로 발생시켰다. 하지만 try&catch로 예외처리를 안 해주어서 Exception예외는 호출스택 제일 위에 있던 method에게 떠넘겨진다. method역시 예외처리를 안해 그대로 main메서드에게 떠넘긴다.
main메서드 역시 예외처리를 안해 JVM에게 예외가 떠넘겨 저 프로그램이 강제적으로 종료된다.
결론적으로 예외 던지기는 호출한 쪽으로 던지는 거다.
public class Hello {
public static void main(String[] args) throws Exception{
try {
method();
}catch(Exception e) {
System.out.println("예외 발생 "+e.getMessage());
}
}
static void method()throws Exception{
method2();
}
static void method2()throws ArrayIndexOutOfBoundsException{
throw new ArrayIndexOutOfBoundsException("예외발생111");
}
}
🎈 finally 블럭
예외 발생 여부 관계없이 수행되어야 하는 코드
finally블럭은 try-catch문 맨 마지막에 위치해야 한다.
만들어진 이유는 예외가 발생하거나 발생하지 않건 실행되어야 할 코드가 있을 것이다. 그 코드를 try와 catch둘다 작성하는 건 중복코드이므로 중복코드 제거를 위해 만들어진 것 이다.
'try->catch->finally' 순이다.
만약 예외 발생 안 하면
'try->finally' 순이다.
public static void main(String[] args) {
try {
System.out.println(0/0);
}catch(Exception e){
}finally {
System.out.println("무조건 실행");
}
}
public static void main(String[] args) {
try {
}catch(Exception e){
}finally {
System.out.println("무조건 실행");
}
}
🚀 다음 글 보기 (예외처리 1-5)
🚀 이전 글 보기 (예외처리 1-3)
커버사진
<div>아이콘 제작자 <a href="https://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/kr/" title="Flaticon">www.flaticon.com</a></div>
'Java' 카테고리의 다른 글
[Java] 연결된 예외 (예외처리1-6) (0) | 2022.01.23 |
---|---|
[Java] 사용자 정의 예외, 예외 되던지기 (예외처리 1-5) (0) | 2022.01.16 |
[Java] JVM메모리 구조, 기본 재귀호출-팩토리얼 (0) | 2022.01.11 |
[Java] 멀티 catch 블럭, 예외 발생, checked와 unchecked (예외처리1-3) (0) | 2022.01.05 |
[Java] try-catch문(예외처리 1-2) (0) | 2021.12.27 |