프로그래밍언어/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 발견" 출력합니다.

 

 

결과: