프로그래밍언어/JAVA
<JAVA>예외처리-3
컴퓨터과학
2020. 12. 11. 18:57
throw/throws 차이
throw는 예외발생 시키는것
throws는 예외를 미루는데 사용됩니다.
? 솔직히 이렇게 말하면 무슨소리인지 잘 이해 안갑니다.
그렇다면 한번 코드를 보고 이해를 해보겠습니다.
Main 클래스:
package Test01;
public class Main {
public static void main(String [] args) {
try {
FindNumbers();
}catch (ExceptionZero e) {
// TODO: handle exception
System.out.println("FindNumbers 20 발견");
}finally {
}
}
public static void FindNumbers() throws ExceptionZero{
for(int i=0;i<21;i++) {
try {
if(i!=20) {
System.out.println("20 가 아님");
}else {
throw new ExceptionZero();
}
} catch (ExceptionZero e) {
System.out.println(i+" 임");
throw e;
}
}
}
Custom 예외 클래스 :
package Test01;
public class ExceptionZero extends Exception {
}
먼저 메인 클래스부터 천천히 보겠습니다. ExceptionZero라는 커스텀된 예외처리 구문이다
위에 코드에 보이는 Exception을 상속받아서 Excetption의 기능들을 가지고온 자식(파생)클래스 인셈이다,
즉 Exception클래스와 똑같은 효과입니다.
try {
FindNumbers();
}
catch (ExceptionZero e) {
// TODO: handle exception
System.out.println("FindNumbers 20 발견");
}
finally {
System.out.println("종료");
}
그렇다면 FindNumbers();를 확인해보겠습니다.
public static void FindNumbers() throws ExceptionZero{
for(int i=0;i<21;i++) {
try {
if(i!=20) {
System.out.println("20 가 아님");
}else {
throw new ExceptionZero();
}
} catch (ExceptionZero e) {
System.out.println(i+" 임");
throw e;
}
}
}
이 함수에서 보면 FindNumbers() throws ExceptionZero
ExceptionZero로 예외를 미루는것 입니다. 즉 예외가 발생시 ExceptionZero 로 넘기게 됩니다.
위에서 ExceptionZero클래스는 Exception을 상속 받아 기능은 같습니다.
그렇다면 예외가 발생하는 throw는
for문으로 20번 돌고 20 숫자가 되면 else 구문인 throw new ExceptionZero();를 할당됩니다 이때
예외가 발생이되고 20이라는 숫자를 찾으면 예외가 발생해서 20 하며 catch 구문으로 넘아게 됩니다.
그리고 예외가 발생했으니 main으로 돌아와
catch (ExceptionZero e) {
// TODO: handle exception
System.out.println("FindNumbers 20 발견");
}
"FindNumbers 20 발견" 출력합니다.
결과: